2026-09-23·by Sijie Wang#standmeet#architecture#design

builder-claim-skip-locked

构建器:一个独立的、认领任务的服务

上级:structure

Microsite(改名前叫"自定义页面",e7fe80e91,2026-09-05)的构建跑在一个独立的构建器服务里,而不是主应用中——这样 API 进程就永远不需要 docker.sockvite。构建器(builder/runner.mjs)对 /internal/builds/claim 长轮询,用 SELECT … FOR UPDATE SKIP LOCKEDbackend/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)——构建器的认领协议没有变。

read next
about this entry

One of sijie's wiki entries. The AI on this site is grounded in the same corpus and answers in sijie's voice, with citations back to entries like this one — answering costs sijie money, so it waits behind a code: enter an access code →

builder-claim-skip-locked