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:
+1
-1
@@ -54,4 +54,4 @@ HTTPS_PORT=443
|
||||
|
||||
# ── 部署 ──
|
||||
DEPLOY_ENV=prod
|
||||
PROJECT_NAME=FastapiAdmin
|
||||
PROJECT_NAME=dpb
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# ============================================
|
||||
# FastapiAdmin Docker Compose 配置文件
|
||||
# DPB Docker Compose 配置文件
|
||||
# ============================================
|
||||
# 使用方式:
|
||||
# 开发环境: docker compose --env-file .env up -d
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# ============================================
|
||||
# FastapiAdmin Nginx 配置文件
|
||||
# DPB Nginx 配置文件
|
||||
# ============================================
|
||||
|
||||
# 自动检测 CPU 核心数,多核服务器自动利用所有核心
|
||||
|
||||
@@ -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/tests:DATABASE_NAME=dpb_test(conftest 自动建库)
|
||||
# # 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_test(docker-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
|
||||
@@ -0,0 +1,3 @@
|
||||
-- 测试库:冒烟层(backend/tests)专用,与开发库 dpb 隔离
|
||||
-- postgres:16 镜像首次初始化时执行本脚本(/docker-entrypoint-initdb.d/)
|
||||
CREATE DATABASE dpb_test;
|
||||
Reference in New Issue
Block a user