version: '1.0' services: # 前端服务 frontend: build: context: ./frontend dockerfile: Dockerfile ports: - "80:80" depends_on: - backend networks: - mhxy_network restart: unless-stopped environment: - NODE_ENV=production # 后端服务 backend: build: context: ./backend dockerfile: Dockerfile ports: - "3000:3000" depends_on: - database networks: - mhxy_network restart: unless-stopped environment: - NODE_ENV=production - PORT=3000 - HOST=0.0.0.0 - DB_HOST=database - DB_PORT=5432 - DB_NAME=mhxy_web - DB_USER=postgres - DB_PASSWORD=postgres # 以下环境变量需要根据实际情况在.env文件中配置 # - JWT_SECRET=your_jwt_secret_key_here # - JWT_EXPIRES_IN=24h # - GAME_API_URL=http://your_game_server_url/tool/http # - GAME_PSK=THIS_IS_A_32_BYTE_FIXED_PSK!!!!! volumes: # 可选:挂载日志目录(如果需要) # - ./backend/logs:/app/logs # 可选:挂载环境变量文件(如果需要) - ./backend/.env:/app/.env # 数据库服务 database: image: mysql:8.4 ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=${DB_PASSWORD:-password} - MYSQL_DATABASE=${DB_NAME:-mhxy_web} - MYSQL_USER=${DB_USER:-root} - MYSQL_PASSWORD=${DB_PASSWORD:-password} volumes: # 持久化数据库数据 - mysql_data:/var/lib/mysql # 挂载初始化SQL脚本 - ./sql/init_mysql.sql:/docker-entrypoint-initdb.d/init.sql networks: - mhxy_network restart: unless-stopped # 可选:配置健康检查 healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h localhost -u ${DB_USER:-root} -p${DB_PASSWORD:-password}"] interval: 5s timeout: 5s retries: 5 # 网络配置 networks: mhxy_network: driver: bridge name: mhxy_network # 数据卷配置 volumes: mysql_data: driver: local name: mhxy_mysql_data