6.8 KiB
6.8 KiB
PetWash API Docker 部署指南
📋 目录
🔧 环境要求
必需软件
- Docker 20.10+
- Docker Compose 2.0+
- .NET 8.0 SDK(仅本地开发需要)
服务器要求
- 操作系统: Linux/Windows/macOS
- 内存: 最低 512MB,推荐 1GB+
- 磁盘: 最低 2GB 可用空间
MySQL 数据库
- MySQL 8.0+
- 服务器地址: 101.132.182.216
- 端口: 3306
- 用户: root
- 密码: (空密码)
- 字符集: utf8mb4
📝 部署前配置
1. 数据库准备
在 MySQL 服务器上创建数据库:
-- 连接到 MySQL
mysql -h 101.132.182.216 -P 3306 -u root -p
-- 创建数据库
CREATE DATABASE IF NOT EXISTS petwash
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 验证数据库
SHOW DATABASES LIKE 'petwash';
-- 退出
EXIT;
2. 配置文件检查
确认以下配置文件已正确设置:
appsettings.json
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=petwash.db",
"MySqlConnection": "Server=101.132.182.216;Database=petwash;User=root;Password=;Port=3306;CharSet=utf8mb4;"
},
"DatabaseProvider": "Sqlite"
}
appsettings.Production.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"DatabaseProvider": "MySql"
}
docker-compose.yml
environment:
- ASPNETCORE_ENVIRONMENT=Production
- ConnectionStrings__DefaultConnection=Server=101.132.182.216;Database=petwash;User=root;Password=;Port=3306;CharSet=utf8mb4;
3. 网络配置
确保 Docker 主机可以访问 MySQL 服务器:
# 测试连接
telnet 101.132.182.216 3306
# 或使用 nc
nc -zv 101.132.182.216 3306
4. 防火墙配置
如果 MySQL 服务器有防火墙,需要开放 3306 端口:
# CentOS/RHEL
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# Ubuntu/Debian
ufw allow 3306/tcp
🚀 快速部署
Windows 系统
# 运行部署脚本
.\deploy.ps1
Linux/macOS 系统
# 添加执行权限
chmod +x deploy.sh
# 运行部署脚本
./deploy.sh
📖 手动部署步骤
1. 安装依赖包
cd PetWash.Api
dotnet restore
2. 构建 Docker 镜像
# 在项目根目录执行
docker-compose build
3. 启动容器
docker-compose up -d
4. 查看日志
docker-compose logs -f petwash-api
5. 验证部署
访问以下地址验证服务:
- API 健康检查: http://localhost:5000/api/packages
- Swagger 文档: http://localhost:5000/swagger
⚙️ 配置说明
环境变量
在 docker-compose.yml 中可配置的环境变量:
| 变量名 | 说明 | 默认值 |
|---|---|---|
| ASPNETCORE_ENVIRONMENT | 运行环境 | Production |
| ConnectionStrings__DefaultConnection | 数据库连接字符串 | MySQL 连接 |
| ASPNETCORE_URLS | 监听地址 | http://+:80 |
端口映射
- 容器端口: 80
- 主机端口: 5000
- 可在
docker-compose.yml中修改ports配置
数据库提供程序切换
通过 DatabaseProvider 配置切换数据库:
Sqlite: 使用本地 SQLite 数据库(开发环境)MySql: 使用远程 MySQL 数据库(生产环境)
❓ 常见问题
1. 无法连接到 MySQL
问题: 容器启动后无法连接到 MySQL 数据库
解决方案:
# 检查网络连通性
docker exec petwash-api ping 101.132.182.216
# 检查 MySQL 端口
docker exec petwash-api nc -zv 101.132.182.216 3306
# 查看详细日志
docker-compose logs petwash-api
2. 数据库迁移失败
问题: 启动时数据库表未创建
解决方案:
# 进入容器
docker exec -it petwash-api bash
# 手动运行迁移
dotnet ef database update
# 或重新创建数据库
dotnet ef database drop --force
dotnet ef database update
3. 端口冲突
问题: 5000 端口已被占用
解决方案:
修改 docker-compose.yml 中的端口映射:
ports:
- "5001:80" # 改为其他端口
4. 容器启动失败
问题: 容器无法启动或立即退出
解决方案:
# 查看容器状态
docker-compose ps
# 查看详细日志
docker-compose logs --tail=100 petwash-api
# 检查配置文件
docker-compose config
🛠️ 运维命令
容器管理
# 启动服务
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-compose build --no-cache
# 查看镜像
docker images | grep petwash
# 删除旧镜像
docker image prune -f
数据库操作
# 备份数据库
docker exec petwash-api dotnet ef migrations script > backup.sql
# 查看数据库连接
docker exec petwash-api dotnet ef dbcontext info
# 查看迁移历史
docker exec petwash-api dotnet ef migrations list
性能监控
# 查看资源使用
docker stats petwash-api
# 查看容器详情
docker inspect petwash-api
# 查看网络
docker network inspect petwash-network
🔄 更新部署
更新代码后重新部署
# 1. 拉取最新代码
git pull
# 2. 停止服务
docker-compose down
# 3. 重新构建
docker-compose build
# 4. 启动服务
docker-compose up -d
# 5. 查看日志
docker-compose logs -f petwash-api
零停机更新
# 1. 构建新镜像
docker-compose build
# 2. 滚动更新
docker-compose up -d --no-deps --build petwash-api
📊 健康检查
API 端点测试
# 测试套餐接口
curl http://localhost:5000/api/packages
# 测试订单接口
curl http://localhost:5000/api/orders
# 查看 Swagger 文档
curl http://localhost:5000/swagger/index.html
数据库连接测试
# 从容器内测试
docker exec petwash-api mysql -h 101.132.182.216 -P 3306 -u root -p -e "SELECT 1"
🔐 安全建议
- 修改默认密码: MySQL root 用户应设置强密码
- 使用环境变量: 敏感信息通过环境变量或 Docker secrets 管理
- 限制网络访问: 配置防火墙规则,仅允许必要的端口
- 启用 HTTPS: 生产环境建议配置 SSL 证书
- 定期备份: 设置自动备份策略
📞 技术支持
如遇到问题,请检查:
- Docker 和 Docker Compose 版本
- 网络连接和防火墙配置
- MySQL 服务器状态和权限
- 容器日志和错误信息
部署完成后,API 将在 http://localhost:5000 上运行