# 快速开始指南

## 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`

祝部署顺利！🚀
