services: # 1. 后端服务 (Node.js + Express + SMTP Server) backend: build: ./backend container_name: email-backend restart: always env_file: - compose.full.env networks: - email-network # 不直接暴露端口给外部,由 Nginx 统一代理 # ports: # - "5182:5182" # - "25:25" # 2. 数据库服务 (MySQL) mysql: image: mysql:8.0 container_name: email-mysql restart: always env_file: - compose.full.env volumes: - mysql-data:/var/lib/mysql - ./backend/init.sql:/docker-entrypoint-initdb.d/init.sql:ro networks: - email-network # 3. Nginx 反向代理 nginx: image: nginx:latest container_name: email-nginx restart: always ports: - "80:80" # HTTP - "443:443" # HTTPS (需要SSL证书) - "25:25" # SMTP 端口,转发给后端 volumes: # 挂载前端构建好的静态文件 - ./frontend/dist:/usr/share/nginx/html # 挂载 Nginx 配置文件 - ./nginx.full.conf:/etc/nginx/nginx.conf:ro # 挂载 SSL 证书 - ./certs:/etc/nginx/certs:ro depends_on: - backend - mysql networks: - email-network networks: email-network: driver: bridge volumes: mysql-data: {}