feat(远端): 恢复自建 Gitea 代码辅仓,OpenList 降为备选备份
用户定案:「自建 gitea 同步一下吧,openlist 也作为备选备份」。
于是把上一轮「撤销全部 git 辅仓」的决定部分回退:在线那一路回到自建 Gitea,
OpenList 上的加密 bundle 从「唯一异地备份」改为「备选异地备份」。
两层不是重复,而是失效模式不同:
· 自建 Gitea(在线、可增量、可浏览)—— 不受任何第三方平台规则约束
· 离线 bundle(离线、单一文件、完整历史)—— 平台全挂也能恢复
一、实际同步
- Gitea 位于 23.254.236.47:3001(Gitea 28.0.0),本机直连即可推,
**不需要广州中转机**(旧结论「沙箱跑不通 git smart HTTP」只针对当时的代理)
- 远端停在 ed38f938(2026-10-04),落后 57 个提交,且是本地 HEAD 的**祖先**
→ 一次 fast-forward 追平,**未强推、未丢历史**
- 同步后 origin 与 gitea 均指向 5f27ad32
二、git 配置
- 恢复 remote `gitea`(凭据编在 URL 里,只落本机 .git/config,不入库)
- `pushall` 回到双推:
!git push origin main; ec=$?; git remote | grep -qx gitea && git push gitea main; exit $ec
· 用 `;` 而非 `&&` → 主仓挂了辅仓照样推
· `exit $ec` → 退出码仍以主仓为准,辅仓成功不掩盖主仓失败
· gitea 段带存在性前置判断 → 没配辅仓时静默跳过,不白报错
三、发布链路恢复 gitea(前一轮刚去掉,现按新定案加回)
- `deploy/editor-api/bootstrap.sh`
· 新增 GITEA_URL / GITEA_USER / GITEA_PASS(凭据必须现给,不写死在脚本里)
· PUSH_REMOTES 默认 → origin,gitea;没给 GITEA_PASS 则降级为 origin
· 恢复「配 gitea 远端」一节;退役远端名单去掉 gitea(只留 gh / gitee)
—— 否则新部署会把现行辅仓当成退役远端清掉
· 结尾补一句「未启用 Gitea 辅仓」的提示
- `docker-compose.editor.yml`、`editor-api/server.mjs` → 默认 origin,gitea
- `editor-api/README.md` → 变量表同步;`editor-api/Dockerfile` → 注释补 http 情形
四、`scripts/setup-cnb-remotes.sh` 改回双远端模式
- 头部沿革、USAGE、凭据段全部重写;GITEA_PASS 走环境变量,不入库
- 退役远端循环只清 gh / gitee;pushall 写同一份定义
五、文档
- `架构总览.md`:§1.2 地址地图加「代码辅仓」行、备份行降为「备选」;
§2 旅程图改双推;§5.1 推送重写(含别名实际定义与三条取舍);
§5.2 远端改双行表 + Gitea 接入细节;§5.3 由「不走 git 远端」改为
「远端与备份的分工」(三层各自的失效模式);§5.6 定位改备选;
§6 待办 #2/#4/#7/#10 更新
- `CNB构建落地方案.md` §4.0 目标形态与定案块、§4.1 第 4 条
- `README.md` 发布流程图、推送说明、脚本表
- `scripts/backup-run.mjs` 头部注释:不再是「唯一备份」
实测:
git push gitea main → ed38f938..5f27ad32 main -> main
git pushall → origin / gitea 双向同步,退出码 0
bash -n 校验 bootstrap.sh 与 setup-cnb-remotes.sh 均通过
This commit is contained in:
1 parent
5f27ad321d
commit
448b898e40
10 files changed
+221
-109
No files matched your search
+24
-12
@@ -143,24 +143,32 @@ CNB 只替换「构建 + 搬运」这一段,顺带砍掉广州中转机上那
|
||||
|
||||
## 四、落地骨架
|
||||
|
||||
### 4.0 第一步:仓库迁移与远端配置(CNB 主仓,**无 git 辅仓**)
|
||||
### 4.0 第一步:仓库迁移与远端配置(CNB 主仓 + 自建 Gitea 辅仓)
|
||||
|
||||
**目标形态**
|
||||
|
||||
```
|
||||
origin → https://cnb.cool/<组织>/<仓库> ← **唯一远端**(fetch + push),CNB 构建由它触发
|
||||
origin → https://cnb.cool/<组织>/<仓库> ← **主仓**(fetch + push),CNB 构建由它触发
|
||||
gitea → http://23.254.236.47:3001/zqlit/blog ← **代码同步辅仓**(只推不拉,不参与构建)
|
||||
```
|
||||
|
||||
> ⚠️ **2026-10-06 定案:git 远端只留 CNB 一个。**
|
||||
> **2026-10-06 定案:CNB 主仓 + 自建 Gitea 辅仓,另加一份离线 bundle 备份。**
|
||||
>
|
||||
> - **GitHub**(原 `gh` remote):账号被平台标记、仓库被按 AUP 清空 → 移除
|
||||
> | remote | 地址 | 角色 |
|
||||
> |---|---|---|
|
||||
> | `origin` | `https://cnb.cool/zqlit/blog.git` | **主仓** —— 唯一的 fetch 源,推送即触发 CNB 构建 |
|
||||
> | `gitea` | `http://23.254.236.47:3001/zqlit/blog.git` | **代码同步辅仓** —— 只作代码留档与找回,不参与构建 |
|
||||
>
|
||||
> - **GitHub**(原 `gh` remote):账号被平台标记、仓库被按 AUP 清空 → 已彻底移除,**别再往回加**
|
||||
> - **Gitee**:单仓 500MB / 单文件 50MB 两道硬门槛过不去(本仓 `bin/linux/hugo` 83.1MB)→ 未采用
|
||||
> - **自建 Gitea**:发布链路早已不依赖 → 移除
|
||||
>
|
||||
> **异地备份改为「整仓加密 bundle → 中兴 F50 上的 OpenList」**,与 git 远端无关。
|
||||
> **备选异地备份 = 「整仓加密 bundle → 中兴 F50 上的 OpenList」**,与 git 远端无关。
|
||||
> 它和 Gitea 辅仓不是一回事、也不能互相替代:
|
||||
> 辅仓保「随时能 `clone` 回来」,bundle 保「平台全挂/账号被封时仍有一份完整历史」。
|
||||
> 选型依据见 `架构总览.md` §5.3,实现与恢复流程见 §5.6。
|
||||
|
||||
`git pushall` 仍保留为别名,但现在等价于 `git push origin main`(只有这一段)。
|
||||
`git pushall` 别名 = `git push origin main; git push gitea main` ——
|
||||
用 `;` 而非 `&&`,主仓失败时辅仓照样推;退出码以主仓为准(辅仓失败不阻断发布)。
|
||||
|
||||
**★ 为什么不用「一个 remote 挂多个 pushurl」**(这条教训仍然有效)
|
||||
|
||||
@@ -174,8 +182,8 @@ origin → https://cnb.cool/<组织>/<仓库> ← **唯一远端**(fetch + p
|
||||
也就是说:**主仓推失败时,辅仓那份备份也不会更新** —— 备份的意义就没了。
|
||||
|
||||
所以当时才拆成两个独立 remote,别名里用 `;` 而不是 `&&`,保证互不阻塞。
|
||||
现在只有一个远端,这层复杂性自然取消了 —— 但**如果将来要再加辅仓**,
|
||||
必须回到「独立 remote + 别名」的写法,**不要**用 pushurl。
|
||||
**现行方案正是回到这个写法**:`origin`(CNB) 与 `gitea`(自建) 各自独立成 remote,
|
||||
别名 `;` 串联、退出码取主仓 —— 这就是现在的 `git pushall`。
|
||||
|
||||
**脚本**(已就位,可直接用)
|
||||
|
||||
@@ -184,8 +192,12 @@ bash scripts/setup-cnb-remotes.sh https://cnb.cool/<组织>/<仓库>
|
||||
```
|
||||
|
||||
它会先把你现有的远端配置(含明文凭据)备份到 `.workbuddy-backup/git-remotes.<时间戳>.txt`,
|
||||
再重建 `origin`、把 `pushall` 设为 `git push origin main`,
|
||||
并顺手清掉 `gh` / `gitee` / `gitea` 这些已退役的远端 —— 全程可回退。
|
||||
再重建 `origin`、把 `pushall` 设为 `git push origin main; git push gitea main`,
|
||||
并顺手清掉 `gh` / `gitee` 这两个已退役的远端 —— 全程可回退。
|
||||
|
||||
> Gitea 的凭据**不写死在脚本里**,要现给:
|
||||
> `GITEA_PASS='<Gitea 密码或访问令牌>' bash scripts/setup-cnb-remotes.sh <CNB_URL>`
|
||||
> 没给就只配 `origin`(`pushall` 里的 gitea 段会被自动跳过)。
|
||||
|
||||
**★ CNB 不支持 SSH(官方明确)**
|
||||
|
||||
@@ -281,7 +293,7 @@ CMD ["hugo", "version"]
|
||||
> 1. **hugo 二进制改为随仓库携带**(`bin/linux/hugo`,84MB,进 git 后仅 24MB)。实测国内节点直连 GitHub 拉这个 release 要 **127 秒**(本机只要 7 秒),而每次构建都要付这个成本 → 自带更稳。
|
||||
> 2. 又拍云 `upx` 的下载源是 `collection.b0.upaiyun.com`(国内 CDN),直连稳定,保留在线安装。
|
||||
> 3. **架构不能混用**:`E:\Hugo\hugo.exe` 是 `windows/amd64`(本地预览用),CNB 构建节点是 `linux/amd64`(`bin/linux/hugo`),两者互不替代。
|
||||
> 4. ~~若以后主仓改选 Gitee(单仓 500MB),这 84MB 会挤占配额~~ —— **2026-10-06 定案:不走任何 git 辅仓**(异地备份改用 OpenList 上的加密 bundle,见 `架构总览.md` §5.6),这条约束自然消失,`bin/linux/hugo` 继续随仓库携带即可。
|
||||
> 4. ~~若以后主仓改选 Gitee(单仓 500MB),这 84MB 会挤占配额~~ —— **2026-10-06 定案:不走 Gitee**(它卡单文件 50MB / 单仓 500MB 两道门槛)。现行辅仓是**自建 Gitea**(自己的机器,没有配额这回事,见 §4.0),离线备份走 OpenList 上的加密 bundle(`架构总览.md` §5.6)。这条约束自然消失,`bin/linux/hugo` 继续随仓库携带即可。
|
||||
> 5. **apt 源改阿里云镜像**:CNB 官方只明示加速「Docker / NPM / Maven 镜像」,Debian 默认 apt 源不在承诺范围内,而构建节点在国内 → 换阿里云兜底,避免构建卡在 `apt-get update`(首轮构建时留意这一步耗时)。
|
||||
|
||||
### 4.2 `.cnb.yml`(流水线)
|
||||
|
||||
Reference in new issue
Block a user