Files
Christopher Fahlin ea814c5125 build: add release image, compose backing services, and env scaffolding
- Multi-stage Dockerfile (mix release, embedded ERTS, runs as nobody) with
  migrate/server release overlays for an initContainer migration flow
- docker-compose: standalone-friendly upstream images (postgres:17,
  valkey/valkey:8) for the local dev loop. The cluster's operator images
  (cloudnative-pg, hyperspike) don't run standalone — DSN-from-env already
  gives local<->cluster parity, so image identity is local-only
- .env(.local).example templates + .envrc (direnv) loader
- .dockerignore; .gitignore fixups for release artifacts and env files
2026-05-30 19:07:21 -07:00

27 lines
1.0 KiB
Bash

# Production env template — copy to .env (gitignored) and fill from secrets.
#
# DO NOT commit real credentials. In the cluster these values come from
# SOPS-encrypted Secrets (shared-pg-app, shared-cache-auth), not this file.
# This template documents the SHAPE only.
# Required.
SECRET_KEY_BASE= # mix phx.gen.secret
PHX_HOST=bulwark.example.com
PORT=4000
PHX_SERVER=true
# Postgres — cluster primary (-rw always points at the writer).
# Password is URL-safe hex (see the developer guide: avoid / + in DSNs).
DATABASE_URL=postgresql://app:<password>@shared-pg-rw.databases.svc.cluster.local:5432/app
POOL_SIZE=10
# Valkey — credentialed form (cluster requires auth). Optional: omit to run
# the app with the cache disabled (degrades gracefully to Postgres).
VALKEY_URL=redis://:<password>@shared-cache.databases.svc.cluster.local:6379/0
# Set if connecting over IPv6 (e.g. some cluster networking).
# ECTO_IPV6=true
# Optional: libcluster DNS query for multi-node BEAM clustering.
# DNS_CLUSTER_QUERY=bulwark-headless.web.svc.cluster.local