anonsaber
|
cf252a9f06
|
docs+build: Dockerfile 降级为仅本地开发用,并记录 hoststack.yaml 保留/移除决策
用户要求两件事:把 Dockerfile 明确降级成「仅本地开发用」并说清边界;
以及若日后决定移除 hoststack.yaml,把理由写进相关文档。
先核了一遍决定性的技术前提——删掉 YAML 到底会发生什么。读 HostStack agent
源码,优先级是三层,而且和我上一轮写的说法不一样:
1. 控制台 services 表已存的值 -> payload
2. YAML 声明的字段无条件覆盖(guard 只是 `if (svcConfig.start?.command)`,
没有 `&& !payload.x` 短路)
3. YAML 省略的字段沿用控制台值;框架默认值只在仍为空时才填,而 agent 自己的
注释写着 "trigger-payload always populates payload.x from the DB",
所以对已建好的服务这条分支实际是死代码
因此删掉 hoststack.yaml **不会**回落到 cargo fetch / app 那套默认值,而是直接
采用控制台现存的值——而那恰好就是坏掉的 ./target/release/app。"UI 更方便管理"
这个前提成立,但必须先改 UI 再删文件。据此写了决策记录,当前决定是保留。
Dockerfile / docs/deployment.md §3 / docs/design.md / README.md
- 统一标为仅本地开发 / 本地容器调试路径,生产不执行
- 写清边界后果:诊断工具、ENTRYPOINT tini、EXPOSE 8080 在线上都不生效
- 给出判定方法:容器内看 /proc/1/cmdline 与 /etc/os-release
- 顺带修掉 design.md 里把 hoststack.yaml 描述成"网关编排清单"的错误——
文件里没有任何 gateway,只有 services.web
docs/deployment.md §5.1
- 三层优先级替换掉原先"YAML 省略则回落框架默认值"的错误说法
- 新增决策记录:保留的理由(进 git、可 review 可回滚)与代价(双写);
若日后移除,必须在控制台先把 install/build/start 三条改对再删,并把本段
移到 docs/retired.md 记下移除 commit
验证:GATE-DOCS PASS 6/6(SECTION-REF 226 refs / 0,PATH AUDIT 376 refs / 0)。
|
2026-09-29 12:22:00 +08:00 |
anonsaber
|
978288f8d7
|
build+docs: 用 HostStack agent 源码实证校正部署事实,砍掉 dig 的 42.7MB 膨胀
从本机缓存的 registry.hoststack.dev/hoststack/agent 镜像里直接读出运行时
配置,纠正了此前靠猜的四条部署事实:
hoststack.yaml
- 撤回上一版把 install: 合并进 build.command 的"修正"——schema 里
install.command 本来就是合法键(agent 的 schema 与 yaml-parser.ts 均定义),
install/build/start 是三条独立命令
- 补上为什么这个文件不能删:runtime: rust 的框架默认 start 命令是
./target/release/app,与 Cargo 包名无关。删掉 YAML 后 Start Command
回落到 app,进程在绑定端口前就以 not found 退出
- 记录实测优先级:YAML 值生效,省略才回落框架默认值(Cargo.toml 只声明
[[bin]] message-weave,仓库里既无 app 目标也无 app.rs)
Dockerfile
- 移除 bind9-dnsutils:连带 libicudata.so.72(29.8MB)等多级依赖,实测
边际成本 42.7MB,是其余 7 个工具总和(19.7MB)的两倍多
- DNS 解析用基础镜像自带的 getent 已覆盖(getent hosts / ahostsv4 / ahostsv6)
- 注释写明 19.7MB 的实测口径
docs/deployment.md
- §5.1 重写:build 在 rust:slim-trixie、runner 是 debian:trixie-slim,
本仓库 Dockerfile 完全不被执行
- 修正"没有 install: 键"与"validate 拦未知键"两处错误说法:agent 部署路径
不应用 zod 校验,未知键被静默丢弃而非报错,validate 才是唯一防线
- §4.1 容器安全档改成源码实测值:readonlyRootfs/dropCapabilities/
noNewPrivileges 全为 true,pidsLimit 256,tmpfs 选项 rw,nosuid,nodev,
size=64m——原先写的 noexec 并不存在;并标注 dev 档 rootfs 可写
- §8.1 明确两条部署路径的镜像差异(bookworm vs trixie)
- §6 HEALTHCHECK 与二进制"内置 health 子命令"的过期说法
- 删除文档中指向不存在文件 app.rs 的引用
验证:GATE-DOCS PASS 6/6(PATH AUDIT 369 path-refs / 0);
runtime 阶段实测构建成功且 curl/ps/pgrep/ss/ip/jq/nc/getent 齐备、
dig 按预期缺席、getent hosts 可解析、uid 999;
8 个工具 dpkg Installed-Size 合计 7935kB 而全量 du 差 62.3MB,
剔除 dig 后 19.7MB——这个差额就是本次砍掉的膨胀。
|
2026-09-29 12:15:52 +08:00 |
anonsaber
|
417f378d68
|
build+docs: 镜像内置只读诊断工具,清理 Dockerfile 的死 ENV 与文档过期表述
生产镜像此前只有 ca-certificates + tini,容器 rootfs 又只读,运维在容器内既
装不了 apt 也没有 curl/ps,排查只能靠宿主机的 /proc。把只读诊断工具装进
runtime 阶段,实测体积 +7.7 MB:
curl procps(ps/pgrep/free) iproute2(ss/ip) jq bind9-dnsutils(dig) netcat-openbsd(nc)
全部是只读查询能力,不引入包管理之外的写能力,也不新增 shell 解释器。
顺手修掉四处已被事实推翻的表述:
1. Dockerfile 的 ENV RUN_MODE=webhook 是死变量——该标识符随 Config::from_env()
删除后代码零读取,文档 5 处都记着已删除,镜像却还在设。删掉并留注释防回退。
2. deployment.md 说「runtime 只装了 ca-certificates tini」「镜像内没有 curl/wget」,
两处都是健康检查建议的承重理由,随内置 curl 一起更新为「技术上可行但不建议」。
3. deployment.md 说非 root 用户是 uid 1000,实际 useradd --system 给 uid 999,
已实测修正。
4. retired.md 里 compose healthcheck 示例的删除理由把「镜像无 curl」当主因,
真正的承重原因是 src/main.rs 没有 CLI 子命令解析,已改写并标注 curl 已内置。
同时补齐 hoststack.yaml 缺失的 install 段(cargo fetch --locked),并在 start 段
写清临时开 --debug 的确切改法与「必须在容器内探、别走公网域名」的约束。
验证:
- 包名与安装步骤在同一 debian:bookworm-slim 基础镜像内实测通过
- useradd 实测输出 uid=999,与设计一致
- docker build --check 无告警
- GATE-DOCS PASS 6/6(SECTION-REF 217 / 0,PATH AUDIT 364 / 0)
注:install: { command: ... } 的键名是按现有 build:/start: 的同构推断的,
若 HostStack 拒绝该键,删掉这两行即可,不影响 build/start。
|
2026-09-29 11:24:13 +08:00 |
anonsaber
|
4f5eb9293d
|
chore(worker): rename proxy to lb and ignore build cache
- cloudflare-worker: unify terminology proxy -> lb/forward
(PROXIED_ROUTES -> LB_ROUTES, proxyWithFailover -> forwardWithFailover,
proxy.js -> lb.js, related tests and README); renames/wording only, no behavior change
- Dockerfile: crates.io index mirror rsproxy.cn -> mirrors.ustc.edu.cn
- .gitignore: ignore build verification cache .gate-cache/ (cargo registry + rustup, ~1.5G)
|
2026-09-27 12:52:55 +08:00 |
anonsaber
|
c75858fda0
|
refactor: rename project to MessageWeave
|
2026-09-25 10:29:18 +08:00 |
anonsaber
|
fc43c6bf93
|
build: use rsproxy for container dependencies
|
2026-09-25 09:21:43 +08:00 |
anonsaber
|
dceecaf2f4
|
feat: initial MessageWeave release
|
2026-09-25 09:14:04 +08:00 |