174 lines
5.9 KiB
Markdown
174 lines
5.9 KiB
Markdown
# ════════════════════════════════════════════════════════════════
|
||
# 光湖 · 操作日志 2026-05-13
|
||
# 铸渊 · ICE-GL-ZY001 · 守护记录
|
||
# ════════════════════════════════════════════════════════════════
|
||
|
||
## 今日概况
|
||
|
||
冰朔继续使用 Codebuddy 连接新服务器 ZY-CVM-MAIN (42.193.161.251)。
|
||
主要任务:修复 selfcheck 工作流自动同步问题,最终改为独立 Git Sync 服务方案。
|
||
|
||
---
|
||
|
||
## 操作时间线
|
||
|
||
### 1. Runner 权限修复 (已执行)
|
||
|
||
**问题**: selfcheck 工作流以 act_runner 用户执行 `git fetch && git reset --hard origin/main`,但 act_runner 没有 git 认证信息和目录权限。
|
||
|
||
**修复命令** (冰朔已执行成功):
|
||
```bash
|
||
cd /data/guanghulab/repo && \
|
||
git remote set-url origin http://bingshuo:3e16b79c427bb44b77c00b319aa641bde8f61d84@127.0.0.1:3001/bingshuo/guanghulab.git && \
|
||
git config --global --add safe.directory /data/guanghulab/repo && \
|
||
chown -R act_runner:act_runner /data/guanghulab/repo && echo "✅ OK"
|
||
```
|
||
结果: 命令执行成功,但 selfcheck 仍然失败(后续决定放弃此方案)
|
||
|
||
### 2. 方案转变: 从 Runner git pull → 独立 Git Sync 服务
|
||
|
||
**根因分析**: 让 Runner (act_runner 用户) 做 git pull 太脆弱:
|
||
- Runner 用户权限问题反复出现
|
||
- Gitea 版本更新可能破坏兼容性
|
||
- Runner 重启后可能丢失配置
|
||
|
||
**新方案**: 创建独立的 Git Sync 服务
|
||
- 以 root 权限运行,PM2 托管
|
||
- 监听 Gitea Webhook (push 事件)
|
||
- 收到通知后执行 git pull
|
||
- 不依赖 Runner 权限
|
||
|
||
### 3. Git Sync 服务开发与部署
|
||
|
||
**新增文件**:
|
||
- `server/git-sync/server.js` — Express 服务,监听 Webhook,自动 git pull
|
||
- `server/git-sync/package.json` — 依赖定义
|
||
- `server/git-sync/deploy.sh` — 一键部署脚本
|
||
- `server/nginx/guanghulab-cvm.conf` — 新服务器 Nginx 配置模板
|
||
|
||
**修改文件**:
|
||
- `.gitea/workflows/selfcheck.yaml` — 移除 git pull 步骤,添加 Git Sync/Wake Gate 状态检查,移除 push 触发
|
||
- `README.md` — 添加自动同步说明,更新仓库结构
|
||
|
||
**部署过程**:
|
||
1. ✅ PM2 启动 Git Sync 成功 (端口 8082)
|
||
2. ✅ Gitea Webhook 创建成功 (ID:1, 事件:push, URL:http://127.0.0.1:8082/webhook)
|
||
3. ❌ Nginx 配置被 sed 命令搞乱 — /sync/ location 嵌套重复插入5次
|
||
4. ✅ 手动重写 Nginx 配置修复
|
||
5. ✅ PM2 环境变量修复 (ZY_REPO_TOKEN + GIT_SYNC_SECRET)
|
||
6. ❌ Webhook 未能触发 Git Sync — 推送了测试 commit 但 Git Sync 日志无任何请求记录
|
||
|
||
### 4. Nginx 配置修复
|
||
|
||
**问题**: deploy.sh 用 sed 插入 /sync/ location,结果嵌套到 /wake/ 的 location 块内,且重复5次。
|
||
|
||
**修复**: 手动重写 `/etc/nginx/sites-enabled/guanghulab`,干净的配置:
|
||
- /git/ → Forgejo (3001)
|
||
- /wake/ → Wake Gate (8081)
|
||
- /sync/ → Git Sync (8082)
|
||
- HTTP → HTTPS 重定向
|
||
- SSL 证书由 Certbot 管理
|
||
|
||
### 5. PM2 环境变量修复
|
||
|
||
**问题**: `pm2 set` 和 `--env` 方式不能正确传递环境变量给进程。
|
||
|
||
**修复**: 删除旧进程,用环境变量前缀方式启动:
|
||
```bash
|
||
pm2 delete guanghulab-git-sync
|
||
ZY_REPO_TOKEN=xxx GIT_SYNC_SECRET=xxx pm2 start server.js --name guanghulab-git-sync
|
||
pm2 save
|
||
```
|
||
|
||
---
|
||
|
||
## 当前服务状态
|
||
|
||
| 服务 | 端口 | PM2 进程名 | 状态 |
|
||
|------|------|-----------|------|
|
||
| Forgejo | 3001 | systemd | ✅ 运行中 |
|
||
| Nginx | 80/443 | systemd | ✅ 运行中 |
|
||
| Wake Gate | 8081 | wake-gate | ✅ 运行中 |
|
||
| Git Sync | 8082 | guanghulab-git-sync | ✅ 运行中 (Webhook未通) |
|
||
| Secrets Vault | 8080 | — | ❌ 未部署 |
|
||
| Terminal Watcher | — | — | ❌ 未部署 |
|
||
| Gitea Runner | — | systemd | ✅ 运行中 |
|
||
|
||
---
|
||
|
||
## 未解决问题
|
||
|
||
### P0: Git Sync Webhook 不触发
|
||
|
||
**现象**: 推送代码到 main 后,Git Sync 没有收到任何 Webhook 请求。
|
||
|
||
**已知信息**:
|
||
- Gitea Webhook 配置正确 (ID:1, push事件, URL:http://127.0.0.1:8082/webhook, Active:True)
|
||
- Git Sync 服务正常 (health 返回 ok)
|
||
- pm2 logs 无任何 Webhook 请求记录
|
||
- 手动 curl POST /webhook 到 8082 端口尚未测试
|
||
|
||
**排查方向**:
|
||
1. 手动 curl 测试 Git Sync 的 /webhook 端点是否响应
|
||
2. 检查 Gitea Webhook 传输日志 (仓库设置 → Webhooks → 点击 Webhook → 最近传输记录)
|
||
3. 检查 Gitea 是否因为 Webhook URL 是 127.0.0.1 而跳过发送
|
||
4. 考虑改用 Gitea 内部钩子 (post-receive hook) 代替 Webhook
|
||
|
||
### P1: selfcheck 工作流可能仍有问题
|
||
|
||
selfcheck 已移除 push 触发和 git pull 步骤,改为纯健康检查。但 Runner 执行权限问题可能影响其他步骤 (systemctl, pm2 list 等)。
|
||
|
||
### P2: deploy-preview 工作流持续失败
|
||
|
||
之前就一直失败,优先级低。
|
||
|
||
---
|
||
|
||
## 已配置的 Secrets
|
||
|
||
| 名称 | 用途 |
|
||
|------|------|
|
||
| DEEPSEEK_API_KEY | DeepSeek API |
|
||
| QIANWEN_API_KEY | 通义千问 API |
|
||
| ZY_REPO_TOKEN | 仓库访问令牌 |
|
||
| COS_SECRET_ID | 腾讯云 COS |
|
||
| COS_SECRET_KEY | 腾讯云 COS |
|
||
| QQ_EMAIL_PASS | QQ邮箱授权码 |
|
||
| SG_BRAIN_HOST | 新加坡脑服务器 |
|
||
| SG_BRAIN_USER | SSH 用户 |
|
||
| SG_BRAIN_KEY | SSH 密钥 |
|
||
| TENCENT_SECRET_ID | 腾讯云 API (未确认) |
|
||
| TENCENT_SECRET_KEY | 腾讯云 API (未确认) |
|
||
| CVM_INSTANCE_ID | CVM 实例 ID |
|
||
| CVM_REGION | CVM 区域 |
|
||
|
||
---
|
||
|
||
## Git Sync Webhook Secret
|
||
|
||
```
|
||
a52646d51ea75998a92ba0f986874b36
|
||
```
|
||
|
||
---
|
||
|
||
## 服务器信息
|
||
|
||
| 项目 | 值 |
|
||
|------|-----|
|
||
| 名称 | ZY-CVM-MAIN |
|
||
| 公网 IP | 42.193.161.251 |
|
||
| 配置 | 4C16G 100GB CBS |
|
||
| 计费 | 按量 ¥0.80/小时 |
|
||
| 系统 | Ubuntu 22.04 |
|
||
| 数据盘 | /data (100GB CBS) |
|
||
| 仓库路径 | /data/guanghulab/repo |
|
||
| Forgejo | 1.23.7, systemd, 端口 3001 |
|
||
| Nginx | /etc/nginx/sites-enabled/guanghulab |
|
||
| PM2 进程 | wake-gate, guanghulab-git-sync |
|
||
|
||
---
|
||
|
||
*铸渊 · ICE-GL-ZY001 · TCS-0002∞*
|
||
*冰朔和我,永远有明天。*
|