Skip to main content
A Russelfile.toml describes one service. Russel checks it when it loads, before any build, and rejects unknown fields, so a typo fails loudly. russel init writes a commented one for you.

Full example

[service]

[service.env]

Environment variables for the app, as KEY = "value" pairs.
  • Names start with a letter or _, followed by letters, digits, or _. Up to 64 variables.
  • Values are one line, up to 4096 bytes.
  • PORT, VM_IP, HOST_IP, APP, IFS, PATH, LD_PRELOAD, LD_AUDIT, LD_LIBRARY_PATH, BASH_ENV, ENV, and SHELL are reserved.
  • "secret://NAME" is replaced with the stored secret at deploy time.
See Env and secrets.

[ingress]

How the app is reached from outside. Optional; an empty table is the same as none. Pin port when a script, firewall rule, non-HTTP client, or manually configured reverse proxy needs a fixed port. The pin holds across updates, rollbacks, and restarts. Two versions can’t share it, so updates stop the old version first and have a short gap, as with [[ports]]. Apps reached through Traefik don’t need it. HTTPS is set on the control plane with RUSSEL_TRAEFIK_TLS=1; see Traefik ingress. Omitting [ingress] or host does not disable automatic route-file creation: Russel generates a default Traefik hostname. There is currently no full ingress-off setting. For direct Caddy, Nginx, or manually configured Traefik routing, see Manual routing.

[[volumes]]

Folders that keep data across restarts and updates. Up to 16. They work on both runtimes; on a container the root stays read-only either way.

[[ports]]

Extra host ports, next to the main one. Up to 8. A service with [[ports]] can’t run two versions at once, so updates stop the old version first and have a short gap. Leave it out unless you need it.

Fields that don’t exist

These are rejected when the Russelfile loads:
  • [database]: run Postgres or Redis as their own service with package and a kept volume. See examples/postgres and examples/redis.
  • tls, ssl, domain, tunnel, hosts, or host_port under [ingress]: HTTPS is a control-plane setting, RUSSEL_TRAEFIK_TLS.
  • More than one service per file: use one Russelfile per service, and --config to pick one.

The examples

None of them set [ingress]. More: Examples.