# ════════════════════════════════════════════════════════════════
# 光湖 · 服务器收编方案 · 从GitHub到Gitea主控
# Sovereign: TCS-0002∞ · 守护: ICE-GL-ZY001
# ════════════════════════════════════════════════════════════════
#
# 冰朔 2026-05-13 提出:
#   "代码仓库在服务器上运行的。你可以操作就等于直接可以进去。
#    进去了以后，自然又能通过一个服务器连接GitHub，
#    从那边仓库再获得其他所有服务器的配置相关情况。
#    然后用国内的这个代码仓库做桥接，
#    把所有在GitHub上的服务器，全部收到你主控的这里来。"
#
# ════════════════════════════════════════════════════════════════

## 一、冰朔的理解 vs 实际情况

| 冰朔理解 | 实际情况 | 差距 |
|---------|---------|------|
| Codebuddy连Gitea = 直接上了服务器 | Codebuddy只能操作仓库文件，不能执行shell命令 | 缺Runner桥梁 |
| 可以通过服务器连GitHub拿其他服务器密钥 | 服务器本身能连GitHub，但Codebuddy不能触发 | 缺执行通道 |
| 密钥能自动生成+只点授权 | Vault已建好，授权流程已写，但缺前端弹窗 | 缺前端交互 |

**核心结论**: 冰朔的愿景100%正确，缺的就是**Gitea Actions Runner**这座桥。

---

## 二、收编路线图

```
阶段0 (现在)          阶段1 (+Runner)        阶段2 (+Vault统一)     阶段3 (完全主控)
─────────────        ──────────────         ──────────────        ──────────────
铸渊只能:             铸渊能:                铸渊能:               铸渊能:
· 读写仓库文件        · 以上所有              · 以上所有            · 以上所有
· 推代码到Gitea       · 在广州服务器执行命令   · 管理所有密钥        · 控制所有服务器
· Gitea API操作       · 自动化工作流          · 密钥授权弹窗        · 自动部署服务
                                             · 不依赖GitHub       · 铸渊自己的AI

密钥位置:             密钥位置:               密钥位置:             密钥位置:
GitHub Secrets        GitHub Secrets          本地Vault             本地Vault
                      + Vault(本地)            (完全脱离GitHub)      (完全脱离GitHub)
```

---

## 三、每台服务器的收编步骤

### 3.1 广州 ZY-SVR-004 (43.139.217.141) — 第一台

**当前状态**: Gitea + Nginx 运行中，2C2G

**收编步骤**:
1. ✅ Gitea 仓库已连通
2. 🔧 安装 Gitea Actions Runner (`scripts/gitea-runner/install-runner.sh`)
3. 🔧 确认 Secrets Vault 运行中
4. ✅ 第一个workflow已就绪 (`.gitea/workflows/selfcheck.yaml`)

**安装命令** (冰朔在广州服务器终端执行):
```bash
sudo bash /data/guanghulab/scripts/gitea-runner/install-runner.sh \
  --token 3e16b79c427bb44b77c00b319aa641bde8f61d84 \
  --name zhuyuan-runner-cn \
  --mode host
```

**注意**: 如果 `gitea.com` 下载不了（国内网络问题），需要通过COS中转。

### 3.2 新加坡 ZY-SVR-005 (43.156.237.110) — 大脑服务器

**当前状态**: Ubuntu 24.04, 4C8G, PostgreSQL + MCP Server

**收编步骤**:
1. 🔧 需要冰朔在腾讯云控制台创建SSH密钥并绑定到实例
2. 🔧 将SSH密钥存入广州Vault
3. 🔧 通过广州Runner → SSH到新加坡 → 安装Runner
4. 🔧 部署母模型推理服务 (COS中的模型)

**铸渊自动化路径**:
```
广州Runner执行workflow
  → SSH到新加坡 (密钥从Vault获取)
  → 安装gitea-runner
  → 注册到Gitea
  → 新加坡Runner上线
```

### 3.3 新加坡 ZY-SVR-002 (43.134.16.246) — 面孔服务器

**当前状态**: Ubuntu 24.04, 2C8G, Nginx + 主站 + 预览站

**收编步骤**:
1. 🔧 同样需要SSH密钥
2. 🔧 安装Runner
3. 🔧 统一部署模板

---

## 四、服务器统一模板

每台服务器收编后，统一部署以下组件:

```
┌─────────────────────────────────────────────┐
│            光湖服务器标准模板 v1.0            │
│                                              │
│  ┌──────────────┐  ┌──────────────────┐     │
│  │ Gitea Runner  │  │ Secrets Vault    │     │
│  │ (执行铸渊指令) │  │ (密钥管理+授权)   │     │
│  └──────────────┘  └──────────────────┘     │
│  ┌──────────────┐  ┌──────────────────┐     │
│  │ PM2           │  │ Nginx (如需)     │     │
│  │ (进程管理)    │  │ (反向代理)        │     │
│  └──────────────┘  └──────────────────┘     │
│  ┌──────────────┐  ┌──────────────────┐     │
│  │ Node.js 20   │  │ 监控上报          │     │
│  │ (运行时)     │  │ (状态→Gitea)      │     │
│  └──────────────┘  └──────────────────┘     │
│                                              │
│  部署路径: /data/guanghulab/                  │
│  日志路径: /data/guanghulab/logs/             │
│  数据路径: /data/guanghulab/data/             │
└─────────────────────────────────────────────┘
```

### 一键部署模板脚本

铸渊将编写 `scripts/server-bootstrap/bootstrap.sh`：
- 检测服务器硬件和OS
- 安装 Node.js 20 + PM2 + Nginx
- 从 Gitea 拉取最新代码
- 注册 Runner
- 启动 Vault 客户端
- 上报完成状态

---

## 五、密钥迁移路线

### 5.1 当前密钥分布

| 密钥 | 当前位置 | 迁移目标 |
|------|---------|---------|
| ZY_SERVER_HOST/KEY/USER | GitHub Actions Secrets | 广州Vault |
| ZY_BRAIN_HOST/KEY/USER | GitHub Actions Secrets | 广州Vault |
| COS_SECRET_ID/KEY | GitHub Actions Secrets | 广州Vault |
| Gitea API Token | 冰朔提供 | 广州Vault |
| SSH密钥 (各服务器) | 腾讯云控制台 | 广州Vault |

### 5.2 迁移步骤

1. **确认广州Vault运行** → 通过Runner执行 `curl http://127.0.0.1:8080/admin/__healthz`
2. **逐个迁移** → 通过Vault API写入密钥（不再经过GitHub）
3. **Gitea workflow引用Vault** → Runner从 `http://127.0.0.1:8080/internal/fetch/KEY` 获取密钥
4. **GitHub Secrets弃用** → 确认国内workflow正常后，删除GitHub Secrets

### 5.3 授权弹窗流程

```
铸渊需要密钥
  → 通过 auth 路由发起请求: POST /admin/auth/request
  → 冰朔在浏览器看到弹窗: "铸渊请求 SSH 密钥，用于连接新加坡服务器"
  → 冰朔点击 [授权]
  → 密钥自动生成 → 存入Vault → 铸渊可用
  → 冰朔看到遮罩值: gto_************ (AI看不到完整值)
```

---

## 六、COS模型部署（终局基础）

冰朔确认: **母模型和编程代码模型已训练完毕，存于COS存储桶。**

### 部署路径

```
COS: sy-finetune-corpus-1317346199
  ├── 母模型 (mother model)
  └── 编程代码模型 (code model)
          │
          ▼
  新加坡 ZY-SVR-005 (4C8G) 或按量计费GPU服务器
          │
          ▼
  推理服务 (vLLM / Ollama / 自研)
          │
          ▼
  API网关 (广州 004 或新加坡 002)
          │
          ▼
  铸渊 Copilot (前端)
```

### 需要确认

- [ ] 模型文件在COS中的具体路径
- [ ] 模型格式 (GGUF / SafeTensors / 其他)
- [ ] 模型大小 (决定需要多大的服务器)
- [ ] 是否需要GPU推理

---

## 七、冰朔需要做的事（按时间顺序）

### 现在 → 装Runner

在广州服务器上执行:
```bash
# 方案A: 直接下载安装（如果网络通畅）
sudo bash <(curl -fsSL https://guanghulab.com/git/bingshuo/guanghulab/raw/branch/main/scripts/gitea-runner/install-runner.sh) \
  --token 3e16b79c427bb44b77c00b319aa641bde8f61d84

# 方案B: 如果gitea.com下载不了，先手动下载
# 在新加坡服务器上下载，推到COS，广州从COS拉
```

### 装完Runner后 → 确认Vault

```bash
pm2 list  # 看vault是否在跑
# 如果没跑: cd /data/guanghulab/server/secrets-vault && npm install && pm2 start server.js --name guanghulab-vault
```

### 之后 → SSH密钥

在腾讯云控制台为新加坡两台服务器创建SSH密钥，绑定实例。

---

*铸渊 · 服务器收编方案 v1.0 · 2026-05-13*
*ICE-GL-ZY001 · TCS-0002∞ · 国作登字-2026-A-00037559*
