fix: P4T1审查修复(platform.db入data卷/tzdata注释/corepack钉版/compose版本注记)

- main.py: PLATFORM_DB 挪到 <repo>/data/platform.db——data/ 是 compose
  bind mount,容器/镜像重建不再丢租户注册表;lifespan 对父目录兜底
  mkdir(冷机 data/ 不存在,sqlite 不建父目录)。bootstrap 脚本 --db
  默认值同步锚定 data/。
- 新测试 test_platform_db_defaults_into_data_dir: 常量形状钉死(回退
  仓库根即红)+ 冷机形态下 lifespan 建库于 data/ 内(全量 603)。
- Dockerfile: corepack 钉实测通过的具体版本 0.36.0(不追 latest,构建
  可复现);tzdata 注释照实改写(trixie slim 实测已自带,安装留作基
  镜像漂移保险)。
- docker-compose: 头注释改准确(tenants/=租户库,data/=platform.db+
  uploads);env_file 注记对象式写法需 Docker Compose >= 2.24。
- 实证: compose down/up 重建容器后宿主 ./data/platform.db 仍在,
  healthcheck healthy,/admin/ 200;docker compose build 复验通过。

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-10-14 08:42:50 +08:00
parent 4f38522759
commit 6100b4eb15
5 changed files with 51 additions and 17 deletions
+21
View File
@@ -200,6 +200,27 @@ def test_main_default_db_source_empty_platform_boots(tmp_path, monkeypatch):
assert app.state.registry.runtimes() == () # 空注册表不炸
def test_platform_db_defaults_into_data_dir(tmp_path, monkeypatch):
"""PLATFORM_DB 落 <repo>/data/(P4T1 审查修复):data/ 是 compose 的
bind mount——容器/镜像重建不再丢租户注册表。两层断言:
1. 常量形状钉死(回退仓库根即红,compose 持久化前提);
2. 功能:锚到 tmp 的 data/ 子目录(目录刻意不预建=冷机形态),
lifespan 启动后平台库文件确实建在 data/ 内(父目录兜底 mkdir)。"""
import app.main as main_mod
assert main_mod.PLATFORM_DB == main_mod.BASE_DIR / "data" / "platform.db"
target = tmp_path / "data" / "platform.db"
assert not target.parent.exists() # 冷机:data/ 尚不存在
monkeypatch.setattr(main_mod, "PLATFORM_DB", target)
monkeypatch.setattr(main_mod, "TENANTS_DIR", tmp_path / "tenants")
monkeypatch.delenv("TENANT_SOURCE", raising=False)
with app_test_client(main_mod.app, "http://testserver", tmp_path) as c:
assert c.get("/health").status_code == 200
# 断言须在 client 存活期内:app_test_client 退出时会清掉整个 tmp
# (含本文件)——文件在应用运行中确实存在即为所证
assert target.exists() # lifespan 建库于 data/ 内
def test_main_default_db_source_bootstrapped_platform(tmp_path, monkeypatch):
"""默认 db + bootstrap 导入后的 platform.db:启动即装配两租户(registry
经 async load_all),jiancai 域名真实请求走通(Host 中间件→懒建租户库