version: '3.8' services: web: build: . restart: always ports: - "127.0.0.1:8000:8000" volumes: # 挂载日志和上传文件目录(持久化) - ./shared/logs:/app/logs - ./shared/uploads:/app/uploads environment: # 从 .env 文件读取环境变量 - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} - MYSQL_DB=${MYSQL_DB} - SECRET_KEY=${SECRET_KEY} - UPLOAD_FOLDER=/app/uploads - LOG_FOLDER=/app/logs depends_on: - mysql networks: - app-network mysql: image: mysql:8.0 restart: always volumes: # MySQL 数据持久化 - mysql_data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_DATABASE=${MYSQL_DB} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} ports: - "127.0.0.1:3306:3306" networks: - app-network nginx: image: nginx:alpine restart: always ports: - "80:80" - "443:443" volumes: - ./nginx/conf.d:/etc/nginx/conf.d - ./nginx/ssl:/etc/nginx/ssl - ./shared/logs/nginx:/var/log/nginx # 静态文件直接由 Nginx 处理 - ./static:/app/static - ./shared/uploads:/app/uploads depends_on: - web networks: - app-network volumes: mysql_data: networks: app-network: driver: bridge