docs: align Bun, routing, browser validation and MoviePilot site provenance
This commit is contained in:
1 parent
e72983ecee
commit
55841402a6
23 files changed
+269
-162
No files matched your search
@@ -27,7 +27,7 @@ docker compose --env-file .env.deploy ps camofox # healthy
|
||||
```
|
||||
|
||||
上游不发布镜像。compose 缺省用的是**浏览器桌面镜像** `umt-browser-desktop:1.18.0`(`docker/browser-desktop`,§8),
|
||||
当前默认版本为 1.18.0,构建补丁、锁文件和 Playwright 1.60 协议兼容例外见 [镜像说明](../../docker/camofox/README.md)。以下旧日期的验收表保留历史版本。
|
||||
当前默认源码版本为 1.18.0,构建补丁、锁文件和 Playwright peer 上限见 [镜像说明](../../docker/camofox/README.md)。以下旧日期的验收表保留历史版本。
|
||||
|
||||
它从纯截图镜像 `camofox-browser:1.18.0` 复制 camofox,所以**先构建基础镜像**:`docker/camofox/Dockerfile` 从 git tag `v1.18.0`
|
||||
构建(修了上游 Dockerfile 的两个问题,见文件头)。首次构建要从 GitHub 拉源码与约 630 MB 的 Camoufox 浏览器包:
|
||||
@@ -691,7 +691,7 @@ camofox 按 **API 调用**判断活动,有三道空闲回收(`docker-compose.yml
|
||||
|
||||
## 16 2026-10-01 的 1.18 升级复测
|
||||
|
||||
当前默认桌面镜像为 `umt-browser-desktop:1.18.0`,基础镜像 `camofox-browser:1.18.0` 锁定上游 `f94c81babf4bfd44cdd4bd46e1f2e1fb1d91c753`。Node 24.21.0、Camoufox 152.0.4-beta.30、camoufox-js 0.12.0;Playwright 保持官方协议可兼容的 1.60.0,原因和独立锁见 [构建说明](../../docker/camofox/README.md)。
|
||||
当前默认桌面镜像为 `umt-browser-desktop:1.18.0`,基础镜像 `camofox-browser:1.18.0` 锁定上游 `f94c81babf4bfd44cdd4bd46e1f2e1fb1d91c753`。当前依赖锁使用 Node 24.21.0、Camoufox 152.0.4-beta.30、camoufox-js 0.13.0 和 Playwright 1.62.1,原因和独立锁见 [构建说明](../../docker/camofox/README.md)。2026-11-05 在独立桌面容器和全新 profile 卷验证了当前组合,重启前 12 项、正常重启后 13 项通过,包括身份保持、Cookie 落盘、快照、PNG、可信点击和 profile 隔离;测试容器与卷已清理。下述 2026-10-01 的现场验证使用升级前的依赖组合,其中真实站点相关结论不自动扩展到当前组合。
|
||||
|
||||
用生产 profile 与桌面配置的独立副本验证了鉴权、原身份保持、Cookie 正常重启落盘、上下文/页面、evaluate、快照、PNG、选择器与可信坐标点击、profile 隔离。现有真实 BrowserService/Agent 能力核验脚本 `scripts/browser-verify/verify.ts` 的 setup/a/b/idle/c/d 共 25 项严格通过,包含登录、脱敏、提取、下载文件哈希及资源关联、正常重启与空闲回收自动重连、旧引用拒绝、SIGKILL 未落盘登录丢失识别。适配器能力表现已登记 1.18.0 的原十项能力,未知版本不继承核验结果。
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ docker build -t uhd-media-tool:latest . # 或 docker com
|
||||
APP_VERSION=v0.3.11 docker compose --env-file .env.deploy build app # 示例:发布时填写对应版本,写进 web 的 version.json
|
||||
```
|
||||
|
||||
- 多阶段:`oven/bun:1.4.3`(装依赖 → web 构建 → server 编译)→ `debian:trixie-slim` 运行镜像。
|
||||
- 多阶段:`oven/bun:1.4.4`(装依赖 → web 构建 → server 编译)→ `debian:trixie-slim` 运行镜像。
|
||||
- 运行镜像额外装 `gosu`(降权)及 PG 客户端动态库,从固定的 `postgres:18.6-trixie` 官方镜像复制 pg_dump/pg_restore/psql 与 libpq 18,
|
||||
外加 `/usr/local/bin/ffprobe`:从 `mwader/static-ffmpeg:9.0.2` 拷单个静态二进制(约 135 MB;Debian `ffmpeg` 包要 200+ 个依赖约 450 MB)。
|
||||
换来源用 `--build-arg FFPROBE_IMAGE=<含 /ffprobe 的镜像>`。
|
||||
|
||||
+8
-2
@@ -2,7 +2,7 @@
|
||||
|
||||
## 前置
|
||||
|
||||
- Bun 1.4.3(锁定)、Docker;Linux 解析沙箱构建需要 C 编译器和 Node-API 头文件(Debian: `build-essential libnode-dev`)。不需要单独安装 Node.js / pnpm。
|
||||
- Bun 1.4.4(锁定)、Docker;Linux 解析沙箱构建需要 C 编译器和 Node-API 头文件(Debian: `build-essential libnode-dev`)。不需要单独安装 Node.js / pnpm。
|
||||
- 端口:web 5180、API 4390、PG 55433。4380 留给本机部署版(Caddy),本机 3000/5175/5176/55432 已被其他项目占用,不要改用。
|
||||
|
||||
## 首次启动
|
||||
@@ -16,6 +16,10 @@ bun run dev # 同时起 server(4390)与 web(5180)
|
||||
|
||||
单独起:`bun run dev:server`(`bun --watch`,默认 `--role all`,API + worker 同进程)、`bun run dev:web`。
|
||||
|
||||
前端使用 Vite 8 + TanStack Router,路由表在 `apps/web/app/router.tsx`,构建入口为 `apps/web/index.html` 与 `app/entry.client.tsx`。`VITE_API_TARGET` 可覆盖开发代理目标,默认 `http://localhost:4390`;生产产物仍输出到 `apps/web/build/client`,由后端按 SPA 路由回退到 `index.html`。
|
||||
|
||||
server 测试按 `unit`、`pg`、`serial` 分组运行。`unit` 文件并行,其余两组各自文件串行;OpenWorkflow 0.11 的并发索引迁移会等待其它 schema 的长事务快照,因此不同 schema 的数据库测试也不能并行跑。测试连接开发库,不使用部署库。
|
||||
|
||||
## 验证
|
||||
|
||||
```sh
|
||||
@@ -105,6 +109,8 @@ curl -H "Authorization: Bearer umt-dev-admin-key" "localhost:4390/api/v1/events?
|
||||
|
||||
身份重识别的幂等判断同时覆盖季集、日期、发布组和识别词命中;作品候选相同不代表解析事实相同,不能跳过事实变更后的季集重算。
|
||||
|
||||
整理身份事项按决策 ID 使用稳定恢复幂等键,在原记录的重新规划锁内复用有效后继。人工与智能体同时确认同一作品只入队一次;并发选择不同作品时返回冲突,不能让同一来源生成两份执行计划。
|
||||
|
||||
季集计算和识别词归 sources-identity,整理请求、文件操作与入库状态归 acquisition-organize。整理把真实失败文件和同批正常文件样本交给映射事项,模拟与写入共用同一判断;映射重算后以 `media.episode_mapping_changed` 通知整理模块,只有季集已经确定的未完成记录重新规划。恢复预检与规划复用 `planFileEpisodes`,保留原资源的发布时间等解析上下文。Agent 的调查运行、预算和授权沿用现有机制,不另外创建恢复框架;身份补齐、重新排队和实际入库完成分别按业务事实核实。
|
||||
|
||||
维护时先验证真实的成功、失败和恢复路径,尤其是授权、文件替换、取消与外部副作用;删除空壳或无使用者的机制时同步删除其专属测试与文档。不要为了目录对称增加转发层,也不要把不同阶段的状态合并成一个枚举。
|
||||
@@ -203,7 +209,7 @@ docker compose up -d --build # 服务:app(4380)+ postgres(数据卷 umt-p
|
||||
curl localhost:4380/api/v1/health
|
||||
```
|
||||
|
||||
- 镜像:`oven/bun:1.4.3` 构建 web 与 `bun build --compile` 出二进制,并构建 `sandbox-policy.node`,运行时 `debian:trixie-slim` + gosu + postgresql-client + 静态 ffprobe,root 启动修 `/data` 属主后降权到 PUID(缺省 10001)。
|
||||
- 镜像:`oven/bun:1.4.4` 构建 web 与 `bun build --compile` 出二进制,并构建 `sandbox-policy.node`,运行时 `debian:trixie-slim` + gosu + postgresql-client + 静态 ffprobe,root 启动修 `/data` 属主后降权到 PUID(缺省 10001)。
|
||||
- 入口 `docker/entrypoint.sh`:迁移 → 自检 → 同时起 api、worker、worker:agent 三个进程;任一退出则停掉其余并以非 0 退出,由 `restart: unless-stopped` 拉起。
|
||||
- 主进程使用非 root 用户和只读的 `/app` 产物;外部字节解析另起子进程,由原生 seccomp 策略限制文件、网络与进程访问。镜像带静态 ffprobe;运行期写入落在 `DATA_DIR`(容器内 `/data`)。完整部署说明见 [deploy.md](deploy.md)。
|
||||
- 构建版本号:`APP_VERSION=v0.1.0 docker compose build`(写入 web 的 `version.json`)。
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
|
||||
规格:`docs/design/site-center.md`。实现:`apps/server/src/modules/sources-identity/service/account.ts`(凭证、刷新登录、用户数据、健康检测、删除、定时任务)、`routes/sources.ts`、`runtime.ts`(凭证注入、站点默认、代理);账密登录 `packages/adapters/src/sites/login/nexusphp.ts`;迁移 `0031_site_center`。
|
||||
|
||||
2026-11-06 按 MoviePilot v3.2.4 同步公开站点框架,具体范围与偏离见 [移植账本](../porting/mp-sync-ledger.md)。Milkie 作为手写 API 定义登记,需要 API Key,缺省未启用;未进行真实账号验收的站点不会因此自动启用。
|
||||
|
||||
搜索、列表、详情、种子下载与 M-Team 字幕共用站点出口、账号 UA 和 `site:<数据库 ID>` 的 PG 限流桶。远端明确频控保留原因并顺延同一桶;不会把限流记作凭据失效。M-Team 的 `config.apiBaseUrl` 优先于定义默认 API 基址;用户数据解析也读取该配置及定义的 `api_url`,`config.userdataPath` 可指定用户信息页。账号校验保留只使用声明 schema 的行为,公用用户数据刷新入口只在 Gazelle、NexusPHP、Unit3D 间回退。
|
||||
|
||||
## 站点类型与获取方式(IA-2,迁移 `0055_site_kind`)
|
||||
|
||||
- `site.kind`:`pt`(PT 站,从站点定义库选)/ `public_bt`(公开 BT 站,不登录)/ `rss_feed`(自定义 RSS 源,只有 RSS)/ `torznab`(Jackett、Prowlarr 等的 Torznab 接口,**只定义结构**:`TorznabSiteConfig{apiUrl, apiKeySecretRef, indexerId, categories}`,不能添加、不参与调度)。定义在 `packages/contracts/src/sources.ts` 的 `SITE_KINDS`。
|
||||
|
||||
@@ -108,7 +108,7 @@ PATCH /api/v1/settings {"storage":{"retentionDays":{"observation":60}}}
|
||||
| `scheduled_job_run` | 不按天数:每个任务只留最近 50 次(`trimRuns`,原有) | — |
|
||||
| `cache_stat` | 不按天数:写入统计时顺带删 30 天前的行(原有) | — |
|
||||
|
||||
引擎语义核对(openworkflow 0.10.1):run 幂等键只在 24 小时内去重(`DEFAULT_RUN_IDEMPOTENCY_PERIOD_MS`),
|
||||
引擎语义核对(openworkflow 0.11.0):run 幂等键只在 24 小时内去重(`DEFAULT_RUN_IDEMPOTENCY_PERIOD_MS`),
|
||||
认领 / 恢复只看 pending / running / sleeping,父 run 在 step 里等子 run 时读子 run 状态。
|
||||
所以删 14 天前的终态 run 不影响去重与恢复;父 run 未结束的子 run 保留。业务侧去重看 `task` 表(`kind + idempotency_key`)
|
||||
与 `enqueueSweep` 的时间槽,不依赖引擎旧 run。
|
||||
|
||||
Reference in new issue
Block a user