Install HostRails
HostRails is meant to start from a fresh Ubuntu or Debian server where it can own the deployment stack cleanly.
Requirements
- A server you control (a $6 VPS is plenty to start).
- Ubuntu or Debian with root shell access.
- Public ports 80 and 443 available for Caddy, plus the panel port (3000 by default).
- Enough disk for builds, images, database volumes, and local backups.
Run the installer
From an existing panel (recommended): every HostRails panel hosts its own installer, so this works even when the source repository is private. Copy your exact command — key included — from System → Install HostRails on another server:
curl -fsSL https://panel.hostrails.xyz/get.sh | sudo bash -s -- --key <your-key>
First panel, no existing install: either clone a public repository with the one-liner —
curl -fsSL https://raw.githubusercontent.com/Satechmedia/hostrails/master/scripts/install.sh | sudo bash
— or, for a private repository, copy the source from your machine and run the installer in place:
rsync -az --exclude node_modules --exclude .git ./ root@your-server:/opt/hostrails-panel/ ssh root@your-server 'bash /opt/hostrails-panel/scripts/install.sh'
Whichever path you take, the installer:
- installs base packages, Docker, Node.js 22, and Go (for the VPS agent binaries),
- clones HostRails into
/opt/hostrails-paneland builds it, - writes a production
.envwith your auto-detected public IP, - bootstraps the Docker network, BuildKit, and Caddy containers,
- installs and starts the
hostrailssystemd service.
When it finishes, open the printed URL and create your admin account in the browser — the first visit shows a one-time setup screen; there are no default credentials.
Installer options
Set environment variables before bash to override defaults:
curl -fsSL https://panel.hostrails.xyz/get.sh | \ HOSTRAILS_PUBLIC_URL=https://panel.example.com \ HOSTRAILS_PANEL_PORT=3000 \ sudo -E bash -s -- --key <your-key>
| Variable | Meaning | Default |
|---|---|---|
| HOSTRAILS_DIR | Install directory | /opt/hostrails-panel |
| HOSTRAILS_REPO | Repository to clone | Satechmedia/hostrails |
| HOSTRAILS_BRANCH | Branch to install from | master |
| HOSTRAILS_PANEL_PORT | Dashboard/API port | 3000 |
| HOSTRAILS_PUBLIC_URL | Public URL written to the env file | http://<detected-ip>:<port> |
What gets started
hostrails— the systemd service for the control plane.hostrails-buildkit— the BuildKit builder container.hostrails-caddy— the proxy on ports 80 and 443.
Inspect the install
sudo journalctl -u hostrails -f sudo systemctl status hostrails sudo docker ps
If UFW is enabled, allow the public ports:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 3000/tcp
Updating
Re-running the installer is safe and doubles as the updater: it pulls the latest branch, rebuilds, and restarts the service — your data directory, env file, and secrets are preserved. The dashboard's System → Self-update does the same from the UI.
After install
Head to Settings: one click sets a zero-DNS *.sslip.io wildcard domain, another connects GitHub. Then create your first project. See Deployments.