mirror of
https://github.com/Lissy93/dashy.git
synced 2025-11-11 00:19:47 +01:00
18 lines
50 KiB
HTML
18 lines
50 KiB
HTML
<!doctype html>
|
||
<html lang="en" dir="ltr">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<meta name="generator" content="Docusaurus v2.0.0-beta.2">
|
||
<title data-react-helmet="true">Deployment | Dashy</title><meta data-react-helmet="true" property="og:url" content="https://dashy.to/docs/deployment"><meta data-react-helmet="true" name="docusaurus_locale" content="en"><meta data-react-helmet="true" name="docusaurus_version" content="current"><meta data-react-helmet="true" name="docusaurus_tag" content="docs-default-current"><meta data-react-helmet="true" property="og:title" content="Deployment | Dashy"><meta data-react-helmet="true" name="description" content="Welcome to Dashy, so glad you're here :) Deployment is super easy, and there are several methods available depending on what type of system you're using. If you're self-hosting, then deploying with Docker (or similar container engine) is the recommended approach."><meta data-react-helmet="true" property="og:description" content="Welcome to Dashy, so glad you're here :) Deployment is super easy, and there are several methods available depending on what type of system you're using. If you're self-hosting, then deploying with Docker (or similar container engine) is the recommended approach."><link data-react-helmet="true" rel="shortcut icon" href="/img/favicon.ico"><link data-react-helmet="true" rel="canonical" href="https://dashy.to/docs/deployment"><link data-react-helmet="true" rel="alternate" href="https://dashy.to/docs/deployment" hreflang="en"><link data-react-helmet="true" rel="alternate" href="https://dashy.to/docs/deployment" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.dd50695d.css">
|
||
<link rel="preload" href="/assets/js/runtime~main.e7540d76.js" as="script">
|
||
<link rel="preload" href="/assets/js/main.e0f631c7.js" as="script">
|
||
</head>
|
||
<body>
|
||
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
|
||
<div><a href="#main" class="skipToContent_1oUP">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><a class="navbar__brand" href="/"><img src="/img/dashy.png" alt="Dashy Logo" class="themedImage_1VuW themedImage--light_3UqQ navbar__logo"><img src="/img/dashy.png" alt="Dashy Logo" class="themedImage_1VuW themedImage--dark_hz6m navbar__logo"><b class="navbar__title">Dashy</b></a></div><div class="navbar__items navbar__items--right"><div class="react-toggle displayOnlyInLargeViewport_GrZ2 react-toggle--disabled"><div class="react-toggle-track" role="button" tabindex="-1"><div class="react-toggle-track-check"><span class="toggle_71bT">🌜</span></div><div class="react-toggle-track-x"><span class="toggle_71bT">🌞</span></div><div class="react-toggle-thumb"></div></div><input type="checkbox" class="react-toggle-screenreader-only" aria-label="Switch between dark and light mode"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div><div class="navbar-sidebar"><div class="navbar-sidebar__brand"><a class="navbar__brand" href="/"><img src="/img/dashy.png" alt="Dashy Logo" class="themedImage_1VuW themedImage--light_3UqQ navbar__logo"><img src="/img/dashy.png" alt="Dashy Logo" class="themedImage_1VuW themedImage--dark_hz6m navbar__logo"><b class="navbar__title">Dashy</b></a></div><div class="navbar-sidebar__items"><div class="menu"><ul class="menu__list"></ul></div></div></div></nav><div class="main-wrapper docs-wrapper doc-page"><div class="docPage_31aa"><aside class="docSidebarContainer_3Kbt"><div class="sidebar_15mo"><nav class="menu menu--responsive thin-scrollbar menu_Bmed menuWithAnnouncementBar_2WvA" aria-label="Sidebar navigation"><button aria-label="Open menu" aria-haspopup="true" class="button button--secondary button--sm menu__button" type="button"><svg class="sidebarMenuIcon_fgN0" width="24" height="24" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><ul class="menu__list"><li class="menu__list-item"><a class="menu__link menu__link--sublist menu__link--active" href="#!">Running Dashy</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/quick-start">Quick Start</a></li><li class="menu__list-item"><a aria-current="page" class="menu__link menu__link--active active" tabindex="0" href="/docs/deployment">Deployment</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/configuring">Configuring</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/management">Management</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/troubleshooting">Troubleshooting</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">Community</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/showcase">User Showcase</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/contributing">Contributing</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/developing">Developing</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/development-guides">Development Guides</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">Feature Docs</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/icons">Icons</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/theming">Theming</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/status-indicators">Status Indicators</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/authentication">Authentication</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/searching">Keyboard Shortcuts</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/alternate-views">Alternate Views & Opening Methods</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/multi-language-support">Internationalization</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/backup-restore">Cloud Backup and Restore</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">Misc</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/privacy">Privacy & Security</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/changelog">Changelog</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/license">license</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/code-of-conduct">Contributor Covenant Code of Conduct</a></li></ul></li></ul></nav></div></aside><main class="docMainContainer_3ufF"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_3FnS"><div class="docItemContainer_33ec"><article><div class="markdown"><header><h1 class="h1Heading_27L5">Deployment</h1></header><p>Welcome to Dashy, so glad you're here :) Deployment is super easy, and there are several methods available depending on what type of system you're using. If you're self-hosting, then deploying with Docker (or similar container engine) is the recommended approach.</p><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="quick-start"></a>Quick Start<a class="hash-link" href="#quick-start" title="Direct link to heading">#</a></h4><p>If you want to skip the fuss, and <a href="/docs/quick-start">get straight down to it</a>, then you can spin up a new instance of Dashy by running:</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly"><pre tabindex="0" class="prism-code language-undefined codeBlock_23N8 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -p 8080:80 lissy93/dashy</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><p>See <a href="/docs/management">Management Docs</a> for info about securing, monitoring, updating, health checks, auto starting, web server configuration, etc</p><p>Once you've got Dashy up and running, you'll want to configure it with your own content, for this you can reference the <a href="/docs/configuring">configuring docs</a>.</p><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="deployment-methods"></a>Deployment Methods<a class="hash-link" href="#deployment-methods" title="Direct link to heading">#</a></h2><ul><li><a href="#deploy-with-docker">Deploy with Docker</a></li><li><a href="#using-docker-compose">Using Docker Compose</a></li><li><a href="#build-from-source">Build from Source</a></li><li><a href="#hosting-with-cdn">Hosting with CDN</a></li><li><a href="#run-as-executable">Run as executable</a></li><li><a href="#install-with-npm">Install with NPM</a></li><li><a href="#deploy-to-cloud-service">Deploy to cloud service</a></li><li><a href="#use-managed-instance">Use managed instance</a></li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="deploy-with-docker"></a>Deploy with Docker<a class="hash-link" href="#deploy-with-docker" title="Direct link to heading">#</a></h3><p><strong>Container Info</strong>: <a href="https://hub.docker.com/r/lissy93/dashy" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/badge/Architectures-amd64%20%7C%20arm32v7%20%7C%20arm64v8-6ba6e5" alt="Docker Supported Architecture"><img src="https://img.shields.io/badge/Base_Image-Alpine_3.14-6ba6e5" alt="Docker Base Image"><img src="https://img.shields.io/badge/Hosted_on-DockerHub-6ba6e5" alt="Docker Hosted on"></a></p><p><strong>Status</strong>: <a href="https://hub.docker.com/r/lissy93/dashy" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/docker/cloud/build/lissy93/dashy?label=Docker%20Build" alt="Docker Build Status"><img src="https://img.shields.io/docker/pulls/lissy93/dashy?color=ecb2f7" alt="Docker Pulls"><img src="https://img.shields.io/docker/stars/lissy93/dashy?color=f7f754&label=Docker%20Stars" alt="Docker Stars"><img src="https://img.shields.io/docker/image-size/lissy93/dashy/latest?color=1eea76" alt="Docker Image Size"><img src="https://img.shields.io/docker/cloud/automated/lissy93/dashy?color=f4a966&label=Docker%20Build" alt="Docker Cloud Build"></a></p><p>Dashy has a built container image hosted on <a href="https://hub.docker.com/r/lissy93/dashy" target="_blank" rel="noopener noreferrer">Docker Hub</a>. You will need <a href="https://docs.docker.com/get-docker/" target="_blank" rel="noopener noreferrer">Docker</a> installed on your system.</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly bash"><pre tabindex="0" class="prism-code language-bash codeBlock_23N8 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> -p </span><span class="token number" style="color:#36acaa">8080</span><span class="token plain">:80 </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> -v /root/my-local-conf.yml:/app/public/conf.yml </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> --name my-dashboard </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> --restart</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">always </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> lissy93/dashy:latest</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><p>Explanation of the above options:</p><ul><li><code>-d</code> Detached mode (not running in the foreground of your terminal)</li><li><code>-p</code> The port that should be exposed, and the port it should be mapped to in your host system <code>[host-port][container-port]</code>, leave the container port as is</li><li><code>-v</code> Specify volumes, to pass data from your host system to the container, in the format of <code>[host-path]:[container-path]</code>, you can use this to pass your config file, directory of assets (like icons), custom CSS or web assets (like favicon.ico, manifest.json etc)</li><li><code>--name</code> Give your container a human-readable name</li><li><code>--restart=always</code> Spin up the container when the daemon starts, or after it has been stopped</li><li><code>lissy93/dashy:latest</code> This last option is the image the container should be built from, you can also use a specific version or architecture type, by replacing <code>:latest</code> with one of the <a href="https://hub.docker.com/r/lissy93/dashy/tags" target="_blank" rel="noopener noreferrer">tags</a></li></ul><p>For all available options, and to learn more, see the <a href="https://docs.docker.com/engine/reference/commandline/run/" target="_blank" rel="noopener noreferrer">Docker Run Docs</a></p><p>Dashy is also available through GHCR: <code>docker pull ghcr.io/lissy93/dashy:latest</code></p><p>If you're deploying Dashy on a modern ARM-based board, such as a Raspberry Pi (2+), then you'll need to use one of Dashy's ARM images. Set the base image + tag to either <code>lissy93/dashy:arm64v8</code> or <code>lissy93/dashy:arm32v7</code>, depending on your system architecture. You can also use the <code>multi-arch</code> image, which should work on all system architectures. </p><p>The image defaults to <code>:latest</code>, but you can instead specify a specific version, e.g. <code>docker pull lissy93/dashy:release-1.5.0</code></p><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="using-docker-compose"></a>Using Docker Compose<a class="hash-link" href="#using-docker-compose" title="Direct link to heading">#</a></h3><p>Using Docker Compose can be useful for saving your specific config in files, without having to type out a long run command each time. Save compose config as a YAML file, and then run <code>docker compose up</code> (optionally use the <code>-f</code> flag to specify file location, if it isn't located at <code>./docker-compose.yml</code>). Compose is also useful if you are using clusters, as the format is very similar to stack files, used with Docker Swarm.</p><p>The following is a complete example of a <a href="https://github.com/Lissy93/dashy/blob/master/docker-compose.yml" target="_blank" rel="noopener noreferrer"><code>docker-compose.yml</code></a> for Dashy. Run it as is, or uncomment the additional options you need.</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly yaml"><pre tabindex="0" class="prism-code language-yaml codeBlock_23N8 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">---</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">version</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"3.8"</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">services</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">dashy</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># To build from source, replace 'image: lissy93/dashy' with 'build: .'</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># build: .</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">image</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> lissy93/dashy</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">container_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Dashy</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Pass in your config file below, by specifying the path on your host machine</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># volumes:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># - /root/my-config.yml:/app/public/conf.yml</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">ports</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> 4000</span><span class="token punctuation" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">80</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Set any environmental variables</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">environment</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> NODE_ENV=production</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Specify your user ID and group ID. You can find this by running `id -u` and `id -g`</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># - UID=1000</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># - GID=1000</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Specify restart policy</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">restart</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> unless</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">stopped</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Configure healthchecks</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">healthcheck</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">test</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'CMD'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'node'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'/app/services/healthcheck'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">interval</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 1m30s</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">timeout</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 10s</span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">retries</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"></span></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">start_period</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 40s</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><p>You can use a different tag, by for example setting <code>image: lissy93/dashy:arm64v8</code>, or pull from GHCR instead by setting <code>image: ghcr.io/lissy93/dashy</code>.</p><p>If you are building from source, and would like to use one of the <a href="https://github.com/Lissy93/dashy/tree/master/docker" target="_blank" rel="noopener noreferrer">other Dockerfiles</a>, then under <code>services.dashy</code> first set <code>context: .</code>, then specify the the path to the dockerfile, e.g. <code>dockerfile: ./docker/Dockerfile-arm32v7</code></p><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="build-from-source"></a>Build from Source<a class="hash-link" href="#build-from-source" title="Direct link to heading">#</a></h3><p>If you do not want to use Docker, you can run Dashy directly on your host system. For this, you will need both <a href="https://git-scm.com/downloads" target="_blank" rel="noopener noreferrer">git</a> and the latest or LTS version of <a href="https://nodejs.org/" target="_blank" rel="noopener noreferrer">Node.js</a> installed, and optionally <a href="https://yarnpkg.com/" target="_blank" rel="noopener noreferrer">yarn</a></p><ol><li>Get Code: <code>git clone https://github.com/Lissy93/dashy.git</code> and <code>cd dashy</code></li><li>Configuration: Fill in you're settings in <code>./public/conf.yml</code></li><li>Install dependencies: <code>yarn</code></li><li>Build: <code>yarn build</code></li><li>Run: <code>yarn start</code></li></ol><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="deploy-to-cloud-service"></a>Deploy to cloud service<a class="hash-link" href="#deploy-to-cloud-service" title="Direct link to heading">#</a></h3><p>If you don't have a home server, then fear not - Dashy can be deployed to pretty much any cloud provider. The above Docker and NPM guides will work exactly the same on a VPS, but I've also setup some 1-Click deploy links for 10+ of the most common cloud providers, to make things easier. Note that if your instance is exposed to the internet, it will be your responsibility to adequately secure it.</p><p>Some hosting providers required a bit of extra configuration, which was why I've made separate branches for deploying to those services (named: <a href="https://github.com/Lissy93/dashy/tree/deploy_cloudflare" target="_blank" rel="noopener noreferrer"><code>deploy_cloudflare</code></a>, <a href="https://github.com/Lissy93/dashy/tree/deploy_digital-ocean" target="_blank" rel="noopener noreferrer"><code>deploy_digital-ocean</code></a>, <a href="https://github.com/Lissy93/dashy/tree/deploy_platform-sh" target="_blank" rel="noopener noreferrer"><code>deploy_platform-sh</code></a> and <a href="https://github.com/Lissy93/dashy/tree/deploy_render" target="_blank" rel="noopener noreferrer"><code>deploy_render</code></a>). If there's another cloud service which you'd like 1-click deployment to be supported for, feel free to raise an issue.</p><p><strong>Note</strong> If you use a static hosting provider, then status checks, writing new config changes to disk from the UI, and triggering a rebuild through the UI will not be availible. This is because these features need endpoints provided by Dashy's local Node server. Everything else should work just the same though.</p><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="netlify"></a>Netlify<a class="hash-link" href="#netlify" title="Direct link to heading">#</a></h4><p><a href="https://app.netlify.com/start/deploy?repository=https://github.com/lissy93/dashy" target="_blank" rel="noopener noreferrer"><img src="https://i.ibb.co/GtKMysT/deploy-netlify-button.png" alt="Deploy to Netlify"></a></p><p><a href="https://www.netlify.com/" target="_blank" rel="noopener noreferrer">Netlify</a> offers Git-based serverless cloud hosting for web applications. Their services are free to use for personal use, and they support deployment from both public and private repos, as well as direct file upload. The free plan also allows you to use your own custom domain or sub-domain, and is easy to setup.</p><p>To deploy Dashy to Netlify, use the following link</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly"><pre tabindex="0" class="prism-code language-undefined codeBlock_23N8 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#393A34"><span class="token plain">https://app.netlify.com/start/deploy?repository=https://github.com/lissy93/dashy</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="heroku"></a>Heroku<a class="hash-link" href="#heroku" title="Direct link to heading">#</a></h4><p><a href="https://heroku.com/deploy?template=https://github.com/Lissy93/dashy" target="_blank" rel="noopener noreferrer"><img src="https://i.ibb.co/GdMFzBP/deploy-heroku-button.png" alt="Deploy to Heroku"></a></p><p><a href="https://www.heroku.com/" target="_blank" rel="noopener noreferrer">Heroku</a> is a fully managed cloud platform as a service. You define app settings in a Procfile and app.json, which specifying how the app should be build and how the server should be started. Heroku is free to use for unlimited, non-commercial, single dyno apps, and supports custom domains. Heroku's single-dyno service is not as quite performant as some other providers, and the app will have a short wake-up time when not visited for a while</p><p>To deploy Dashy to Heroku, use the following link</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly"><pre tabindex="0" class="prism-code language-undefined codeBlock_23N8 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#393A34"><span class="token plain">https://heroku.com/deploy?template=https://github.com/Lissy93/dashy</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="cloudflare-workers"></a>Cloudflare Workers<a class="hash-link" href="#cloudflare-workers" title="Direct link to heading">#</a></h4><p><a href="https://deploy.workers.cloudflare.com/?url=https://github.com/lissy93/dashy/tree/deploy_cloudflare" target="_blank" rel="noopener noreferrer"><img src="https://i.ibb.co/jf9xVdm/deploy-cloudflare-button.png" alt="Deploy to Cloudflare Workers"></a></p><p><a href="https://workers.cloudflare.com/" target="_blank" rel="noopener noreferrer">Cloudflare Workers</a> is a simple yet powerful service for running cloud functions and hosting web content. It requires a Cloudflare account, but is completely free for smaller projects, and very reasonably priced ($0.15/million requests per month) for large applications. You can use your own domain, and applications are protected with Cloudflare's state of the art DDoS protection. For more info, see the docs on <a href="https://developers.cloudflare.com/workers/platform/sites" target="_blank" rel="noopener noreferrer">Worker Sites</a></p><p>To deploy Dashy to Cloudflare, use the following link</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly"><pre tabindex="0" class="prism-code language-undefined codeBlock_23N8 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#393A34"><span class="token plain">https://deploy.workers.cloudflare.com/?url=https://github.com/lissy93/dashy/tree/deploy_cloudflare</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="vercel"></a>Vercel<a class="hash-link" href="#vercel" title="Direct link to heading">#</a></h4><p><a href="https://vercel.com/new/project?template=https://github.com/lissy93/dashy" target="_blank" rel="noopener noreferrer"><img src="https://i.ibb.co/mJF3R7m/deploy-vercel-button.png" alt="Deploy with Vercel"></a></p><p><a href="https://vercel.com/" target="_blank" rel="noopener noreferrer">Vercel</a> is a performance-focused platform for hosting static frontend apps. It comes bundled with some useful tools for monitoring and anaylzing application performance and other metrics. Vercel is free for personal use, allows for custom domains and has very reasonable limits.</p><p>To deploy Dashy to Vercel, use the following link</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly"><pre tabindex="0" class="prism-code language-undefined codeBlock_23N8 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#393A34"><span class="token plain">https://vercel.com/new/project?template=https://github.com/lissy93/dashy</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="digitalocean"></a>DigitalOcean<a class="hash-link" href="#digitalocean" title="Direct link to heading">#</a></h4><p><a href="https://cloud.digitalocean.com/apps/new?repo=https://github.com/lissy93/dashy/tree/deploy_digital-ocean&refcode=3838338e7f79" target="_blank" rel="noopener noreferrer"><img src="https://i.ibb.co/PFt0PkB/deploy-digital-ocean-button.png" alt="Deploy to DO"></a></p><p><a href="https://www.digitalocean.com/" target="_blank" rel="noopener noreferrer">DigitalOcan</a> is a cloud service providing affordable developer-friendly virtual machines from $5/month. But they also have an app platform, where you can run web apps, static sites, APIs and background workers. CDN-backed static sites are free for personal use.</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly"><pre tabindex="0" class="prism-code language-undefined codeBlock_23N8 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#393A34"><span class="token plain">https://cloud.digitalocean.com/apps/new?repo=https://github.com/lissy93/dashy/tree/deploy_digital-ocean</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="google-cloud-platform"></a>Google Cloud Platform<a class="hash-link" href="#google-cloud-platform" title="Direct link to heading">#</a></h4><p><a href="https://deploy.cloud.run/?git_repo=https://github.com/lissy93/dashy.git" target="_blank" rel="noopener noreferrer"><img src="https://i.ibb.co/LkvHttd/deploy-google-cloud-button.png" alt="Run on Google Cloud"></a></p><p><a href="https://cloud.google.com/run/" target="_blank" rel="noopener noreferrer">Cloud Run</a> is a service offered by <a href="https://cloud.google.com/" target="_blank" rel="noopener noreferrer">Google Cloud</a>. It's a fully managed serverless platform, for developing and deploying highly scalable containerized applications. Similar to AWS and Azure, GCP offers a wide range of cloud services, which are billed on a pay‐per‐use basis, but Cloud Run has a <a href="https://cloud.google.com/run/pricing" target="_blank" rel="noopener noreferrer">free tier</a> offering 180,000 vCPU-seconds, 360,000 GiB-seconds, and 2 million requests per month.</p><p>To deploy Dashy to GCP, use the following link</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly"><pre tabindex="0" class="prism-code language-undefined codeBlock_23N8 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#393A34"><span class="token plain">https://deploy.cloud.run/?git_repo=https://github.com/lissy93/dashy.git</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="platformsh"></a>Platform.sh<a class="hash-link" href="#platformsh" title="Direct link to heading">#</a></h4><p><a href="https://console.platform.sh/projects/create-project/?template=https://github.com/lissy93/dashy&utm_campaign=deploy_on_platform?utm_medium=button&utm_source=affiliate_links&utm_content=https://github.com/lissy93/dashy" target="_blank" rel="noopener noreferrer"><img src="https://i.ibb.co/nPnJgJP/deploy-platform-sh-button.png" alt="Deploy to Platform.sh"></a></p><p><a href="https://platform.sh" target="_blank" rel="noopener noreferrer">Platform.sh</a> is an end-to-end solution for developing and deploying applications. It is geared towards enterprise users with large teams, and focuses on allowing applications to scale up and down. Unlike the above providers, Platform.sh is not free, although you can deploy a test app to it without needing a payment method</p><p>To deploy Dashy to Platform.sh, use the following link</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly"><pre tabindex="0" class="prism-code language-undefined codeBlock_23N8 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#393A34"><span class="token plain">https://console.platform.sh/projects/create-project/?template=https://github.com/lissy93/dashy</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="render"></a>Render<a class="hash-link" href="#render" title="Direct link to heading">#</a></h4><p><a href="https://render.com/deploy?repo=https://github.com/lissy93/dashy/tree/deploy_render" target="_blank" rel="noopener noreferrer"><img src="https://i.ibb.co/QXNCbxT/deploy-render-button.png" alt="Deploy to Render"></a></p><p><a href="https://render.com" target="_blank" rel="noopener noreferrer">Render</a> is cloud provider that provides easy deployments for static sites, Docker apps, web services, databases and background workers. Render is great for developing applications, and very easy to use. Static sites are free, and services start at $7/month. Currently there are only 2 server locations - Oregon, USA and Frankfurt, Germany. For more info, see the <a href="https://render.com/docs" target="_blank" rel="noopener noreferrer">Render Docs</a></p><p>To deploy Dashy to Render, use the following link</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly"><pre tabindex="0" class="prism-code language-undefined codeBlock_23N8 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#393A34"><span class="token plain">https://render.com/deploy?repo=https://github.com/lissy93/dashy/tree/deploy_render</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="scalingo"></a>Scalingo<a class="hash-link" href="#scalingo" title="Direct link to heading">#</a></h4><p><a href="https://my.scalingo.com/deploy?source=https://github.com/lissy93/dashy#master" target="_blank" rel="noopener noreferrer"><img src="https://i.ibb.co/nj0KxyH/deploy-scalingo-button.png" alt="Deploy on Scalingo"></a></p><p><a href="https://scalingo.com/" target="_blank" rel="noopener noreferrer">Scalingo</a> is a scalable container-based cloud platform as a service. It's focus is on compliance and uptime, and is geared towards enterprise users. Scalingo is also not free, although they do have a 3-day free trial that does not require a payment method </p><p>To deploy Dashy to Scalingo, use the following link</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly"><pre tabindex="0" class="prism-code language-undefined codeBlock_23N8 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#393A34"><span class="token plain">https://my.scalingo.com/deploy?source=https://github.com/lissy93/dashy#master</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="play-with-docker"></a>Play-with-Docker<a class="hash-link" href="#play-with-docker" title="Direct link to heading">#</a></h4><p><a href="https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml" target="_blank" rel="noopener noreferrer"><img src="https://i.ibb.co/SfbH7Zy/deploy-pwd-button.png" alt="Try in PWD"></a></p><p><a href="https://labs.play-with-docker.com/" target="_blank" rel="noopener noreferrer">Play with Docker</a> is a community project by Marcos Liljedhal and Jonathan Leibiusky and sponsored by Docker, intended to provide a hands-on learning environment. Their labs let you quickly spin up a Docker container or stack, and test out the image in a temporary, sandboxed environment. There's no need to sign up, and it's completely free.</p><p>To run Dashy in PWD, use the following URL:</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly"><pre tabindex="0" class="prism-code language-undefined codeBlock_23N8 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#393A34"><span class="token plain">https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="surgesh"></a>Surge.sh<a class="hash-link" href="#surgesh" title="Direct link to heading">#</a></h4><p><img src="https://i.ibb.co/XkcKzKz/deploy-surge-button.png" alt="Follow instructions below"></p><p><a href="http://surge.sh/" target="_blank" rel="noopener noreferrer">Surge.sh</a> is quick and easy static web publishing platform for frontend-apps.
|
||
Surge supports <a href="https://surge.sh/help/adding-password-protection-to-a-project" target="_blank" rel="noopener noreferrer">password-protected projects</a>. You can also <a href="https://surge.sh/help/adding-a-custom-domain" target="_blank" rel="noopener noreferrer">add a custom domain</a> and then <a href="https://surge.sh/help/using-https-by-default" target="_blank" rel="noopener noreferrer">force HTTPS by default</a> and optionally <a href="https://surge.sh/help/securing-your-custom-domain-with-ssl" target="_blank" rel="noopener noreferrer">set a custom SSL certificate</a></p><p>To deploy Dashy to Surge.sh, first clone and cd into Dashy, install dependencies, and then use the following commands</p><div class="codeBlockContainer_K1bP"><div class="codeBlockContent_hGly"><pre tabindex="0" class="prism-code language-undefined codeBlock_23N8 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_39YC"><span class="token-line" style="color:#393A34"><span class="token plain">yarn add -g surge</span></span><span class="token-line" style="color:#393A34"><span class="token plain">yarn build</span></span><span class="token-line" style="color:#393A34"><span class="token plain">surge ./dist</span></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_Ue-o clean-btn">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2LWZ" id="hosting-with-cdn"></a>Hosting with CDN<a class="hash-link" href="#hosting-with-cdn" title="Direct link to heading">#</a></h3><p>Once Dashy has been built, it is effectivley just a static web app. This means that it can be served up with pretty much any static host, CDN or web server. To host Dashy through a CDN, the steps are very similar to building from source: clone the project, cd into it, install dependencies, write your config file and build the app. Once build is complete you will have a <code>./dist</code> directory within Dashy's root, and this is the build application which is ready to be served up.</p><p>However without Dashy's node server, there are a couple of features that will be unavailible to you, including: Writing config changes to disk through the UI, triggering a rebuild through the UI and application status checks. Everything else will work fine.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><a href="https://github.com/Lissy93/dashy/edit/gh-pages/docs/docs/deployment.md" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_2_ui" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_3DPF"></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><div class="pagination-nav__item"><a class="pagination-nav__link" href="/docs/quick-start"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">« Quick Start</div></a></div><div class="pagination-nav__item pagination-nav__item--next"><a class="pagination-nav__link" href="/docs/configuring"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Configuring »</div></a></div></nav></div></div><div class="col col--3"><div class="tableOfContents_35-E thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#deployment-methods" class="table-of-contents__link">Deployment Methods</a><ul><li><a href="#deploy-with-docker" class="table-of-contents__link">Deploy with Docker</a></li><li><a href="#using-docker-compose" class="table-of-contents__link">Using Docker Compose</a></li><li><a href="#build-from-source" class="table-of-contents__link">Build from Source</a></li><li><a href="#deploy-to-cloud-service" class="table-of-contents__link">Deploy to cloud service</a></li><li><a href="#hosting-with-cdn" class="table-of-contents__link">Hosting with CDN</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Intro</div><ul class="footer__items"><li class="footer__item"><a href="https://github.com/lissy93/dashy" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub</a></li><li class="footer__item"><a href="https://demo.dashy.to" target="_blank" rel="noopener noreferrer" class="footer__link-item">Live Demo</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/quick-start">Quick Start</a></li><li class="footer__item"><a class="footer__link-item" href="/docs">Documentation</a></li></ul></div><div class="col footer__col"><div class="footer__title">Setup Guide</div><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/docs/deployment">Deploying</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/configuring">Configuring</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/management">Management</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/troubleshooting">Troubleshooting</a></li></ul></div><div class="col footer__col"><div class="footer__title">Feature Docs Pt 1</div><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/docs/authentication">Authentication</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/alternate-views">Alternate Views</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/backup-restore">Backup & Restore</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/icons">Icons</a></li></ul></div><div class="col footer__col"><div class="footer__title">Feature Docs Pt 2</div><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/docs/multi-language-support">Language Switching</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/status-indicators">Status Indicators</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/searching">Searching & Shortcuts</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/theming">Theming</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/docs/developing">Developing</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development-guides">Development Guides</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/contributing">Contributing</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/showcase">Showcase</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/credits">Credits</a></li></ul></div><div class="col footer__col"><div class="footer__title">Misc</div><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/docs/privacy">Privacy & Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/license">License</a></li><li class="footer__item"><a href="https://github.com/Lissy93/dashy/blob/master/.github/LEGAL.md" target="_blank" rel="noopener noreferrer" class="footer__link-item">Legal</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/code-of-conduct">Code of Conduct</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/changelog">Changelog</a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><a href="https://dashy.to">Dashy</a> - The Self-Hosted Dashboard for your Homelab<br>License under <a href="https://github.com/Lissy93/dashy/blob/master/LICENSE">MIT</a>. Copyright © 2021 <a href="https://aliciasykes.com">Alicia Sykes</a></div></div></div></footer></div>
|
||
<script src="/assets/js/runtime~main.e7540d76.js"></script>
|
||
<script src="/assets/js/main.e0f631c7.js"></script>
|
||
</body>
|
||
</html> |