9.2 KiB
9.2 KiB
🎉 PetWash API Docker 部署配置完成
✅ 配置完成清单
1. 项目配置
- ✅ 添加 MySQL 支持包
Pomelo.EntityFrameworkCore.MySql8.0.2 - ✅ 更新
Program.cs支持 SQLite/MySQL 双模式 - ✅ 配置
appsettings.json和appsettings.Production.json - ✅ 项目编译成功
2. Docker 配置
- ✅ 创建
Dockerfile(多阶段构建) - ✅ 创建
docker-compose.yml(容器编排) - ✅ 创建
.dockerignore(优化构建) - ✅ 创建
.gitignore(版本控制)
3. 数据库配置
- ✅ 创建
init-database.sql(数据库初始化脚本) - ✅ MySQL 服务器连接测试通过 (101.132.182.216:3306)
- ✅ 配置连接字符串
4. 部署脚本
- ✅
deploy.ps1- Windows 自动部署脚本 - ✅
deploy.sh- Linux/macOS 自动部署脚本 - ✅
check-deployment.ps1- 配置验证脚本 - ✅
check-mysql-connection.sh- MySQL 连接测试
5. 文档
- ✅
DOCKER_DEPLOYMENT.md- 完整部署指南 - ✅
PRE_DEPLOYMENT_CHECKLIST.md- 部署前检查清单 - ✅
DOCKER_QUICK_REFERENCE.md- 快速参考 - ✅
DOCKER_README.md- 快速开始 - ✅
DEPLOYMENT_SUMMARY.md- 部署总结 - ✅
.env.example- 环境变量示例
📊 配置信息
MySQL 数据库
服务器: 101.132.182.216
端口: 3306
数据库: petwash
用户: root
密码: (空)
字符集: utf8mb4
状态: ✅ 连接测试通过
Docker 容器
容器名: petwash-api
镜像: petwash-api:latest
端口映射: 5000:80
环境: Production
网络: petwash-network
API 配置
框架: ASP.NET Core 8.0
数据库: MySQL (生产) / SQLite (开发)
端口: 5000
Swagger: http://localhost:5000/swagger
🚀 部署步骤
步骤 1: 验证配置
.\check-deployment.ps1
检查结果:
- ✅ 配置文件完整
- ✅ MySQL 包已添加
- ✅ MySQL 服务器可访问
- ✅ 项目编译成功
步骤 2: 初始化数据库
方法 1: 使用 MySQL 命令行
mysql -h 101.132.182.216 -P 3306 -u root -p
# 输入密码后
SOURCE init-database.sql;
方法 2: 直接导入
mysql -h 101.132.182.216 -P 3306 -u root -p < init-database.sql
验证数据库:
USE petwash;
SHOW TABLES;
SELECT * FROM Packages;
步骤 3: 部署服务
Windows:
.\deploy.ps1
Linux/macOS:
chmod +x deploy.sh
./deploy.sh
步骤 4: 验证部署
测试 API:
# 测试套餐接口
curl http://localhost:5000/api/packages
# 测试订单接口
curl http://localhost:5000/api/orders
访问 Swagger:
http://localhost:5000/swagger
📁 项目结构
无人自动洗宠机/
├── PetWash.Api/
│ ├── Dockerfile # Docker 镜像配置
│ ├── .dockerignore # Docker 忽略文件
│ ├── Program.cs # 应用入口(已更新)
│ ├── appsettings.json # 开发环境配置
│ ├── appsettings.Production.json # 生产环境配置
│ ├── PetWash.Api.csproj # 项目文件(已添加 MySQL 包)
│ ├── Controllers/ # API 控制器
│ ├── Data/ # 数据库上下文
│ ├── Models/ # 数据模型
│ └── Services/ # 业务服务
├── docker-compose.yml # 容器编排配置
├── init-database.sql # 数据库初始化脚本
├── deploy.ps1 # Windows 部署脚本
├── deploy.sh # Linux/macOS 部署脚本
├── check-deployment.ps1 # 配置验证脚本
├── check-mysql-connection.sh # MySQL 连接测试
├── .env.example # 环境变量示例
├── .gitignore # Git 忽略规则
├── DOCKER_DEPLOYMENT.md # 完整部署指南
├── PRE_DEPLOYMENT_CHECKLIST.md # 部署前检查清单
├── DOCKER_QUICK_REFERENCE.md # 快速参考
├── DOCKER_README.md # 快速开始
└── DEPLOYMENT_SUMMARY.md # 部署总结
🔧 配置说明
数据库提供程序切换
应用会根据环境自动选择数据库:
开发环境 (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;Database=petwash;User=root;Password=;Port=3306;CharSet=utf8mb4;
Program.cs 关键代码
var dbProvider = builder.Configuration.GetValue<string>("DatabaseProvider") ?? "Sqlite";
var connectionString = dbProvider == "MySql"
? builder.Configuration.GetConnectionString("MySqlConnection")
: builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<PetWashDbContext>(options =>
{
if (dbProvider == "MySql")
{
var serverVersion = new MySqlServerVersion(new Version(8, 0, 21));
options.UseMySql(connectionString, serverVersion);
}
else
{
options.UseSqlite(connectionString ?? "Data Source=petwash.db");
}
});
🛠️ 常用命令
容器管理
# 启动服务
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
❓ 常见问题
1. Docker 未安装
问题: 运行 docker 命令提示未找到
解决方案:
- Windows: 安装 Docker Desktop
- Linux:
curl -fsSL https://get.docker.com | sh - macOS: 安装 Docker Desktop
2. 无法连接 MySQL
问题: 容器启动失败,提示数据库连接错误
解决方案:
# 测试网络
ping 101.132.182.216
# 测试端口
telnet 101.132.182.216 3306
# 检查防火墙
# 确保 MySQL 服务器开放 3306 端口
3. 数据库未初始化
问题: API 启动但查询失败
解决方案:
# 运行初始化脚本
mysql -h 101.132.182.216 -P 3306 -u root -p < init-database.sql
# 或手动迁移
docker exec petwash-api dotnet ef database update
4. 端口冲突
问题: 5000 端口已被占用
解决方案:
修改 docker-compose.yml:
ports:
- "5001:80" # 改为其他端口
🔐 安全建议
生产环境必做
- 设置 MySQL 密码
ALTER USER 'root'@'%' IDENTIFIED BY 'strong_password';
FLUSH PRIVILEGES;
- 创建专用数据库用户
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;
- 配置防火墙
- 仅允许必要的 IP 访问 MySQL
- 限制 API 端口访问
- 启用 HTTPS
- 配置 SSL 证书
- 强制 HTTPS 重定向
📈 性能优化
数据库连接池
{
"ConnectionStrings": {
"DefaultConnection": "Server=...;Min Pool Size=5;Max Pool Size=100;"
}
}
容器资源限制
services:
petwash-api:
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
📚 相关文档
| 文档 | 说明 |
|---|---|
| DOCKER_DEPLOYMENT.md | 完整部署指南(50+ 页) |
| PRE_DEPLOYMENT_CHECKLIST.md | 部署前检查清单 |
| DOCKER_QUICK_REFERENCE.md | 快速命令参考 |
| DOCKER_README.md | 5 分钟快速开始 |
| DEPLOYMENT_SUMMARY.md | 详细部署总结 |
🎯 下一步
-
安装 Docker (如果还没有)
- Windows: Docker Desktop
- Linux:
curl -fsSL https://get.docker.com | sh
-
初始化数据库
mysql -h 101.132.182.216 -P 3306 -u root -p < init-database.sql -
运行部署脚本
.\deploy.ps1 -
验证部署
http://localhost:5000/swagger
✨ 总结
所有配置已完成!你现在拥有:
- ✅ 完整的 Docker 配置
- ✅ MySQL 数据库支持
- ✅ 自动化部署脚本
- ✅ 详细的文档和指南
- ✅ 故障排查方案
- ✅ 安全和性能建议
准备好部署了! 🚀
技术支持:
- 查看详细日志:
docker-compose logs -f petwash-api - 检查容器状态:
docker-compose ps - 测试 API:
curl http://localhost:5000/api/packages