version: '3.8' services: app: image: groovycodexyz/taschengeld:latest ports: - '8071:3000' environment: - DATABASE_URL=postgresql://${DB_USER:-postgres}:${DB_PASSWORD}@db:5432/${DB_DATABASE:-tgeld}?schema=public - DB_USER=${DB_USER:-postgres} - DB_PASSWORD=${DB_PASSWORD} - DB_HOST=db - DB_PORT=5432 - DB_DATABASE=${DB_DATABASE:-tgeld} - NODE_ENV=production - NEXT_TELEMETRY_DISABLED=1 - HOST=0.0.0.0 volumes: - app_uploads:/app/uploads - app_data:/app/data depends_on: db: condition: service_healthy healthcheck: test: ['CMD-SHELL', 'curl -f http://localhost:3000/api/health || exit 1'] interval: 10s timeout: 5s start_period: 30s retries: 3 restart: unless-stopped init: true labels: - 'com.tgeld.service=app' - 'com.tgeld.environment=production' db: image: postgres:16-alpine environment: - POSTGRES_USER=${DB_USER:-postgres} - POSTGRES_PASSWORD=${DB_PASSWORD} - POSTGRES_DB=${DB_DATABASE:-tgeld} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ['CMD-SHELL', 'pg_isready -U ${DB_USER:-postgres} -d ${DB_DATABASE:-tgeld}'] interval: 5s timeout: 5s retries: 5 start_period: 10s restart: unless-stopped init: true labels: - 'com.tgeld.service=database' - 'com.tgeld.environment=production' volumes: postgres_data: driver: local app_uploads: driver: local app_data: driver: local networks: default: driver: bridge driver_opts: com.docker.network.driver.mtu: 1500