# Images are resolved to registry digests before replacement. Never use :main here. services: database: image: postgres:17.6 restart: unless-stopped environment: POSTGRES_DB: agiledancers POSTGRES_USER: agiledancers POSTGRES_PASSWORD: ${DATABASE_PASSWORD:?Required database password} volumes: - database-data:/var/lib/postgresql/data healthcheck: test: ['CMD-SHELL', 'pg_isready -U agiledancers -d agiledancers'] interval: 5s timeout: 3s retries: 12 backend: depends_on: database: condition: service_healthy environment: DATABASE_URL: jdbc:postgresql://database:5432/agiledancers DATABASE_USER: agiledancers DATABASE_PASSWORD: ${DATABASE_PASSWORD:?Required database password} image: ${BACKEND_IMAGE:?Required verified backend digest} platform: linux/amd64 restart: unless-stopped stop_grace_period: 20s labels: nl.agilecc.release: ${RELEASE_VERSION:?Required release version} nl.agilecc.revision: ${RELEASE_SHA:?Required full commit SHA} logging: driver: json-file options: max-size: '10m' max-file: '3' frontend: image: ${FRONTEND_IMAGE:?Required verified frontend digest} platform: linux/amd64 restart: unless-stopped stop_grace_period: 20s depends_on: - backend environment: BACKEND_UPSTREAM: backend:8080 ports: - '${BIND_IP:?Required private NAS IP}:${FRONTEND_PORT:?Required port}:8080' labels: nl.agilecc.release: ${RELEASE_VERSION:?Required release version} nl.agilecc.revision: ${RELEASE_SHA:?Required full commit SHA} logging: driver: json-file options: max-size: '10m' max-file: '3' volumes: database-data: name: agiledancers-production-database