fix(docker): manage local postgres in default compose

This commit is contained in:
caoxiaozhu
2026-07-17 22:50:02 +08:00
parent 787bc3a481
commit 07241b4648
6 changed files with 249 additions and 37 deletions

View File

@@ -0,0 +1,15 @@
# 默认 Compose 未统一管理本地 PostgreSQL
日期2026-07-17
文档路径document/development/2026-07-17/dev-logs/bugs/default-compose-local-postgres-lifecycle.md
## 修复记录
- 22:47记录 bug 修复:默认 Compose 未统一管理本地 PostgreSQL。bug-log:787bc3a4
- Git 提交检查fetch 成功upstream `origin/main`upstream 新提交:未发现;本地 ahead 提交787bc3a4 (HEAD -> main) feat(platform): close AI expense value loop242d68c3 feat(approval): add task workflow and waiver decisions28b834ed fix(approval): replay immutable action responses4940ebc4 feat(approval): add safe risk disposition workflowee88a36b feat(ai): add tenant-safe hierarchical expense learning6bdf65bc feat(expenses): add authoritative pre-review workflowae3f02c3 feat(expense): add persistent zero-entry receipt association54754b55 feat(ai): add personal expense application memory... 另有 10 条。
- 修改:`docker-compose.yml` 将 PostgreSQL、健康依赖、本机端口和持久卷并入默认启动链路本地数据库插值改用独立的 `LOCAL_POSTGRES_*` 命名空间,避免根 `.env` 的外部数据库账号污染 Compose`docker-compose.postgres.yml` 保留为空兼容覆盖文件。
- 修改:`start.sh``server_start.sh` 在读取 `.env` 前保存并在读取后恢复完整 PostgreSQL 运行参数,保证 Compose 注入的 host、port、database、user、password 和 URL 始终优先;`test_env_file_precedence.py` 增加根脚本、后端脚本和默认 Compose 回归。
- 操作:先将旧库备份到 `/tmp/x-financial-local-pre-compose-20260717.dump`,再把旧卷只读复制到 Compose 管理的 `x-financial_postgres-data`;旧卷未删除。统一本地开发角色凭据后执行 `docker compose up -d`,迁移前置检查从 `unversioned/base` 通过并升级到 `20260717_0028`
- 过程披露:第一次 Compose 重建暴露环境优先级问题时,主容器仍沿用了根 `.env` 指向的外部数据库,并按既有启动流程将其从 `20260716_0006` 升级到 `20260717_0028`;迁移日志无失败,未对外部库执行回滚。修复后已确认当前主容器只连接本地 PostgreSQL 容器。
- 验证:容器内定向测试 `107 passed`Ruff、格式、两个 shell 脚本语法、默认/兼容 Compose 配置和 `git diff --check` 均通过;重复执行 `docker compose up -d` 只保持两个服务运行,没有创建额外容器。
- 验证:`main``postgres` 均为 healthy前端代理健康接口返回数据库 `ok=true`;应用实际连接 PostgreSQL 容器地址;本地库为 85 张 public 表、105 条员工数据、Alembic head `20260717_0028`PostgreSQL 日志无 FATAL/ERROR/PANIC。
- 影响:以后在仓库根目录执行一次默认 `docker compose up -d` 即可同时启动应用和本地数据库,并复用 Compose 管理的数据卷;外部数据库 `.env` 配置不再悄悄覆盖本地 Compose 连接。