version: '3.8' services: # MongoDB数据库 mongo: image: mongo:7.0 container_name: chat-mongo restart: unless-stopped environment: MONGO_INITDB_ROOT_USERNAME: admin MONGO_INITDB_ROOT_PASSWORD: password123 MONGO_INITDB_DATABASE: chatapp ports: - "27017:27017" volumes: - mongo_data:/data/db - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro networks: - chat-network healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 30s timeout: 10s retries: 3 start_period: 40s # 后端服务 server: build: context: ./server dockerfile: Dockerfile container_name: chat-server restart: unless-stopped environment: - NODE_ENV=production - MONGODB_URI=mongodb://admin:password123@mongo:27017/chatapp?authSource=admin - JWT_SECRET=your-super-secret-jwt-key-change-this-in-production - PORT=5000 - CLIENT_URL=http://localhost:3000 ports: - "5000:5000" depends_on: mongo: condition: service_healthy networks: - chat-network healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5000/api/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s # 前端服务 client: build: context: ./client dockerfile: Dockerfile container_name: chat-client restart: unless-stopped ports: - "3000:80" depends_on: server: condition: service_healthy networks: - chat-network environment: - VITE_API_URL=http://localhost:5000 healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:80"] interval: 30s timeout: 10s retries: 3 start_period: 40s volumes: mongo_data: networks: chat-network: driver: bridge