# 测试环境依赖编排 # # 用途:为本地开发与 CI 提供一致的后端依赖(PostgreSQL、Redis、Elasticsearch)。 # 不包含后端/网关/前端服务本身,由 Playwright global-setup 或 CI 流水线另行启动。 # # 使用方法: # docker-compose -f docker-compose.test.yml up -d # cd gym-manage-api && mvn clean package -DskipTests # cd gym-manage-web && pnpm test:e2e:smoke # # 注意: # - 本文件使用非标准本地端口(5433/6380/9201),避免与宿主机其他服务冲突。 # - 如需在同一台机器同时运行开发环境和测试环境,请确保端口不冲突。 # - 端口变更需同步修改 application-e2e.yml 与 e2e/global-teardown.ts。 services: postgres: image: postgres:15-alpine container_name: gym-postgres-test environment: TZ: Asia/Shanghai LANG: zh_CN.UTF-8 POSTGRES_DB: manage_system POSTGRES_USER: postgres POSTGRES_PASSWORD: 123456 POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=zh_CN.UTF-8" ports: - "5433:5432" volumes: - postgres_test_data:/var/lib/postgresql/data # 注意:不在这里直接挂载 Flyway 迁移脚本; # 数据库表结构由后端应用启动时的 Flyway 自动迁移(application-e2e.yml)。 healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d manage_system"] interval: 5s timeout: 5s retries: 10 start_period: 10s networks: - gym-test-network redis: image: redis:7-alpine container_name: gym-redis-test environment: TZ: Asia/Shanghai ports: - "6380:6379" command: redis-server --appendonly yes --requirepass gym123 healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 10 start_period: 5s networks: - gym-test-network elasticsearch: image: elasticsearch:8.17.0 container_name: gym-elasticsearch-test environment: TZ: Asia/Shanghai discovery.type: single-node xpack.security.enabled: "false" xpack.security.enrollment.enabled: "false" ES_JAVA_OPTS: "-Xms512m -Xmx512m" ports: - "9201:9200" volumes: - elasticsearch_test_data:/usr/share/elasticsearch/data healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:9200/_cluster/health || exit 1"] interval: 10s timeout: 5s retries: 10 start_period: 30s networks: - gym-test-network volumes: postgres_test_data: elasticsearch_test_data: networks: gym-test-network: driver: bridge