# 部署操作手册

> 本文档说明如何将代码推送到测试环境和生产环境。
> 日常开发在 `dev` 分支，生产发布通过合并到 `master` 分支触发。

---

## 环境说明

| 环境 | 触发分支 | 镜像仓库 | K3s 集群 | 域名 |
|------|---------|---------|---------|------|
| 测试（development） | `dev` | `cr.volces.com/zyc/...` | `192.168.0.129:6443` | `airflow-studio.test.airlabs.art` |
| 生产（production） | `master` | `gitea-prod-cn-shanghai.cr.volces.com/prod/...` | `192.168.0.130:6443` | `airflow-studio.airlabs.art` |

---

## 推送到测试环境

只需要把代码推到 `dev` 分支，CI/CD 自动触发。

```bash
# 确认当前在 dev 分支
git checkout dev

# 提交代码
git add .
git commit -m "feat: 你的改动描述"

# 推送触发构建
git push origin dev
```

构建完成后在 Gitea Actions 查看进度：
- Build and Push Backend ✅
- Build and Push Web ✅
- Setup Kubectl ✅
- Deploy to K3s ✅

---

## 推送到生产环境

> ⚠️ **注意**：操作完成后必须切回 `dev` 分支，不要在 `master` 上继续开发。

### 完整流程

```bash
# 1. 确保 dev 分支代码是最新的
git checkout dev
git pull origin dev

# 2. 切换到 master 分支
git checkout master

# 3. 合并 dev 的代码
git merge dev

# 4. 推送到远程，触发生产构建
git push origin master

# 5. ⚠️ 立刻切回 dev，不要停留在 master
git checkout dev
```

### 如果有合并冲突

```bash
# 解决冲突后
git add .
git commit -m "merge: dev into master"
git push origin master
git checkout dev
```

---

## 构建失败排查

### Build and Push 失败（docker pull 超时）
Docker 镜像拉取超时，CI 会自动重试 3 次。如仍失败，检查构建机网络。

### Setup Kubectl 失败（command not found）
kubectl 未安装或下载失败，CI 会自动从 daocloud 镜像安装。

### Deploy to K3s 失败（i/o timeout）
K3s API Server 连接超时，CI 会自动重试 3 次（每次间隔 10 秒）。
- 若持续失败，检查 K3s 节点状态：`kubectl get nodes`
- 确认 kubeconfig secret（`VOLCANO_TEST_KUBE_CONFIG` / `VOLCANO_PROD_KUBE_CONFIG`）有值

---

## 快速检查部署状态

```bash
# 测试环境
ssh root@14.103.63.199
kubectl get pods -n default

# 生产环境
ssh root@118.196.0.100
kubectl get pods -n default
```

---

## Celery Worker 监控

Celery worker 负责轮询火山 API 的视频生成状态。

```bash
# 查看 worker 日志（测试环境）
kubectl logs -f deployment/celery-worker -n default

# 查看队列积压（测试环境 Redis）
redis-cli -h redis-shzlsczo52dft8mia.redis.ivolces.com -p 6379 -a Zyc188208 llen celery
```

`recover_stuck_tasks` 定时任务每 3 分钟自动扫描卡住的任务并重新入队，无需手动干预。
