Files
petwash/DEPLOYMENT_SUMMARY.md
GukSang.Jin 9c66b6cd82
2026-03-03 16:55:02 +08:00

8.3 KiB
Raw Blame History

🚀 PetWash API Docker 部署配置完成总结

已完成的配置

1. 项目配置更新

添加 MySQL 支持

  • 安装 Pomelo.EntityFrameworkCore.MySql 8.0.2
  • 更新 Program.cs 支持数据库提供程序切换
  • 配置 SQLite开发和 MySQL生产双模式

配置文件

  • appsettings.json - 包含 SQLite 和 MySQL 连接字符串
  • appsettings.Production.json - 生产环境配置
  • 数据库提供程序自动切换逻辑

2. Docker 配置

核心文件

  • Dockerfile - 多阶段构建,优化镜像大小
  • docker-compose.yml - 容器编排配置
  • .dockerignore - 排除不必要的文件

特性

  • 使用 .NET 8.0 官方镜像
  • 多阶段构建SDK → Runtime
  • 自动数据库迁移
  • 健康检查配置
  • 网络隔离

3. 数据库配置

初始化脚本

  • init-database.sql - 创建数据库和表结构
  • 包含初始套餐数据
  • 创建必要的索引

连接信息

服务器: 101.132.182.216
端口: 3306
数据库: petwash
用户: root
密码: (空)
字符集: utf8mb4

4. 部署脚本

自动化脚本

  • deploy.ps1 - Windows PowerShell 部署脚本
  • deploy.sh - Linux/macOS Bash 部署脚本
  • verify-config.ps1 - 配置验证脚本
  • check-mysql-connection.sh - MySQL 连接测试

功能

  • 自动停止旧容器
  • 构建新镜像
  • 启动服务
  • 显示状态和日志
  • 错误检查

5. 文档

完整文档

  • DOCKER_DEPLOYMENT.md - 详细部署指南50+ 页)
  • PRE_DEPLOYMENT_CHECKLIST.md - 部署前检查清单
  • DOCKER_QUICK_REFERENCE.md - 快速参考
  • DOCKER_README.md - 快速开始指南
  • DEPLOYMENT_SUMMARY.md - 本文档

配置示例

  • .env.example - 环境变量示例
  • docker-compose.override.yml.example - 覆盖配置示例
  • .gitignore - Git 忽略规则

📋 部署步骤

第一步:验证环境

.\verify-config.ps1

检查项:

  • Docker 和 Docker Compose 安装
  • MySQL 服务器连接
  • 配置文件完整性
  • 项目编译状态

第二步:初始化数据库

mysql -h 101.132.182.216 -P 3306 -u root -p < init-database.sql

这将:

  • 创建 petwash 数据库
  • 创建 PackagesOrders
  • 插入初始套餐数据
  • 创建索引

第三步:部署服务

Windows

.\deploy.ps1

Linux/macOS

chmod +x deploy.sh
./deploy.sh

部署脚本将:

  1. 停止旧容器
  2. 构建 Docker 镜像
  3. 启动新容器
  4. 显示状态和日志

第四步:验证部署

# 测试 API
curl http://localhost:5000/api/packages

# 访问 Swagger
浏览器打开: http://localhost:5000/swagger

🔧 配置说明

数据库提供程序切换

应用会根据 DatabaseProvider 配置自动选择数据库:

开发环境 (appsettings.json):

{
  "DatabaseProvider": "Sqlite",
  "ConnectionStrings": {
    "DefaultConnection": "Data Source=petwash.db"
  }
}

生产环境 (appsettings.Production.json):

{
  "DatabaseProvider": "MySql"
}

Docker 环境变量:

environment:
  - ASPNETCORE_ENVIRONMENT=Production
  - ConnectionStrings__DefaultConnection=Server=101.132.182.216;...

端口配置

修改端口:编辑 docker-compose.yml 中的 ports 配置

环境变量

支持的环境变量:

  • ASPNETCORE_ENVIRONMENT - 运行环境
  • ConnectionStrings__DefaultConnection - 数据库连接
  • Logging__LogLevel__Default - 日志级别
  • ASPNETCORE_URLS - 监听地址

🛠️ 常用运维命令

容器管理

# 启动
docker-compose up -d

# 停止
docker-compose down

# 重启
docker-compose restart

# 查看状态
docker-compose ps

# 查看日志
docker-compose logs -f petwash-api

# 进入容器
docker exec -it petwash-api bash

数据库操作

# 查看数据库信息
docker exec petwash-api dotnet ef dbcontext info

# 查看迁移历史
docker exec petwash-api dotnet ef migrations list

# 手动迁移
docker exec petwash-api dotnet ef database update

镜像管理

# 重新构建(无缓存)
docker-compose build --no-cache

# 查看镜像
docker images | grep petwash

# 清理未使用的镜像
docker image prune -f

📊 系统架构

┌─────────────────┐
│   用户/客户端    │
└────────┬────────┘
         │ HTTP :5000
         ▼
┌─────────────────┐
│  Docker 容器     │
│  petwash-api    │
│  (ASP.NET Core) │
└────────┬────────┘
         │ MySQL :3306
         ▼
┌─────────────────┐
│  MySQL 服务器    │
│ 101.132.182.216 │
│  petwash DB     │
└─────────────────┘

🔐 安全建议

生产环境必做

  1. 设置 MySQL root 密码
  2. 创建专用数据库用户
  3. 配置防火墙规则
  4. 启用 HTTPS
  5. 使用 Docker secrets 管理密码

推荐配置

-- 创建专用用户
CREATE USER 'petwash'@'%' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON petwash.* TO 'petwash'@'%';
FLUSH PRIVILEGES;

更新连接字符串:

Server=101.132.182.216;Database=petwash;User=petwash;Password=strong_password;Port=3306;CharSet=utf8mb4;

常见问题

1. 无法连接 MySQL

症状: 容器启动失败,日志显示数据库连接错误

解决方案:

# 测试网络
docker exec petwash-api ping 101.132.182.216

# 测试端口
docker exec petwash-api nc -zv 101.132.182.216 3306

# 检查防火墙
# 在 MySQL 服务器上开放 3306 端口

2. 数据库表未创建

症状: API 启动但查询失败

解决方案:

# 手动运行迁移
docker exec petwash-api dotnet ef database update

# 或重新初始化
mysql -h 101.132.182.216 -P 3306 -u root -p < init-database.sql

3. 端口冲突

症状: 容器启动失败,提示端口被占用

解决方案: 修改 docker-compose.yml:

ports:
  - "5001:80"  # 改为其他端口

4. 镜像构建失败

症状: docker-compose build 失败

解决方案:

# 清理缓存
docker system prune -a

# 重新构建
docker-compose build --no-cache

📈 性能优化

数据库连接池

appsettings.Production.json 中配置:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=...;Min Pool Size=5;Max Pool Size=100;"
  }
}

容器资源限制

docker-compose.yml 中添加:

services:
  petwash-api:
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 512M
        reservations:
          cpus: '0.5'
          memory: 256M

🔄 更新和回滚

更新部署

# 1. 拉取最新代码
git pull

# 2. 重新部署
.\deploy.ps1

回滚

# 1. 停止当前容器
docker-compose down

# 2. 切换到旧版本
git checkout <previous-commit>

# 3. 重新部署
.\deploy.ps1

📞 技术支持

查看日志

# 实时日志
docker-compose logs -f petwash-api

# 最近 100 行
docker-compose logs --tail=100 petwash-api

# 保存日志到文件
docker-compose logs petwash-api > logs.txt

健康检查

# API 健康
curl http://localhost:5000/api/packages

# 容器状态
docker-compose ps

# 资源使用
docker stats petwash-api

🎯 下一步

部署完成后,你可以:

  1. 配置监控: 添加日志收集和监控系统
  2. 设置备份: 配置数据库自动备份
  3. 启用 HTTPS: 配置 SSL 证书
  4. 负载均衡: 部署多个实例
  5. CI/CD: 集成自动化部署流程

📚 相关文档


总结

你现在拥有:

  • 完整的 Docker 配置
  • 自动化部署脚本
  • MySQL 数据库支持
  • 详细的文档和指南
  • 故障排查方案
  • 安全和性能建议

准备好部署了!运行 .\verify-config.ps1 开始吧! 🚀