# 完整 Docker Compose 部署:MySQL + 后端(内嵌前端 + Nginx 反代可选) # 使用方法:docker compose up -d # 完整部署手册:docs/DEPLOY.md services: mysql: image: mysql:8.0 container_name: myhomepage-mysql restart: always # 开机自启(生产用 always,不用 unless-stopped) environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-rootpw} MYSQL_DATABASE: myhomepage MYSQL_USER: myhomepage MYSQL_PASSWORD: ${MYSQL_PASSWORD:-myhomepagepw} TZ: Asia/Shanghai # 时区 command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time-zone=+08:00 volumes: - mysql-data:/var/lib/mysql # 不暴露 3306 到宿主机(默认安全);如需远程连接改为 "127.0.0.1:3306:3306" healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-u", "myhomepage", "-p${MYSQL_PASSWORD:-myhomepagepw}"] interval: 10s timeout: 5s retries: 10 start_period: 30s # 首次启动给 30s 宽限 logging: # P47:日志轮转(单文件 10M / 保留 3 份) driver: json-file options: max-size: "10m" max-file: "3" backend: build: context: . dockerfile: docker/backend.Dockerfile image: myhomepage-backend:latest # 显式打 tag,方便回滚 container_name: myhomepage-backend restart: always depends_on: mysql: condition: service_healthy environment: # === 数据库 === Database__Provider: MySql Database__ConnectionString: "Server=mysql;Port=3306;Database=myhomepage;Uid=myhomepage;Pwd=${MYSQL_PASSWORD:-myhomepagepw};CharSet=utf8mb4;SslMode=None;AllowPublicKeyRetrieval=true;" # === 上传 === Upload__Path: /app/Uploads Upload__BaseUrl: /uploads Upload__MaxSizeBytes: 10485760 # 10MB # === CORS(生产域名按需加) === Cors__Origins__0: "http://localhost" Cors__Origins__1: "http://localhost:8080" # Cors__Origins__2: "https://yourdomain.com" # ← 改成你的域名 # === 日志级别 === Logging__LogLevel__Default: Information Logging__LogLevel__Microsoft.AspNetCore: Warning Logging__LogLevel__SqlSugar: Information # === 时区 === TZ: Asia/Shanghai volumes: - uploads-data:/app/Uploads # 上传文件持久化 ports: - "8080:8080" # 直连模式(用 Nginx 反代时改 "127.0.0.1:8080:8080") healthcheck: # P47:后端健康检查(K8s / 监控依赖) test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/health"] interval: 30s timeout: 5s retries: 3 start_period: 60s # 首次启动给 60s(编译 + 建表 + 种子) logging: # P47:日志轮转 driver: json-file options: max-size: "10m" max-file: "5" volumes: mysql-data: uploads-data: