diff --git a/docs/DEPLOYMENT.md b/docs/DEPLOYMENT.md index 6a23fe6..d24c2c5 100644 --- a/docs/DEPLOYMENT.md +++ b/docs/DEPLOYMENT.md @@ -25,38 +25,61 @@ ## 1. 部署流程概述 -部署分为以下步骤: +### 目录结构(扁平化) + +``` +C:\wwwroot\haoliang\ ← IIS 网站根目录 +├── Haoliang.Api.exe # 后端 API 主程序 +├── Haoliang.Api.dll +├── appsettings.json # 开发配置 +├── appsettings.Production.json # 生产配置 ← 需修改 +├── web.config # IIS 配置文件 +├── logs\ # 日志目录 +├── data\ # 数据目录 +├── admin\ # 管理后台 (访问 /admin/*) +│ ├── index.html +│ └── assets\ +└── dashboard\ # BI 大屏 (访问 /dashboard/*) + ├── index.html + └── assets\ +``` + +### 访问地址 + +| 应用 | URL | +|------|-----| +| API | http://localhost:5000/api/v1/* | +| Admin | http://localhost:5000/admin | +| Dashboard | http://localhost:5000/dashboard | +| Swagger | http://localhost:5000/swagger | + +### 部署流程 ``` ┌─────────────────────────────────────────────────────────────┐ │ 1. 运行 deploy.ps1 构建项目 │ -│ └─> 输出目录: publish\wwwroot\ │ -│ ├── api\ (后端 API) │ -│ ├── admin\ (管理后台) │ -│ └── dashboard\ (BI 大屏) │ +│ 输出: publish\wwwroot\ │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 2. 配置数据库 (MariaDB) │ │ ├─ 创建数据库和用户 │ -│ └─ 导入数据库脚本 cnc_business.sql / cnc_log_fixed.sql │ +│ └─ 导入 cnc_business.sql / cnc_log_fixed.sql │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 3. 复制文件到 IIS 目录 │ -│ └─ publish\wwwroot\* → C:\wwwroot\haoliang\ │ +│ └─ publish\wwwroot\* → C:\wwwroot\haoliang\ │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ -│ 4. IIS 配置 │ -│ ├─ 创建应用程序池 HaoliangApi │ -│ ├─ 创建网站 Haoliang (端口 5000) │ -│ └─ 创建子应用 admin / dashboard │ +│ 4. IIS 配置(极简:仅 1 个网站) │ +│ └─ 网站 Haoliang,物理路径 C:\wwwroot\haoliang │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 5. 修改生产配置 │ -│ └─ 修改 appsettings.Production.json 中的数据库连接 │ +│ └─ 修改 appsettings.Production.json 数据库连接 │ └─────────────────────────────────────────────────────────────┘ ``` @@ -66,35 +89,28 @@ ### 2.1 执行构建 -在项目根目录下执行部署脚本: - ```powershell cd D:\git\git\haoliang .\deploy.ps1 ``` -### 2.2 脚本输出 - -构建成功后,输出目录结构如下: +### 2.2 构建输出 ``` D:\git\git\haoliang\publish\wwwroot\ -├── api\ -│ ├── Haoliang.Api.exe # 主程序 -│ ├── Haoliang.Api.dll -│ ├── appsettings.json # 开发配置 -│ ├── appsettings.Production.json # 生产配置 ← 稍后修改 -│ ├── web.config # IIS 配置文件 -│ ├── logs\ # 日志目录 -│ └── data\ # 数据目录 -├── admin\ +├── Haoliang.Api.exe # 后端主程序 +├── Haoliang.Api.dll +├── appsettings.json +├── appsettings.Production.json # ← 稍后修改 +├── web.config +├── logs\ +├── data\ +├── admin\ # /admin 访问 │ ├── index.html -│ ├── assets\ -│ └── ... -└── dashboard\ +│ └── assets\ +└── dashboard\ # /dashboard 访问 ├── index.html - ├── assets\ - └── ... + └── assets\ ``` --- @@ -130,28 +146,19 @@ FLUSH PRIVILEGES; ### 3.3 导入数据库脚本 ```powershell -# 进入项目数据库脚本目录 cd D:\git\git\haoliang\database -# 导入业务库 mysql -u haoliang -p cnc_business < cnc_business.sql - -# 导入日志库(使用修复版本) mysql -u haoliang -p cnc_log < cnc_log_fixed.sql ``` ### 3.4 验证数据库 ```powershell -# 验证表已创建 mysql -u haoliang -p -e "USE cnc_business; SHOW TABLES;" mysql -u haoliang -p -e "USE cnc_log; SHOW TABLES;" ``` -预期输出: -- cnc_business 库包含:Devices, Users, Templates, AlarmRules, ProductionRecords 等表 -- cnc_log 库包含:CollectionLogs, SystemLogs, ExceptionLogs 等表 - --- ## 4. 第三步:复制文件到 IIS 目录 @@ -159,41 +166,27 @@ mysql -u haoliang -p -e "USE cnc_log; SHOW TABLES;" ### 4.1 创建目标目录 ```powershell -# 创建部署根目录 New-Item -ItemType Directory -Path "C:\wwwroot\haoliang" -Force - -# 创建子目录 -New-Item -ItemType Directory -Path "C:\wwwroot\haoliang\api" -Force -New-Item -ItemType Directory -Path "C:\wwwroot\haoliang\api\logs" -Force -New-Item -ItemType Directory -Path "C:\wwwroot\haoliang\api\data" -Force -New-Item -ItemType Directory -Path "C:\wwwroot\haoliang\admin" -Force -New-Item -ItemType Directory -Path "C:\wwwroot\haoliang\dashboard" -Force +New-Item -ItemType Directory -Path "C:\wwwroot\haoliang\logs" -Force +New-Item -ItemType Directory -Path "C:\wwwroot\haoliang\data" -Force ``` ### 4.2 复制文件 ```powershell -# 复制 API 文件 -Copy-Item -Path "D:\git\git\haoliang\publish\wwwroot\api\*" -Destination "C:\wwwroot\haoliang\api\" -Recurse -Force - -# 复制 Admin 文件 -Copy-Item -Path "D:\git\git\haoliang\publish\wwwroot\admin\*" -Destination "C:\wwwroot\haoliang\admin\" -Recurse -Force - -# 复制 Dashboard 文件 -Copy-Item -Path "D:\git\git\haoliang\publish\wwwroot\dashboard\*" -Destination "C:\wwwroot\haoliang\dashboard\" -Recurse -Force +Copy-Item -Path "D:\git\git\haoliang\publish\wwwroot\*" -Destination "C:\wwwroot\haoliang\" -Recurse -Force ``` -### 4.3 验证复制结果 +### 4.3 验证目录结构 ``` C:\wwwroot\haoliang\ -├── api\ -│ ├── Haoliang.Api.exe -│ ├── web.config -│ ├── appsettings.json -│ ├── appsettings.Production.json -│ ├── logs\ -│ └── data\ +├── Haoliang.Api.exe +├── web.config +├── appsettings.json +├── appsettings.Production.json +├── logs\ +├── data\ ├── admin\ │ ├── index.html │ └── assets\ @@ -208,88 +201,38 @@ C:\wwwroot\haoliang\ ### 5.1 创建应用程序池 -**方式一:PowerShell(推荐)** - ```powershell -# 创建应用程序池 New-WebAppPool -Name "HaoliangApi" Set-ItemProperty -Path "IIS:\AppPools\HaoliangApi" -Name "managedRuntimeVersion" -Value "" Set-ItemProperty -Path "IIS:\AppPools\HaoliangApi" -Name "managedPipelineMode" -Value "Integrated" -Set-ItemProperty -Path "IIS:\AppPools\HaoliangApi" -Name "startMode" -Value "OnDemand" Start-WebAppPool -Name "HaoliangApi" ``` -**方式二:IIS 管理器** - -1. 打开 **IIS 管理器** -2. 右键 **应用程序池** → **添加应用程序池** -3. 配置: - -| 配置项 | 值 | -|--------|-----| -| 名称 | `HaoliangApi` | -| .NET CLR 版本 | **无托管代码** | -| 托管管道模式 | **集成** | - -### 5.2 创建网站 - -**方式一:PowerShell(推荐)** +### 5.2 创建网站(重要:直接指向根目录) ```powershell -New-WebSite -Name "Haoliang" -PhysicalPath "C:\wwwroot\haoliang\api" -Port 5000 -ApplicationPool "HaoliangApi" +New-WebSite -Name "Haoliang" -PhysicalPath "C:\wwwroot\haoliang" -Port 5000 -ApplicationPool "HaoliangApi" Start-WebSite -Name "Haoliang" ``` -**方式二:IIS 管理器** - -1. 右键 **网站** → **添加网站** -2. 配置: - -| 配置项 | 值 | -|--------|-----| -| 网站名称 | `Haoliang` | -| 物理路径 | `C:\wwwroot\haoliang\api` | -| 端口 | `5000` | -| 应用程序池 | `HaoliangApi` | +> **注意**:物理路径直接指向 `C:\wwwroot\haoliang`,不是子目录。admin 和 dashboard 是文件目录,不需要创建 IIS 子应用。 -### 5.3 创建子应用程序 - -```powershell -# 创建 Admin 子应用 -New-WebApplication -Name "admin" -Site "Haoliang" -PhysicalPath "C:\wwwroot\haoliang\admin" -ApplicationPool "HaoliangApi" - -# 创建 Dashboard 子应用 -New-WebApplication -Name "dashboard" -Site "Haoliang" -PhysicalPath "C:\wwwroot\haoliang\dashboard" -ApplicationPool "HaoliangApi" - -# 验证配置 -Get-WebApplication -Site "Haoliang" -``` - -预期输出: -``` -Name Path PhysicalPath ----- ---- ------------ -admin /admin C:\wwwroot\haoliang\admin -dashboard /dashboard C:\wwwroot\haoliang\dashboard -``` - -### 5.4 设置目录权限 +### 5.3 设置目录权限 ```powershell # API 目录权限 -icacls "C:\wwwroot\haoliang\api" /grant "IIS AppPool\HaoliangApi:(OI)(CI)M" -icacls "C:\wwwroot\haoliang\api\logs" /grant "IIS AppPool\HaoliangApi:(OI)(CI)M" -icacls "C:\wwwroot\haoliang\api\data" /grant "IIS AppPool\HaoliangApi:(OI)(CI)M" +icacls "C:\wwwroot\haoliang" /grant "IIS AppPool\HaoliangApi:(OI)(CI)M" +icacls "C:\wwwroot\haoliang\logs" /grant "IIS AppPool\HaoliangApi:(OI)(CI)M" +icacls "C:\wwwroot\haoliang\data" /grant "IIS AppPool\HaoliangApi:(OI)(CI)M" # 前端目录权限 icacls "C:\wwwroot\haoliang\admin" /grant "IIS_IUSRS:(OI)(CI)RX" icacls "C:\wwwroot\haoliang\dashboard" /grant "IIS_IUSRS:(OI)(CI)RX" ``` -### 5.5 防火墙配置(如需要) +### 5.4 防火墙配置(如需要) ```powershell -# 开放端口 New-NetFirewallRule -DisplayName "Haoliang API" -Direction Inbound -Protocol TCP -LocalPort 5000 -Action Allow -Profile Any ``` @@ -299,16 +242,10 @@ New-NetFirewallRule -DisplayName "Haoliang API" -Direction Inbound -Protocol TCP ### 6.1 编辑配置文件 -用记事本或其他编辑器打开: - -``` -C:\wwwroot\haoliang\api\appsettings.Production.json -``` +打开 `C:\wwwroot\haoliang\appsettings.Production.json` ### 6.2 修改数据库连接 -将连接字符串中的密码修改为实际密码: - ```json { "ConnectionStrings": { @@ -331,18 +268,15 @@ Restart-WebAppPool -Name "HaoliangApi" ### 7.1 检查服务状态 ```powershell -# 检查网站状态 Get-WebSiteState -Name "Haoliang" - -# 检查应用程序池状态 Get-WebAppPoolState -Name "HaoliangApi" ``` ### 7.2 浏览器访问测试 -| 地址 | 预期结果 | -|------|----------| -| http://localhost:5000/ | API 响应(JSON 或空白页) | +| URL | 预期结果 | +|-----|----------| +| http://localhost:5000/ | API 响应 | | http://localhost:5000/api/v1/health | 健康检查 JSON | | http://localhost:5000/admin | 管理后台登录页 | | http://localhost:5000/dashboard | BI 大屏首页 | @@ -350,11 +284,8 @@ Get-WebAppPoolState -Name "HaoliangApi" ### 7.3 查看日志 ```powershell -# 查看 stdout 日志 -Get-Content "C:\wwwroot\haoliang\api\logs\stdout_*.log" -Tail 20 - -# 查看应用日志 -Get-Content "C:\wwwroot\haoliang\api\logs\app-*.log" -Tail 20 +Get-Content "C:\wwwroot\haoliang\logs\stdout_*.log" -Tail 20 +Get-Content "C:\wwwroot\haoliang\logs\app-*.log" -Tail 20 ``` --- @@ -365,20 +296,19 @@ Get-Content "C:\wwwroot\haoliang\api\logs\app-*.log" -Tail 20 | 错误 | 原因 | 解决方案 | |------|------|----------| -| 500.19 | web.config 语法错误 | 检查 web.config 文件 | -| 500.21 | .NET Core 模块未安装 | 安装 .NET Core Hosting Bundle | -| 502.5 | 应用程序启动失败 | 检查 appsettings.Production.json 数据库连接 | -| 502.3 | 托管模块配置错误 | 检查 web.config 中 AspNetCore 模块 | -| 404.0 | 路径不存在 | 检查物理路径配置 | +| 500.19 | web.config 语法错误 | 检查 web.config | +| 500.21 | .NET Core 模块未安装 | 安装 Hosting Bundle | +| 502.5 | 应用程序启动失败 | 检查数据库连接 | +| 404 | 路径不存在 | 检查物理路径配置 | ### 8.2 排查步骤 ```powershell -# 1. 检查应用程序池是否启动 +# 1. 检查应用程序池状态 Get-WebAppPoolState -Name "HaoliangApi" -# 2. 查看详细错误日志 -Get-Content "C:\wwwroot\haoliang\api\logs\stdout_*.log" | Select-String "Error" +# 2. 查看错误日志 +Get-Content "C:\wwwroot\haoliang\logs\stdout_*.log" | Select-String "Error" # 3. 测试数据库连接 mysql -u haoliang -p -e "USE cnc_business; SELECT 1;" @@ -402,16 +332,14 @@ Start-WebSite -Name "Haoliang" [ ] 1. 运行 deploy.ps1 构建成功 [ ] 2. MariaDB 数据库已创建 [ ] 3. 数据库用户 haoliang 已创建并授权 -[ ] 4. 数据库脚本已导入 (cnc_business.sql, cnc_log_fixed.sql) +[ ] 4. 数据库脚本已导入 [ ] 5. 文件已复制到 C:\wwwroot\haoliang [ ] 6. 应用程序池 HaoliangApi 已创建 -[ ] 7. 网站 Haoliang 已创建 (端口 5000) -[ ] 8. 子应用 admin 已创建 -[ ] 9. 子应用 dashboard 已创建 -[ ] 10. 目录权限已设置 -[ ] 11. appsettings.Production.json 数据库连接已修改 -[ ] 12. 应用程序池已重启 -[ ] 13. 浏览器访问测试通过 +[ ] 7. 网站 Haoliang 已创建 (端口 5000,物理路径指向根目录) +[ ] 8. 目录权限已设置 +[ ] 9. appsettings.Production.json 数据库连接已修改 +[ ] 10. 应用程序池已重启 +[ ] 11. 浏览器访问测试通过 ``` ---