services: app: build: context: . dockerfile: Dockerfile container_name: ad-management-api restart: unless-stopped ports: - "5000:5000" environment: - NODE_ENV=production - PORT=5000 - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB} - REDIS_URL=redis://redis:6379 - SESSION_SECRET=${SESSION_SECRET} depends_on: - postgres - redis networks: - app-network healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5000/api/health"] interval: 30s timeout: 10s retries: 3 start_period: 30s postgres: image: postgres:15-alpine container_name: ad-management-postgres restart: unless-stopped environment: - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_DB=${POSTGRES_DB} volumes: - postgres-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - app-network healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 10s timeout: 5s retries: 5 start_period: 10s redis: image: redis:7-alpine container_name: ad-management-redis restart: unless-stopped command: redis-server --appendonly yes volumes: - redis-data:/data ports: - "6379:6379" networks: - app-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 networks: app-network: driver: bridge volumes: postgres-data: redis-data: