Skip to content

bug fix && docker deploy - #471

Merged
bigbrother666sh merged 20 commits into
TeamWiseFlow:masterfrom
bigbrother666sh:master
Aug 12, 2026
Merged

bug fix && docker deploy#471
bigbrother666sh merged 20 commits into
TeamWiseFlow:masterfrom
bigbrother666sh:master

Conversation

@bigbrother666sh

Copy link
Copy Markdown
Member

No description provided.

codes-factory-of-bg and others added 20 commits August 9, 2026 15:56
…ap 静默 exit 1

阿里云 ACR 二次构建仍炸 STEP 7,且日志里无任何 [bootstrap] 输出——根因:
1. Dockerfile ARG USE_MIRROR=${USE_MIRROR:-0} 是 shell 语法非 Dockerfile 语法,
   ARG 只支持 ARG NAME=value(直接值),改 ARG USE_MIRROR=0
2. ENV NPM_CONFIG_REGISTRY=https://registry.npmmirror.com 写死污染 USE_MIRROR=0 分支,
   bootstrap export 的 npm_config_registry 被 ENV 覆盖→海外构建机仍拉 npmmirror 超时
3. bootstrap set -uo pipefail 下 unbound 错误走 stderr,buildkit 吞 stderr→静默 exit 1
   无诊断输出。改 set -o pipefail(去 -u)+ 首行无条件 echo(证明脚本能跑起来)

Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
….sh 同源

阿里云 ACR 构建机选国内部署,拉 npmmirror 最快——索性跟裸机 install.sh 链路完全
一致,不引入 USE_MIRROR 分支复杂度,根治两轮 ACR 构建失败(ARG 语法错 / ENV
污染 / set -u 静默 exit 1 / 海外构建机拉 npmmirror 超时)。

- docker/Dockerfile: 刪 ARG USE_MIRROR + if USE_MIRROR 分支,写死阿里云 APT 源
  + ENV NPM_CONFIG_REGISTRY=npmmirror
- docker/docker-bootstrap.sh: 刪 USE_MIRROR 分支,写死 npm_config_registry=npmmirror;
  骩每步 [bootstrap] STEP N done 诊断输出(ACR 失败时精确定位哪步炸)
- scripts/apply-addons.sh: 三处 --registry 回滚成写死 npmmirror(上轮加的 NPM_REGISTRY
  env 透传一并删掉,保持裸机链路纯粹)
- patches/camoufox-cli/build.sh: npm install --registry 回滚成写死 npmmirror
- docker/README.md + docs/docker-distribution.md: ACR 构建规则表改“不勾海外机器构建”
  + 构建参数无,表述改“与裸机同源”

Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
…ocker Hub 超时

阿里云 ACR 构建机跑 buildkit 前会先去 registry-1.docker.io(Docker Hub)拉
syntax pin 指定的 docker/dockerfile:1 frontend 镜像——跨境拉不动 i/o timeout,
构建在还没跑到任何 RUN 之前就炸了。

删 # syntax=docker/dockerfile:1 这行 frontend pin:buildkit 会用内置默认
frontend(不需要跨境拉),构建能跑起来。无功能损失——本 Dockerfile 没用到
任何 dockerfile:1 frontend 特有语法(只用了 ARG/ENV/RUN/COPY/VOLUME/EXPOSE/
ENTRYPOINT,全在 buildkit 默认 frontend 支持范围内)。

Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
阿里云 ACR 构建机跑 buildkit 时拉 docker.io/library/node:24-bookworm 镜像
metadata 跨境超时(registry-1.docker.io i/o timeout)——根因跟 syntax pin
那轮一样:ACR 构建机跨境拉 Docker Hub 拉不动。

改两个 FROM 都走阿里云 ACR 的 Docker Hub 镜像加速:
  registry.cn-hangzhou.aliyuncs.com/library/node:24-bookworm
阿里云 ACR 个人版同步了 Docker Hub 官方镜像到 library/ 命名空间,
国内构建机走国内 ACR 拉镜像最快,不跨境。

Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
阿里云 ACR 构建系统默认走 Docker Hub Mirror 镜像源拉基础镜像,但国内 Mirror
链路不稳会超时(registry-1.docker.io i/o timeout)。正解不是把 FROM 改成
ACR 个人版路径(library/node 在个人版不存在,报 repository does not exist),
而是让构建机走海外链路拉 Docker Hub——勾选 ACR 构建设置的"海外机器构建"。

- Dockerfile FROM 回滚成原始 node:24-bookworm(让 ACR 构建机走自己的 Docker Hub
  Mirror 或海外机器构建拉基础镜像,不在 FROM 里填 ACR 路径)
- docker/README.md + docs/docker-distribution.md: 海外机器构建段改"勾选",说明
  构建机走海外拉 Docker Hub 基础镜像 + Dockerfile 内 npmmirror/阿里云 APT 源是
  另一条链路,两者不冲突

Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
阿里云 ACR 构建日志在 [xiaobei-build 4/7] RUN corepack enable && corepack prepare
pnpm@10.30.2 --activate 后截断,无 ERROR 行——推测 corepack 拉 pnpm 包走 npmjs
超时(海外构建机拉海外源可能慢)。改 corepack enable + prepare 都透传
npm_config_registry=npmmirror,走国内源与裸机 install.sh 同源。

低风险推测修复:即使真炸点在后面 COPY/bootstrap,这个改动本身也是对的
(corepack 走 npmmirror 更稳),不浪费这轮构建。

Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
阿里云 ACR 构建机走"海外机器构建"拉 Docker Hub 基础镜像——海外机构拉国内
npmmirror 反而跨境绕远路超时(apply-addons 的 pnpm install 拉 openclaw 巨量依赖)。
根因和最初几轮一样:npm registry 链路和构建机链路不匹配。

- docker/Dockerfile: ENV NPM_CONFIG_REGISTRY + corepack prepare 全改 npmjs
  (海外构建机拉海外源最快,APT 源仍走阿里云——debian 源不论海内外都快)
- docker/docker-bootstrap.sh: npm registry 走 npmjs; 诊断输出全走 log() 函数
  写 stderr(buildkit 失败步骤的 stdout 会在 ERROR 行后丢弃,stderr 才能穿透
  显示,ACR 构建失败时精确定位哪步炸)
- scripts/apply-addons.sh: 三处 --registry 改 npmjs
- patches/camoufox-cli/build.sh: npm install --registry 改 npmjs
- docker/README.md + docs/docker-distribution.md: 海外机器构建段表述更新
  (构建机走海外拉 Docker Hub + npm 走 npmjs;Dockerfile 内只有阿里云 APT
  源是另一条链路,不冲突)

Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
上一轮 edit_file 改诊断输出走 log() 函数写 stderr——但 log() 定义行根本没落盘
(bash -n 校验检不出,运行时调未定义函数炸 command not found)。bootstrap 17 处
log "..." 调用在 node:24 镜像里无 systemd log 命令,首行就 exit 127——这才是 ACR
构建 129s 日志显示不出任何输出的真根因,不是 buildkit 吞 stdout/stderr。

- docker/docker-bootstrap.sh: 补 log() 函数定义(echo stderr + 追写
  /opt/xiaobei/.bootstrap-log 文件双保险),首行清空文件避免旧残留
- docker/Dockerfile: bootstrap RUN 段末尾加 || cat /opt/xiaobei/.bootstrap-log;
  exit 1——失败时也 cat 诊断文件显示出来(buildkit 会显示 cat 的 stdout)

Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
上轮日志显示 STEP 12 corepack prepare pnpm@10.30.2 在 Preparing 后截断——
corepack 拉 pnpm 包跨境抖动(corepack 有自己的 cache 机制,不一定读
npm_config_registry env,可能绕过 registry 直走 npmjs API)。上一轮走
npmmirror 反而通了(STEP 12 0.238s),这次走 npmjs 反而炸——跨境抖动是主因。

正解:完全不走 corepack 网络,用 npm install -g pnpm@10.30.2 装 pnpm global
(走 npm registry,npm_config_registry env 已设,npm client 稳定读 env)。

- docker/Dockerfile: build stage + runtime stage 两处 corepack 全改走
  npm install -g pnpm@10.30.2(装到 /usr/local/bin/pnpm)

Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
上一轮 STEP 15 bootstrap 144s 炸,Dockerfile 段末尾 || cat 诊断文件被 buildkit
吞了(日志里没显示任何诊断内容)——buildkit 不显示同 RUN 步骤的 stdout/stderr,
但显示独立 RUN 步骤的 stdout(之前 STEP 13/14 WORKDIR/COPY 的 DONE 都显示了)。

改法:STEP 15 bootstrap RUN 段末尾的 || cat 拆出来,做成紧跟的独立 RUN cat 步骤
——独立 RUN 即使 bootstrap 失败也会跑(buildkit 跑下一步要上一步产物,但 cat
不依赖产物只读文件),把 bootstrap 写的 .bootstrap-log cat 出来,炸在哪步一目了然。

诊断改动:不拆 7 个独立 RUN(改动范围大需 bootstrap 支持 --step N),先用独立 cat RUN
最小改动看效果——如果 cat 也被吞,再拆 RUN。

Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
commit 8ff83f2 的独立 cat 诊断步骤设计有误:cat 步骤排在 bootstrap RUN
之后,bootstrap exit 1 时 buildkit 直接 fail build,后续步骤全跳过,
cat 步骤永远跑不到(日志里 8/8 没出现就是这个原因)。

修复:把单条 && 链拆成三段式:
  1. 执行步:{ ...; echo "BOOTSTRAP_CHAIN_EXIT=$?"; } 2>>.bootstrap-log
     吞掉 && 链 exit code,让 buildkit 继续到下一步
  2. cat 步:独立 RUN cat .bootstrap-log,stdout 穿透 buildkit 显示
     无论 bootstrap 炸没炸都能跑
  3. grep 步:独立 RUN grep -q "BOOTSTRAP_CHAIN_EXIT=0" 决定是否 fail build

诊断闭环验证:
  - test -d 校验失败 → cat 显示 BOOTSTRAP_CHAIN_EXIT=1 无 [bootstrap] 标记
  - bootstrap STEP N 炸 → cat 显示 [bootstrap] STEP N done + EXIT=1
  - 全成功 → cat 显示全部标记 + EXIT=0,grep 通过

Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
- Dockerfile / docker-compose.yml / entrypoint / bootstrap 收尾调整
- docker-compose.yml 临时 bind mount 本地 entrypoint 便于调试
- entrypoint 修复:compose 传入 __FILL_*__ 占位符时不覆盖卷里 .env 真值
- 清理废弃脚本 scripts/build-image.sh
- README 同步更新

Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
# Conflicts:
#	scripts/apply-addons.sh
3 个 build 链路文件把写死的 npmmirror 改成读环境变量:
- docker/Dockerfile:两个 stage 都加 ARG NPM_REGISTRY(默认 npmmirror),
  ENV NPM_CONFIG_REGISTRY=${NPM_REGISTRY}
- docker/docker-bootstrap.sh:npm_config_registry 改读
  ${NPM_CONFIG_REGISTRY:-npmmirror}
- patches/camoufox-cli/build.sh:npm install --registry 改读
  ${npm_config_registry:-npmmirror}

对本地 build 行为零影响(默认值仍是 npmmirror),但让 Dockerfile
在不同构建机位置都能工作(国内 npmmirror / 海外 npmjs)。

Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
开源版本(master)的 Docker 方案让用户自己去本地 build + 跑,
不需要阿里云 ACR 分发链路。

- docker-compose.yml:image 默认值从阿里云 ACR 地址改为
  xiaobei:local(用户本地 build 出的 tag),顶部注释同步更新
- docker/README.md:去掉阿里云 ACR 构建与分发章节,
  快速开始改为先 docker build 再 docker compose up 流程

Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
旧版 render_awk_api_key() 用 raw.replace(/\$\{AWK_API_KEY\}/g, key)
替换 placeholder,但第一次渲染后 placeholder 就没了,第二次启动
找不到 placeholder 就跳过写入——openclaw.json 里永远是第一次的值,
后面改 AWK_API_KEY 环境变量没用。

修复:改成 JSON 解析,遍历 models.providers,每次启动用当前
AWK_API_KEY 环境变量覆盖所有 provider 的 apiKey 字段。无论
openclaw.json 里是 ${AWK_API_KEY} placeholder 还是已渲染的真值,
都能正确更新。

Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
install.ps1 / install-atomgit.ps1 的更新路线($isUpdate 分支)刷新
daemon.env 时仍用 Set-Content -Encoding UTF8,有 BOM + 数组塌缩两个坑:
升级一次就会给 daemon.env 注入 BOM,gateway.cmd call daemon.env 炸。
改用 Write-EnvFile(install.ps1)/ 内联 WriteAllText no-BOM(atomgit),
与首写路径一致。

README.md Windows 安装说明的代码围栏 info string 里混入了中文提示
和未闭合括号,GitHub 渲染时整条提示丢失。拆成 blockquote + 干净 fence。
Docker 镜像缺 ffmpeg 和 sqlite3,致多个 skill requires 检查失败:

- ffmpeg(含 ffprobe):video-edit / talking-head-cut / aigc-video-gen /
  video-review / viral-chaser / collage-broll / video-producer /
  manim-explainer / awk-tts / content-producer(denoise/normalize) 依赖
- sqlite3 CLI:content-calibrator / published-track / wx-mp-engagement /
  wx-channel-engagement 的 shell 脚本用 sqlite3 命令查 DB

build 阶段 + runtime 阶段都加。Ubuntu 24.04 ffmpeg 包约 80MB 依赖。
@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
1 out of 2 committers have signed the CLA.

✅ bigbrother666sh
❌ codes-factory-of-bg


codes-factory-of-bg seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You have signed the CLA already but the status is still pending? Let us recheck it.

@bigbrother666sh
bigbrother666sh merged commit 9a71837 into TeamWiseFlow:master Aug 12, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants