Files
LabelChange-server/deployment/QUICK_START.md
2026-06-01 16:30:29 +08:00

239 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 快速开始指南
## 30秒快速了解
你现在有了一个**零停机部署系统**
- 蓝实例运行在 **端口 5000**
- 绿实例运行在 **端口 5001**
- Nginx 总是指向活跃实例
- 部署时自动切换到另一个端口,客户端**无感知**
## 第一步:初始化(只需一次)
### 1. 创建目录
```powershell
mkdir D:\EPproject\LabelReplaceServer\deployment\{blue,green,backups,logs,scripts,config}
```
### 2. 复制配置文件
将这些文件复制到相应位置:
- `deployment-config.json``deployment/config/`
- `build-and-publish.ps1``deployment/scripts/`
- `health-check.ps1``deployment/scripts/`
- `deploy-blue-green.ps1``deployment/scripts/`
- `stop-instance.ps1``deployment/scripts/`
- `rollback.ps1``deployment/scripts/`
### 3. 第一次启动蓝实例
```powershell
# 编译到blue目录
D:\EPproject\LabelReplaceServer\deployment\scripts\build-and-publish.ps1 `
-OutputDirectory "D:\EPproject\LabelReplaceServer\deployment\blue" `
-Version "1.0.0"
# 启动蓝实例在Command Prompt或PowerShell中
cd D:\EPproject\LabelReplaceServer\deployment\blue
set DEPLOYMENT_INSTANCE=blue
set SHUTDOWN_TIMEOUT=30
CONTROLLER.exe
```
### 4. 验证运行
```powershell
# 打开另一个PowerShell
curl http://localhost:5000/api/health
# 应该看到:
# {"status":"healthy","instance":"blue","port":5000,...}
```
### 5. 配置Nginx
编辑你的Nginx配置文件将以下代码写入
```nginx
upstream backend {
server 127.0.0.1:5000 max_fails=2 fail_timeout=10s;
server 127.0.0.1:5001 backup;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
```
然后重启Nginx
```powershell
nginx -s reload
```
### 6. 初始化状态
```powershell
# 创建初始状态文件
$state = @{
activeInstance = "blue"
lastUpdate = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
version = "1.0.0"
} | ConvertTo-Json |
Set-Content -Path "D:\EPproject\LabelReplaceServer\deployment\instance_state.json" -Force
```
**完成!初始化结束。**
---
## 第二步:日常部署(每次更新时)
### 一行命令部署新版本
```powershell
D:\EPproject\LabelReplaceServer\deployment\scripts\deploy-blue-green.ps1 -Version "1.1.0"
```
**部署脚本会自动**
1. ✓ 编译新版本
2. ✓ 部署到非活跃实例
3. ✓ 启动新实例
4. ✓ 验证健康状态
5. ✓ 切换流量
6. ✓ 关闭旧实例
**部署过程中**
- 你的客户端继续可以访问 ✓
- 无需手动停止应用 ✓
- 无需手动启动应用 ✓
---
## 问题排查
### 健康检查失败?
```powershell
# 查看新启动的实例是否在运行
Get-Process CONTROLLER
# 手动测试健康检查
curl http://localhost:5000/api/health
curl http://localhost:5001/api/health
# 查看详细日志
Get-Content "D:\EPproject\LabelReplaceServer\deployment\logs\deployment.log" -Tail 100
```
### 需要回滚?
```powershell
# 一条命令回滚到上一个版本
D:\EPproject\LabelReplaceServer\deployment\scripts\rollback.ps1
```
---
## 关键文件位置
| 文件/目录 | 说明 |
|---------|------|
| `deployment/blue/` | 蓝实例应用端口5000 |
| `deployment/green/` | 绿实例应用端口5001 |
| `deployment/logs/deployment.log` | 部署日志 |
| `deployment/instance_state.json` | 当前活跃实例信息 |
| `deployment/scripts/` | 所有部署脚本 |
---
## 监控命令
```powershell
# 查看当前活跃实例
Get-Content "D:\EPproject\LabelReplaceServer\deployment\instance_state.json" | ConvertFrom-Json
# 查看最近部署日志
Get-Content "D:\EPproject\LabelReplaceServer\deployment\logs\deployment.log" -Tail 50
# 测试两个实例
Write-Host "蓝实例 (5000):" -ForegroundColor Green
curl http://localhost:5000/api/version
Write-Host "绿实例 (5001):" -ForegroundColor Cyan
curl http://localhost:5001/api/version
# 查看进程
Get-Process CONTROLLER
```
---
## 工作流示例
### 场景从版本1.0.0升级到1.1.0
```powershell
# 当前状态:蓝实例(1.0.0) 活跃,绿实例待命
# 1. 执行部署
.\deploy-blue-green.ps1 -Version "1.1.0"
# 脚本自动执行:
# ✓ 编译新版本到绿实例
# ✓ 启动绿实例(1.1.0)
# ✓ 健康检查通过
# ✓ Nginx切换到绿实例
# ✓ 关闭蓝实例(1.0.0)
# 2. 验证部署成功
curl http://localhost:5001/api/version
# 返回version: "1.1.0"
# 3. 客户端自动使用新版本
# 无需任何操作!
```
### 场景:发现问题需要回滚
```powershell
# 当前状态:绿实例(1.1.0) 活跃,蓝实例待命
# 1. 执行回滚
.\rollback.ps1
# 脚本自动执行:
# ✓ 从备份恢复蓝实例(1.0.0)
# ✓ 启动蓝实例
# ✓ 健康检查通过
# ✓ Nginx切换到蓝实例
# ✓ 关闭绿实例(1.1.0)
# 2. 验证回滚成功
curl http://localhost:5000/api/version
# 返回version: "1.0.0"
# 完成!客户端已切换回旧版本
```
---
## 下一步
详细信息请查看:
- **完整指南**`deployment/DEPLOYMENT_GUIDE.md`
- **部署配置**`deployment/config/deployment-config.json`
- **应用配置**`src/CONTROLLER/appsettings.json`
有问题?检查日志文件:`deployment/logs/deployment.log`
祝部署顺利!🚀