Where config lives
config.toml vs environment variables, and the exact resolution order Eddytor uses.
Eddytor reads its settings from two places: config.toml for non-secret
operator settings (public URL, CORS, …) and environment variables for
secrets (database URL, encryption key, SMTP/OAuth credentials). Knowing the
resolution order tells you exactly which value wins.
config.toml vs env
config.toml- non-secret settings. The installer downloads it into your install directory and the compose file mounts it. The shipped file documents every section and field inline.- Environment - secrets and per-deploy overrides. Anything in
config.tomlcan also be set via an env override (see the order below).
Resolution order
Highest priority first - the first place a value is found wins:
EDDYTOR__SECTION__KEYenv override - double-underscore maps to aconfig.tomlpath. e.g.EDDYTOR__SERVER__PUBLIC_URL=https://app.example.comoverrides[server] public_url.$EDDYTOR_CONFIG_FILE- the file at this path, if set../eddytor.toml- in the working directory./etc/eddytor/config.toml.- Built-in defaults.
Good to know
The
EDDYTOR__SECTION__KEY form is how the Helm chart and
compose inject overrides without editing the file. Note the double
underscores between segments.Your own config file with Compose
The compose bind-mount source is overridable, so you don't have to edit the
config.toml the installer wrote. Set EDDYTOR_CONFIG_FILE on the host and
Compose mounts your file instead:
cp config.toml /etc/eddytor/my-config.toml
# edit /etc/eddytor/my-config.toml
EDDYTOR_CONFIG_FILE=/etc/eddytor/my-config.toml docker compose up -dTo persist it, put the variable in the .env next to docker-compose.yml
(Compose auto-loads it):
# .env (gitignored)
EDDYTOR_CONFIG_FILE=/etc/eddytor/my-config.tomlChanges need a restart
Config is read at boot, not hot-reloaded:
docker compose restart # Compose
kubectl -n eddytor rollout restart deploy/eddytor-server # Kubernetes