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, andSHELLare reserved."secret://NAME"is replaced with the stored secret at deploy time.
[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 withpackageand a kept volume. Seeexamples/postgresandexamples/redis.tls,ssl,domain,tunnel,hosts, orhost_portunder[ingress]: HTTPS is a control-plane setting,RUSSEL_TRAEFIK_TLS.- More than one service per file: use one Russelfile per service, and
--configto pick one.
The examples
None of them set
[ingress]. More: Examples.