checkpoint: 架构治理四件套——统一 async / 测试真 PG / Redis 降级可选 / DPB 扶正

- A1 业务层统一 async:gencode 表内省改 run_sync 异步(不再阻塞事件循环)、
  check_db 改 async_engine、dict_util 启动预热异步载入;psycopg 降为
  APScheduler SQLAlchemyJobStore 专用同步孤岛(注释标注)
- A2 测试真 PG 化:conftest 弃 SQLite + mock Redis,改连真实 PG16(dpb_test)+
  Redis(number_gen advisory lock 路径真被测);新增 docker/test-compose.yaml
  测试依赖栈(postgres:16:5433 + redis:7:6380);run_ci 前置探测 + 容器兜底,
  pytest -m pg 10 套正式 tc 全过(真实 PG16 + Redis)
- B1 Redis 启动不强依赖:redis_connect 失败降级启动,缓存类回源 DB、存储类
  (会话/AI 配置/调度)经 require_redis 守卫返回 503;真机 3 阶段降级测试
  PASS=11 FAIL=0(独立 Redis 6390 + 后端 8091,不动共享 dev 服务)
- C 扶正 DPB:后端横幅/日志(dpb.log)/README/pyproject/ai_factory agent 名、
  前端 package.json/署名注释/链接文案/deploy.sh/docker 注释全部去 fastapiadmin;
  grep backend/app + frontend/web/src 零残留
- 验证:全量回归 pass=72 fail=0
This commit is contained in:
34047007@qq.com
2026-08-07 09:06:19 +08:00
parent e937fc930c
commit 86126ea16f
64 changed files with 546 additions and 359 deletions
+1 -1
View File
@@ -54,4 +54,4 @@ HTTPS_PORT=443
# ── 部署 ──
DEPLOY_ENV=prod
PROJECT_NAME=FastapiAdmin
PROJECT_NAME=dpb
+1 -1
View File
@@ -1,5 +1,5 @@
# ============================================
# FastapiAdmin Docker Compose 配置文件
# DPB Docker Compose 配置文件
# ============================================
# 使用方式:
# 开发环境: docker compose --env-file .env up -d
+1 -1
View File
@@ -1,5 +1,5 @@
# ============================================
# FastapiAdmin Nginx 配置文件
# DPB Nginx 配置文件
# ============================================
# 自动检测 CPU 核心数,多核服务器自动利用所有核心
+56
View File
@@ -0,0 +1,56 @@
# ============================================
# DPB 测试依赖 compose —— 供 CI / 本地验收起 PostgreSQL16 + Redis
# ============================================
# 用途:架构治理 A2「测试真 PG 化」。冒烟层(backend/tests)与统计引擎 tc 套件
# 都基于真实 PG + Redis;本栈在隔离端口起容器,避免与宿主机常驻服务(本地 PG
# 5432 / WSL redis 6379)冲突。
#
# 使用方式(在 docker/ 目录):
# docker compose -f test-compose.yaml up -d
# # 后端测试连接默认走 TC_CI_* 覆盖(端口与本栈一致):
# # backend/testsDATABASE_NAME=dpb_testconftest 自动建库)
# # TC_CI_DB_PORT=5433 TC_CI_REDIS_PORT=6380
# # TC_CI_DB_NAME=dpb_test TC_CI_DB_USER=dpb TC_CI_DB_PASSWORD=dpb
# docker compose -f test-compose.yaml down
#
# 无持久化卷:每次 up 都是全新实例,测试库从 init 脚本重建,天然隔离。
# ============================================
services:
postgres:
container_name: dpb-test-postgres
image: postgres:16
restart: "no"
environment:
TZ: "Asia/Shanghai"
POSTGRES_DB: "dpb"
POSTGRES_USER: "${TEST_DB_USER:-dpb}"
POSTGRES_PASSWORD: "${TEST_DB_PASSWORD:-dpb}"
# 仅绑定本机回环;宿主常驻 PG 已占 5432,故测试栈用 5433
ports:
- "127.0.0.1:${TEST_DB_PORT:-5433}:5432"
# 首次初始化时创建测试库 dpb_testdocker-entrypoint 会执行 initdb.d 下脚本)
volumes:
- ./test-initdb/01-create-test-db.sql:/docker-entrypoint-initdb.d/01-create-test-db.sql:ro
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${TEST_DB_USER:-dpb} -d dpb"]
interval: 5s
timeout: 5s
retries: 12
start_period: 15s
redis:
container_name: dpb-test-redis
image: redis:7-alpine
restart: "no"
environment:
TZ: "Asia/Shanghai"
# 宿主/WSL 常驻 redis 已占 6379,故测试栈用 6380;无密码(与 dev .env 一致)
ports:
- "127.0.0.1:${TEST_REDIS_PORT:-6380}:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 5s
retries: 12
start_period: 10s
+3
View File
@@ -0,0 +1,3 @@
-- 测试库:冒烟层(backend/tests)专用,与开发库 dpb 隔离
-- postgres:16 镜像首次初始化时执行本脚本(/docker-entrypoint-initdb.d/
CREATE DATABASE dpb_test;