services: app: build: context: . dockerfile: Dockerfile target: production container_name: jarls-app ports: - '${PORT:-3000}:3000' environment: NODE_ENV: production PORT: 3000 DATABASE_URL: postgresql://jarls:${POSTGRES_PASSWORD:-jarls}@postgres:5432/jarls REDIS_URL: redis://redis:6379 depends_on: postgres: condition: service_healthy redis: condition: service_healthy restart: unless-stopped healthcheck: test: ['CMD', 'wget', '--no-verbose', '--tries=1', '--spider', 'http://localhost:3000/health'] interval: 30s timeout: 5s start_period: 10s retries: 3 networks: - jarls-network postgres: image: postgres:16-alpine container_name: jarls-prod-postgres environment: POSTGRES_USER: jarls POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-jarls} POSTGRES_DB: jarls volumes: - postgres_prod_data:/var/lib/postgresql/data healthcheck: test: ['CMD-SHELL', 'pg_isready -U jarls'] interval: 10s timeout: 5s retries: 5 restart: unless-stopped networks: - jarls-network redis: image: redis:7-alpine container_name: jarls-prod-redis volumes: - redis_prod_data:/data healthcheck: test: ['CMD', 'redis-cli', 'ping'] interval: 10s timeout: 5s retries: 5 restart: unless-stopped networks: - jarls-network volumes: postgres_prod_data: redis_prod_data: networks: jarls-network: driver: bridge