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

6.8 KiB
Raw Blame History

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. 验证部署

访问以下地址验证服务:

⚙️ 配置说明

环境变量

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"

🔐 安全建议

  1. 修改默认密码: MySQL root 用户应设置强密码
  2. 使用环境变量: 敏感信息通过环境变量或 Docker secrets 管理
  3. 限制网络访问: 配置防火墙规则,仅允许必要的端口
  4. 启用 HTTPS: 生产环境建议配置 SSL 证书
  5. 定期备份: 设置自动备份策略

📞 技术支持

如遇到问题,请检查:

  1. Docker 和 Docker Compose 版本
  2. 网络连接和防火墙配置
  3. MySQL 服务器状态和权限
  4. 容器日志和错误信息

部署完成后API 将在 http://localhost:5000 上运行