services: postgres: image: docker.io/apache/age:release_PG17_1.6.0 container_name: postgress_01 restart: unless-stopped # Host port matches setup.sh, .env.example, and config defaults (5455 → container 5432). ports: - "5455:5432" # Named volume avoids host uid mismatches (do not combine image postgres user with user: 1000 + ./pgdata). volumes: - pgdata:/var/lib/postgresql/data environment: POSTGRES_DB: ${POSTGRES_DB:-gc_index_relay_dev} POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} command: > postgres deploy: resources: limits: cpus: "1.00" memory: 1G reservations: cpus: "0.50" memory: 512M healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-gc_index_relay_dev}"] interval: 10s timeout: 5s retries: 5 setup: build: context: . dockerfile: ./docker/setup.Dockerfile command: ["/usr/local/bin/usersetup.sh"] restart: no depends_on: postgres: condition: service_healthy environment: # Docker DNS name of this service (not localhost from .env — that is for host-side mix). POSTGRES_HOST: postgres POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} POSTGRES_DB: ${POSTGRES_DB:-gc_index_relay_dev} POSTGRES_RUNTIME_USER: ${POSTGRES_RUNTIME_USER:-gc_index_relay} POSTGRES_RUNTIME_PASSWORD: ${POSTGRES_RUNTIME_PASSWORD:-gc_index_relay_runtime} migrator: build: context: . dockerfile: ./docker/server.Dockerfile command: ["/app/bin/migrate"] restart: no depends_on: postgres: condition: service_healthy setup: condition: service_completed_successfully environment: # Inside the compose network Postgres listens on 5432; 5455 is only the host publish port. DATABASE_URL: "ecto://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${POSTGRES_DB:-gc_index_relay_dev}" SECRET_KEY_BASE: ${SECRET_KEY_BASE:-0000000000000000000000000000000000000000000000000000000000000000} mercury: build: context: . dockerfile: ./docker/server.Dockerfile command: ["/app/bin/server"] restart: unless-stopped depends_on: postgres: condition: service_healthy migrator: condition: service_completed_successfully ports: - "4000:4000" environment: DATABASE_URL: "ecto://${POSTGRES_RUNTIME_USER:-gc_index_relay}:${POSTGRES_RUNTIME_PASSWORD:-gc_index_relay_runtime}@postgres:5432/${POSTGRES_DB:-gc_index_relay_dev}" SECRET_KEY_BASE: ${SECRET_KEY_BASE:-0000000000000000000000000000000000000000000000000000000000000000} volumes: pgdata: