Files
petwash/部署配置完成.md
GukSang.Jin 9c66b6cd82
2026-03-03 16:55:02 +08:00

9.2 KiB
Raw Blame History

🎉 PetWash API Docker 部署配置完成

配置完成清单

1. 项目配置

  • 添加 MySQL 支持包 Pomelo.EntityFrameworkCore.MySql 8.0.2
  • 更新 Program.cs 支持 SQLite/MySQL 双模式
  • 配置 appsettings.jsonappsettings.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"  # 改为其他端口

🔐 安全建议

生产环境必做

  1. 设置 MySQL 密码
ALTER USER 'root'@'%' IDENTIFIED BY 'strong_password';
FLUSH PRIVILEGES;
  1. 创建专用数据库用户
CREATE USER 'petwash'@'%' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON petwash.* TO 'petwash'@'%';
FLUSH PRIVILEGES;
  1. 更新连接字符串
Server=101.132.182.216;Database=petwash;User=petwash;Password=strong_password;Port=3306;CharSet=utf8mb4;
  1. 配置防火墙
  • 仅允许必要的 IP 访问 MySQL
  • 限制 API 端口访问
  1. 启用 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 详细部署总结

🎯 下一步

  1. 安装 Docker (如果还没有)

    • Windows: Docker Desktop
    • Linux: curl -fsSL https://get.docker.com | sh
  2. 初始化数据库

    mysql -h 101.132.182.216 -P 3306 -u root -p < init-database.sql
    
  3. 运行部署脚本

    .\deploy.ps1
    
  4. 验证部署

    http://localhost:5000/swagger
    

总结

所有配置已完成!你现在拥有:

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

准备好部署了! 🚀


技术支持:

  • 查看详细日志: docker-compose logs -f petwash-api
  • 检查容器状态: docker-compose ps
  • 测试 API: curl http://localhost:5000/api/packages