1. The server
- Linux x86_64 with systemd; Debian 12 or Ubuntu 22.04+ is easiest. No KVM needed.
- We suggest 2 GB of RAM and 20 GB of disk or more. Nix builds and the Nix store take most of the disk.
- An ordinary login user with
sudo. The installer adds a separaterusselaccount that runs everything; your user only needssudoto install. - Firewall: allow SSH, plus 80 and 443 if you’ll serve web apps. Never open 7878, the control plane port.
2. Install
-
Follow Installation steps 1 and 2 on the server: Podman, Nix,
install.sh check, thensudo install.sh host. -
Log out and back in, so your user’s new
russelgroup membership applies. -
Check it’s running:
3. Connect from your laptop
-
Install the CLI on the laptop, copy the token, and open the tunnel:
-
Open
http://127.0.0.1:7878/on the laptop for the dashboard, and paste the token into Settings.
4. Deploy from git
A remote control plane can’t see your laptop’s files, so deploy from a git URL. The server clones and builds it:name = "app". For a private repo, use an ssh:// or git@host:path URL, and put a read-only deploy key for it in /var/lib/russel/.ssh/ (owned by russel, mode 0600). That is the home directory of the account that clones.
Leave RUSSEL_ALLOW_LOCAL_PATH_DEPLOY off on a VPS you deploy to remotely.
5. Put apps on the internet
Russel publishes each app on a127.0.0.1 port on the server, so nothing is public until you choose. Pick one:
- Traefik (recommended for web apps). Russel writes a Traefik route for each service, so
app.example.comreaches the right app. Traefik can also get TLS certificates from Let’s Encrypt. See Traefik ingress. - Your own reverse proxy. Pin the port with
[ingress]andport = 8080, and point Caddy or nginx at127.0.0.1:8080. The pin holds across updates, rollbacks, and restarts. An update of a pinned service stops the old version before starting the new one, so there is a short gap.
6. Secrets and data
-
Store secrets on the server, never in the repo:
Then reference them in the Russelfile as
DB_PASSWORD = "secret://DB_PASSWORD"under[service.env]. See Env + secrets. -
Keep app data in
[[volumes]]so it survives redeploys. See the Russelfile reference.
7. Backups and upgrades
- Back up
/etc/russel/env(your token) and/var/lib/russel(secrets, volumes, deployment history). Both needsudoto read. - Upgrade by re-running the installer with a new
RUSSEL_VERSION. See Installation: Upgrade and Upgrades + backups.
Good first apps
Every example exceptmicrovm-http runs as a container on a no-KVM VPS. Deploy one straight from the Russel repo by pointing --config at its Russelfile:
All of them: Examples.
What v0.1 doesn’t do
- Several users or teams on one server
- More than one server
- Managed databases: run Postgres or Redis as ordinary services instead
- TLS in the control plane itself: use SSH or a reverse proxy