services: # Rust API + SMTP service backend: build: ./server container_name: email-backend restart: unless-stopped env_file: - compose.env ports: - "3000:3000" - "25:25" depends_on: mysql: condition: service_healthy redis: condition: service_healthy healthcheck: test: ["CMD", "curl", "-fsS", "http://localhost:3000/health"] interval: 10s timeout: 3s retries: 10 networks: - email-network mysql: image: mysql:8.0 container_name: email-mysql restart: unless-stopped env_file: - compose.env environment: TZ: Asia/Shanghai volumes: - mysql-data:/var/lib/mysql healthcheck: test: [ "CMD-SHELL", "mysqladmin ping -h localhost -p$${MYSQL_ROOT_PASSWORD} --silent", ] interval: 10s timeout: 5s retries: 10 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 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 networks: email-network: driver: bridge volumes: mysql-data: {} redis-data: {}