国内域名机部署模板 · 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 探测后会落到 tinyportal 单进程、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)

为什么不能写死 2C2Gcc-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 不 enablePR-4 自己接管

⚠️ 不 apt upgrade2C2G 跑 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.ymlconfirm_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 + 误触锁「重装广州」