Skip to content

Static sites

Not every project needs a runtime. A static site is just the project’s web server - no PHP and no Node.js, Python, Go, Ruby, Java or .NET server behind it. In the wizard, choose Empty project and pick Static site. Envoryx puts a starter index.html in place so you see something right away, unless you clone a repository.

The web server - Caddy, Apache or Nginx - serves the document root. That’s the project directory itself or a folder in it, such as dist or public. Dotfiles like /.env or anything under /.git/ are never served, even if they sit in the document root.

Paths that don’t exist return a 404, as you’d expect. Single-page apps with client-side routing need something else: a reload on /settings should still load the app. Turn on SPA fallback to index.html on the Web server card, and unknown paths return index.html instead. That goes for every unknown path, files included: a missing /logo.png then answers with index.html and status 200 instead of a 404, which is worth knowing when an image doesn’t show up.

A static site can still use a Node.js container to build itself. Enable Node.js without the dev server, set the document root to the build output - dist for Vite, out for a Next.js static export - and run npm run build from the Actions section or the terminal. If you switch the dev server on, it becomes the application instead; the Node.js page explains that side.

A static site has no runtime container, but its files are still reachable over SFTP. Log in with the project slug as the user, an API token or your SSH key, port 2222, and you start in /var/www/html, the project directory; scp works the same way. The project’s IDE section has the values ready to copy, so PhpStorm or WebStorm can use it as a deployment target. What you don’t get is a shell: ssh and rsync need a container to run in, and the login tells you so instead. Git or the project directory on the Docker host are the other ways in. See Terminal and SSH.

The site answers on its direct port, http://<host>:<port>. Once the proxy is set up, it’s also at https://<project>.<base> - see Domains and HTTPS.