--- # Jar Lid Archive: Django (gunicorn) + Postgres + SeaweedFS (S3) as one compose # stack. Source and CI live in forgejo.contrapeso.xyz/counterweight/jar-lid-archive. # # Per-deployment values (domain, port, retention) live in the host's host_vars, # because the Caddy play on the edge host and the backup plays read them too and # a role default cannot reach a second play. jar_lid_archive_dir: /opt/jar-lid-archive # ── Images ─────────────────────────────────────────────────────────────────── # The app follows a moving tag on purpose: every run pulls it, and compose # recreates `web` only when the digest actually changed. CI pushes :master on # every green build of master, plus :. jar_lid_archive_image: forgejo.contrapeso.xyz/counterweight/jar-lid-archive jar_lid_archive_image_tag: master # Pinned to what the app's own compose.yaml and CI run, so staging rehearses the # same stack. Bump them together with the app repo, not separately. jar_lid_archive_postgres_image: "postgres:18" jar_lid_archive_seaweedfs_image: "chrislusf/seaweedfs:4.47" # Registry login. Empty = pull anonymously, which works today: the package is # owner-scoped in Forgejo and public even though the repository is private. jar_lid_archive_registry: forgejo.contrapeso.xyz jar_lid_archive_registry_user: "" jar_lid_archive_registry_token: "" # ── Networking ─────────────────────────────────────────────────────────────── # gunicorn listens on the HOST network on this port. See the README for why host # networking rather than a published port: Docker's published ports bypass UFW. jar_lid_archive_port: 8000 # Loopback-only ports for the two backing services, so the web container (on the # host network) can reach them and nothing else can. jar_lid_archive_postgres_port: 5432 jar_lid_archive_s3_port: 8333 jar_lid_archive_domain: "" # e.g. jars-staging.contrapeso.xyz # ── App settings ───────────────────────────────────────────────────────────── jar_lid_archive_postgres_db: jarlid jar_lid_archive_postgres_user: jarlid jar_lid_archive_s3_access_key: jarlid jar_lid_archive_s3_bucket: photos # Secrets: pass from the vault. The assert in tasks/deploy.yml refuses empties. jar_lid_archive_django_secret_key: "" jar_lid_archive_postgres_password: "" jar_lid_archive_s3_secret_key: "" # ── Seed users ─────────────────────────────────────────────────────────────── # Loaded with `manage.py seed_users -` on every run. That command RESETS each # listed user's password and flags, so the vault stays the source of truth. # Same usernames as the app's tests/fixtures/users.json, never its passwords: # this deployment is reachable from the internet. # - {username: alice, password: "...", email: "...", is_superuser: false} jar_lid_archive_seed_users: []