version: '3.8' services: # Next.js 应用服务 nextjs-app: image: ${DOCKER_IMAGE:-user/saas-app:latest} container_name: nextjs-saas-app ports: - "3000:3000" environment: - NODE_ENV=production - DB_HOST=${DB_HOST:-mysql} - DB_USER=${DB_USER:-root} - DB_PASSWORD=${DB_PASSWORD:-aiwoQwo520..} - DB_NAME=${DB_NAME:-saas_db} - DB_PORT=${DB_PORT:-3306} depends_on: - mysql restart: unless-stopped volumes: - ./uploads:/app/uploads networks: - saas-network # MySQL 数据库服务 mysql: image: mysql:8.0 container_name: my-mysql restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-aiwoQwo520..} - MYSQL_DATABASE=${MYSQL_DATABASE:-saas_db} - MYSQL_USER=${MYSQL_USER:-saas_user} - MYSQL_PASSWORD=${MYSQL_PASSWORD:-saas_password} ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql - ./scripts:/docker-entrypoint-initdb.d networks: - saas-network # Nginx 反向代理 nginx: image: nginx:alpine container_name: nginx-proxy ports: - "80:80" - "443:443" volumes: - ./nginx/conf.d:/etc/nginx/conf.d - ./nginx/ssl:/etc/nginx/ssl - ./nginx/logs:/var/log/nginx depends_on: - nextjs-app networks: - saas-network restart: unless-stopped # 定义持久化卷 volumes: mysql_data: # 定义网络 networks: saas-network: driver: bridge