services: backend: build: ./server container_name: email-backend restart: unless-stopped ports: - "3000:3000" - "25:25" env_file: - compose.self.env depends_on: redis: condition: service_healthy healthcheck: test: ["CMD", "curl", "-fsS", "http://localhost:3000/health"] interval: 10s timeout: 3s retries: 10 networks: - email-network frontend: build: ./frontend container_name: email-frontend restart: unless-stopped ports: - "8080:80" depends_on: backend: condition: service_healthy networks: - email-network admin: build: ./admin container_name: email-admin restart: unless-stopped ports: - "8081:80" depends_on: backend: condition: service_healthy networks: - email-network redis: image: redis:7.4-alpine container_name: email-redis restart: unless-stopped command: ["redis-server", "--appendonly", "yes"] volumes: - redis-data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 10 networks: - email-network networks: email-network: driver: bridge volumes: redis-data: {}