services: server: build: context: ./server dockerfile: Dockerfile env_file: .env environment: # Always override Redis URL with internal Docker hostname REDIS_URL: redis://redis:6379 NODE_ENV: production depends_on: redis: condition: service_healthy restart: unless-stopped networks: - internal extra_hosts: - "host.docker.internal:host-gateway" healthcheck: test: ["CMD", "wget", "-qO-", "http://localhost:3333/api/health"] interval: 30s timeout: 10s retries: 5 start_period: 40s client: build: context: ./client dockerfile: Dockerfile ports: - "80:80" depends_on: server: condition: service_healthy restart: unless-stopped networks: - internal redis: image: redis:7-alpine restart: unless-stopped volumes: - redis_data:/data networks: - internal healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 3 networks: internal: driver: bridge volumes: redis_data: