# Sub2API 测试环境 Docker Compose 配置 # 用于本地测试和CI/CD中的集成测试 version: '3.8' services: # PostgreSQL 测试数据库 postgres: image: postgres:15-alpine container_name: sub2api-test-postgres environment: POSTGRES_USER: test POSTGRES_PASSWORD: test POSTGRES_DB: sub2api_test ports: - "5432:5432" volumes: - postgres_test_data:/var/lib/postgresql/data - ./backend/migrations:/docker-entrypoint-initdb.d healthcheck: test: ["CMD-SHELL", "pg_isready -U test -d sub2api_test"] interval: 5s timeout: 5s retries: 5 networks: - sub2api-test # Redis 测试缓存 redis: image: redis:7-alpine container_name: sub2api-test-redis ports: - "6379:6379" command: redis-server --appendonly yes volumes: - redis_test_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 5 networks: - sub2api-test # 后端服务 (测试模式) backend: build: context: ./backend dockerfile: Dockerfile.test container_name: sub2api-test-backend environment: - ENV=test - DB_HOST=postgres - DB_PORT=5432 - DB_USER=test - DB_PASSWORD=test - DB_NAME=sub2api_test - REDIS_HOST=redis - REDIS_PORT=6379 - JWT_SECRET=test-jwt-secret-for-testing-only - ENCRYPTION_KEY=test-encryption-key-32bytes!! - LOG_LEVEL=debug ports: - "8080:8080" depends_on: postgres: condition: service_healthy redis: condition: service_healthy volumes: - ./backend:/app - go_mod_cache:/go/pkg/mod networks: - sub2api-test command: ["go", "run", "./cmd/server"] # 前端服务 (测试构建) frontend: build: context: ./frontend dockerfile: Dockerfile.test container_name: sub2api-test-frontend environment: - NODE_ENV=test - VITE_API_URL=http://localhost:8080 ports: - "3000:3000" volumes: - ./frontend:/app - node_modules_cache:/app/node_modules networks: - sub2api-test command: ["npm", "run", "preview"] # InfluxDB (性能测试数据存储) influxdb: image: influxdb:2.7-alpine container_name: sub2api-test-influxdb environment: - INFLUXDB_DB=k6 - INFLUXDB_ADMIN_USER=admin - INFLUXDB_ADMIN_PASSWORD=admin123 - INFLUXDB_HTTP_AUTH_ENABLED=false ports: - "8086:8086" volumes: - influxdb_data:/var/lib/influxdb2 networks: - sub2api-test # Grafana (性能测试可视化) grafana: image: grafana/grafana:latest container_name: sub2api-test-grafana environment: - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin ports: - "3001:3000" volumes: - ./tests/performance/grafana:/etc/grafana/provisioning - grafana_data:/var/lib/grafana depends_on: - influxdb networks: - sub2api-test # MinIO (对象存储测试) minio: image: minio/minio:latest container_name: sub2api-test-minio environment: - MINIO_ROOT_USER=minioadmin - MINIO_ROOT_PASSWORD=minioadmin ports: - "9000:9000" - "9001:9001" volumes: - minio_data:/data command: server /data --console-address ":9001" networks: - sub2api-test # MailHog (邮件测试) mailhog: image: mailhog/mailhog:latest container_name: sub2api-test-mailhog ports: - "1025:1025" # SMTP - "8025:8025" # Web UI networks: - sub2api-test volumes: postgres_test_data: redis_test_data: go_mod_cache: node_modules_cache: influxdb_data: grafana_data: minio_data: networks: sub2api-test: driver: bridge