构建器:一个独立的、认领任务的服务
上级:structure
Microsite(改名前叫"自定义页面",e7fe80e91,2026-09-05)的构建跑在一个独立的构建器服务里,而不是主应用中——这样 API 进程就永远不需要 docker.sock 或 vite。构建器(builder/runner.mjs)对 /internal/builds/claim 长轮询,用 SELECT … FOR UPDATE SKIP LOCKED(backend/db/queries/owner/microsites.sql)原子地认领一个任务,在自己的容器里跑 vite build,把产物写到共享卷,再把状态 PATCH 回去(routes/sys/builds.go)。
Microsite 携带一个三态的 live / staging / previous_live 构建指针(schema.sql 里的 live_build_id / staging_build_id / previous_live_build_id),所以上线和回滚只是指针交换——不需要克隆构建产物。页面在 /p/<slug>/ 下提供服务(routes/public/microsites.go),并注入一个 <base href>,使 Vite 的相对资源路径能正确解析。
admin 这一侧,编辑器现在一改就自动编译(0140bbbac / bf5ffaa82,2026-09-06/07),跟构建进度的长轮询也搬进了一个通用 worker(5ca6055aa,2026-09-07)——构建器的认领协议没有变。