# Copy to .env and fill in. docker compose picks .env up automatically. # deploy.sh seeds this file on first run and never rewrites it afterwards. # # NOTE: values are NOT quoted and must not contain a dollar sign (Compose # interpolates .env). Secrets never live here: the admin oper password is in # secrets/admin.pass (0600) and only its bcrypt hash is in ircd/ircd.yaml. # --- Identity ----------------------------------------------------------------- # Public hostname (lower-case). Becomes Ergo's server.name, the Let's Encrypt # cert subject, the Caddy site and the allowed websocket origin. Immutable after # the first deploy (Ergo refuses to rehash a changed server name). ERGO_DOMAIN=irc.example.com # Email for Let's Encrypt registration / expiry notices. ACME_EMAIL=admin@example.com # IRC network name (ISUPPORT NETWORK=, welcome line). Letters, digits, . _ - # only -- no spaces. deploy.sh defaults it to ERGO_DOMAIN. NETWORK_NAME=irc.example.com # --- Image -------------------------------------------------------------------- # ghcr.io tags carry the leading 'v' (v2.19.1). deploy.sh pins the newest # release on first deploy; update.sh bumps this when it updates. Never pin # 'stable'/'latest' here -- those are separate builds and defeat rollback. ERGO_IMAGE=ghcr.io/ergochat/ergo ERGO_TAG=v2.19.1 # uid:gid Ergo runs as inside the container = the host's `ergo` system user # (created by deploy.sh; owns ./ircd). Filled in by deploy.sh. ERGO_UID= ERGO_GID= # --- Listeners ---------------------------------------------------------------- # 0 (default): plaintext 6667 on 127.0.0.1 only (healthcheck + ergoctl). # 1: ALSO serve plaintext IRC on :6667 publicly, with STS advertised so capable # clients pin TLS. Credentials sent over 6667 cross the internet in clear. # Chosen at the FIRST deploy: it selects a listener in ircd/ircd.yaml, which # deploy.sh never rewrites. To change it later, edit that listener with # 'ergoctl edit', set the value here, 'ergoctl restart', then re-run deploy.sh # so the host firewall matches. PLAINTEXT=0 # --- Message history ---------------------------------------------------------- # Ergo keeps history in RAM by default, so it is lost on every restart -- # including the ones the updater performs. Persist it with: # sqlite (default) a file beside ircd.db; no extra container # postgres a pinned PostgreSQL container (docker-compose.postgres.yml) # off RAM only, upstream behaviour # Needs Ergo >= 2.18.0. How long messages are kept is governed by # history.restrictions.expire-time in ircd.yaml (1 week by default), NOT here. # Chosen at the first deploy; switch later with 'ergoctl history ' # (which does not migrate existing messages). HISTORY=sqlite # Set by deploy.sh so every `docker compose` command in this stack sees the same # services. It gains ':docker-compose.postgres.yml' when HISTORY=postgres. COMPOSE_FILE=docker-compose.yml # --- PostgreSQL (only when HISTORY=postgres) ---------------------------------- # The MAJOR version is pinned on purpose: PostgreSQL refuses to start on a data # directory written by a different major, so update.sh never touches this image. # Changing it is a deliberate dump-and-restore -- see the README. POSTGRES_TAG=17-alpine POSTGRES_USER=ergo POSTGRES_DB=ergo_history # Published on 127.0.0.1 only. The password lives in secrets/postgres.pass # (0600), never here -- compose interpolates .env and a dollar sign would break it. POSTGRES_PORT=5432 # --- Updates (update.sh) ------------------------------------------------------ # This file is where the scheduled jobs read these four knobs from; edit them # here. (An explicit environment variable, or a value pinned in # /etc/ergo-update.conf, overrides what is set here for that run.) # latest - update to the newest release whenever one exists (default) # security - update ONLY when a published GitHub security advisory covers the # running version, or a release in range has a "### Security" # section in its notes # off - never change the running version (check/notify only) UPDATE_POLICY=latest # Releases whose notes announce "Compatibility breaks" are held for review and # only notified, unless FORCE_UPDATE=1. FORCE_UPDATE=0 # Seconds of warning (NOTICE to all users) before an update restarts Ergo. UPDATE_GRACE=60 # 1 = the daily run also pulls a newer Caddy image and recreates it (drops every # web-client websocket at that moment). 0 = Caddy updates via `ergoctl update caddy`. CADDY_AUTOUPDATE=0 # --- Image tags --------------------------------------------------------------- CADDY_TAG=2-alpine