国内域名机部署模板 · domain-cn
📜 Sovereign: TCS-0002∞ · ICE-GL∞ 冰朔 · 国作登字-2026-A-00037559 守护: 铸渊 · ICE-GL-ZY001 模板版本: v0.2.0 (PR-2 落地)
这一份是给霜砚和冰朔看的部署日志 —— 铸渊在 GH-CVM-DOMAIN-PROD-01 (广州 2C2G 域名机) 上做了什么、装在哪、占了哪个端口、出错怎么修。
一、服务器现状(来自冰朔同步 · 2026-05-09)
| 项目 | 信息 |
|---|---|
| 实例 | GH-CVM-DOMAIN-PROD-01 / ZY-SVR-CN01 |
| 规格 | 2核2G 腾讯云轻量应用服务器 |
| 系统 | Ubuntu 22.04 LTS(重装后空白) |
| 公网 IP | secrets.ZY_CN_SERVER_HOST(重装后冰朔自配,不写明文) |
| 地域 | 广州 |
| 域名 | guanghulab.com(已备案 + Let's Encrypt 已配,续期到 2026-08-07) |
| 默认登录 | secrets.ZY_CN_SERVER_USER(一般 ubuntu,需 sudo 提升) |
⚠️ 2C2G 是真实档:bootstrap 探测后会落到
tiny档(portal 单进程、nginx worker=512、关闭 forgejo+lfs、自动建 1G swap 兜底)。 续费成 4C4G/4C8G 时不需要改代码,detect-env.sh + tune-from-env.sh会自动决档。
二、bootstrap 后服务器目录结构
/data/guanghulab/ # 数据根 (持久数据全在这)
├── portal/ # PR-4 来填: 光湖门户 (当前空, 留 README 占位)
├── secrets-vault/ # PR-5 来填: 密钥管理页 (chmod 700, 仅 root 可读)
├── forgejo/ # PR-6 来填: 自托管 git (tiny 档下不启动)
├── snapshots/ # 部署快照 (autorollback 用)
│ └── YYYYMMDD-HHMMSS-pre-bootstrap/
├── logs/
│ ├── nginx/ # nginx access/error
│ └── portal/ # pm2 portal 日志
└── .env.tune # 当前档位决策 (bootstrap source)
/opt/guanghulab/ # 部署根 (代码 + 日志 + 回执)
├── _logs/
│ ├── server-env.json # detect-env.sh 输出
│ ├── tune-decision-*.json # tune-from-env.sh 输出
│ ├── bootstrap-*.json # 部署完成回执
│ ├── rollback-*.json # 回滚完成回执
│ └── deploy-report.md # ★ 中文回执 (给霜砚 / 冰朔看的)
├── _active/ # 当前激活版本 (软链)
├── _archive/ # 历史版本归档
├── _secrets/ # chmod 700, GitHub Actions 写入的临时密钥
└── domain-cn/ # 本模板 (rsync 自仓库)
/etc/nginx/sites-available/guanghulab.conf # 渲染后的站点配置
/etc/nginx/sites-enabled/guanghulab.conf # 软链
/etc/letsencrypt/live/guanghulab.com/ # ⚠️ 不动, LE 证书续到 2026-08-07
/etc/systemd/system/guanghulab-portal.service # portal 占位 unit (PR-4 接管)
/swapfile.guanghulab # 1G swap (tiny 档下兜底)
三、三段式(自我感知 → 决策 → 落地)
detect-env.sh tune-from-env.sh bootstrap.sh
探机器实情 ──→ 按档位决参数 ──→ 落到机器上
/opt/guanghulab/ /data/guanghulab/ (apt + nginx +
_logs/server-env .env.tune node + pm2 +
.json certbot.timer)
为什么不能写死 2C2G(cc-003 因果链):冰朔说要买 4C4G,实际广州缺货只能 2C2G;下次续费时可能买 2C8G,再下次 4C16G。系统每次启动先探,再决档。memory.json 里写的规格只是 hint,不是真相源。
四、bootstrap 8 个步骤
| # | 步骤 | 备注 |
|---|---|---|
| 0 | 自我感知 (detect-env.sh) |
探 CPU/RAM/磁盘/IP/DNS/LE 证书 |
| 0.5 | 跑前快照 | /data/guanghulab/snapshots/<TS>-pre-bootstrap/,autorollback 用 |
| 0.6 | 动态调优 (tune-from-env.sh) |
写 .env.tune |
| 1 | APT 镜像源切阿里云 | 国内可达,不卡 nodesource |
| 2 | 装基础工具链 | nginx + certbot + git + jq + ufw + fail2ban |
| 3 | Node 20 + PM2 | NodeSource → nvm 国内镜像降级 |
| 4 | 标准目录 + PR-4/5/6 占位 | /data/guanghulab/ 下三个空目录 + README |
| 5 | (tiny 档) 建 1G swap | 防 OOM |
| 6 | nginx 站点配置 | 不动 /etc/letsencrypt/,只渲染 sites-available/guanghulab.conf |
| 7 | enable certbot.timer | LE 续期 cron |
| 8 | ufw + fail2ban + portal systemd unit 占位 | unit 不 enable,PR-4 自己接管 |
⚠️ 不 apt upgrade:2C2G 跑 upgrade 会卡 30+ 分钟。如需升级走灯塔机做镜像后切流量。
五、误触锁 + 自动回滚(cc-004)
冰朔团队技术能力近 0。任何不可逆动作都必须把"误操作的可能性"吞进系统内部。
误触锁
触发部署 = 在 GitHub Actions 页 Run workflow,必须在 confirm_phrase 字段输入:
重装广州
任何其他值(包括空、yes、确认 等)→ 自动降级 dry-run,不会真跑。
自动回滚
bootstrap.sh 用 trap autorollback_on_failure EXIT 钩住所有失败点:
- 任何步骤
exit != 0→ 自动调rollback.sh --to <跑前快照> - 失败前的 nginx 配置 /
.env.tune/ portal systemd unit 都被恢复 - 中文回执追加到
/data/guanghulab/_logs/deploy-report.md:
## ❌ bootstrap 失败 (exit=1), 触发自动回滚
- 目标快照: `20260509-163700-pre-bootstrap`
**给冰朔的人话**: 这次部署没成功. 我已经把机器恢复到部署前的状态.
**Awen 不需要做任何事**, 把这份 deploy-report.md 截图发给冰朔即可.
这是 cc-004 的落地:Awen 看到的不是英文报错,是已经收尾过的中文回执。
六、对应的 GitHub Actions
| Workflow | 用途 | 误触锁 |
|---|---|---|
.github/workflows/deploy-domain-server.yml |
bootstrap / update | 重装广州 |
.github/workflows/domain-server-rollback.yml |
单独的回滚红按钮 | 重装广州 |
.github/workflows/cn-isolation-guard.yml |
守卫: 上面两个必须出现在 cn-isolation-allowlist.json |
— |
七、回滚(独立操作)
# 列所有可用快照
bash /opt/guanghulab/domain-cn/rollback.sh --list
# 回到上一个快照(默认)
bash /opt/guanghulab/domain-cn/rollback.sh
# 回到指定快照
bash /opt/guanghulab/domain-cn/rollback.sh --to 20260509-163700-pre-bootstrap
或在 Actions 页跑 domain-server-rollback.yml,confirm_phrase=重装广州 才真跑。
注意:回滚只动配置层(nginx /
.env.tune/ systemd unit)。/data/guanghulab/portal/、/data/guanghulab/forgejo/这些数据目录永远不动,回滚是安全的。
八、与 lighthouse-cn 的关系
| 维度 | lighthouse-cn (灯塔) | domain-cn (域名机) |
|---|---|---|
| 服务器 | GH-CVM-MAIN-PROD-01 (43.139.251.175) | GH-CVM-DOMAIN-PROD-01 (本机) |
| 规格 | 4C16G (实际买到 2C8G) | 2C2G |
| 服务 | Gitea + PG + Redis + Runner (docker) | nginx + node + pm2 (bare metal) |
| 数据根 | /data/lighthouse/ |
/data/guanghulab/ |
| 部署根 | /opt/guanghu/ |
/opt/guanghulab/ |
| 三段式 | ✅ detect-env + tune + bootstrap | ✅ 复用范式 |
| 自动回滚 | ✅ rollback.sh 快照式 | ✅ 同 |
| 误触锁口令 | 我确认部署 / 我确认回滚 |
重装广州 |
域名机不跑训练、不做 VPN 中继、不挂 ali-landing。这台机器就是 guanghulab.com 的对外入口,单线运行,被
cn-isolation-guard.yml强制隔离。
九、模板版本演进
| 版本 | 时间 | 变更 |
|---|---|---|
| 0.1.0 | 2026-05-08 | (lighthouse-cn 同步) |
| 0.2.0 | 2026-05-09 | PR-2 落地: 三段式 + autorollback + 误触锁「重装广州」 |