# ============================================ # 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