russel init to a running, verified deploy.
What you’ll need
- A working install:
russel psanswers (Installation). - Your app in a git repo the server can clone.
1. Write a Russelfile
init guesses the name from Cargo.toml, go.mod, or the folder name, and writes a Russelfile.toml with every field explained in comments. It won’t overwrite an existing file unless you pass --force. Useful flags:
0.0.0.0 and the port in $PORT. If the repo has no flake.nix, Russel generates one for Rust, Go, and static sites (Builds). Every field is in the Russelfile reference.
Commit the Russelfile and push.
2. Deploy
resolve, build, create, start, ready) and prints the host port when it finishes.
Running
deploy again with the same commit and Russelfile does nothing. After the first deploy, use russel update.
Deploying a folder on the server. REPO can also be a folder path, but the control plane refuses it unless RUSSEL_ALLOW_LOCAL_PATH_DEPLOY=1 is set in /etc/russel/env (then sudo systemctl restart russel-ctrl). The path is read on the server, never on your laptop. Only turn this on for a server you alone use.
3. Env vars and secrets
Plain settings go in[service.env]:
secret://DB_PASSWORD is replaced with the stored value at deploy time. Russel sets PORT itself and rejects a few other names; the full list and limits are in Env and secrets.
After changing env or a secret, redeploy:
4. Program arguments and Podman flags
These are two separate lists:service.argsare passed to your program, after its name:args = ["--dir", "/data"]. Works on both runtimes.service.podman_argsare extra flags forpodman run, one flag or value per entry. Containers only. Your program never sees them.
--privileged or --network=host), and -v may only mount a /nix/store path read-only. For host directories, use [[volumes]].
5. Check it
status and logs take the service name. With only one service deployed you can leave it out.
6. Update
7. Stop or remove
Troubleshooting
More: Troubleshooting.
Next steps
- Dashboard: see the same deploy in the browser.
- Russelfile reference: every field and rule.
- Traefik ingress: give the app a host name.