version: '3.8' services: # 测试数据库 - PostgreSQL test-postgres: image: postgres:15-alpine container_name: test-postgres environment: POSTGRES_DB: ${TEST_DB_NAME:-everything_test} POSTGRES_USER: ${TEST_DB_USER:-test_user} POSTGRES_PASSWORD: ${TEST_DB_PASSWORD:-test_password} POSTGRES_INITDB_ARGS: "-E UTF8" TZ: Asia/Shanghai ports: - "${TEST_DB_PORT:-5433}:5432" volumes: - test-postgres-data:/var/lib/postgresql/data - ./scripts/init-test-db.sql:/docker-entrypoint-initdb.d/init-test-db.sql:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U ${TEST_DB_USER:-test_user}"] interval: 10s timeout: 5s retries: 5 start_period: 20s networks: - test-network # 测试缓存 - Redis test-redis: image: redis:7-alpine container_name: test-redis ports: - "${TEST_REDIS_PORT:-6380}:6379" volumes: - test-redis-data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 start_period: 10s networks: - test-network # 测试应用 - API Gateway test-api-gateway: build: context: ./everything-is-suitable-api/everything-is-suitable-app dockerfile: Dockerfile container_name: test-api-gateway environment: SPRING_PROFILES_ACTIVE: test SPRING_DATASOURCE_URL: jdbc:postgresql://test-postgres:5432/${TEST_DB_NAME:-everything_test} SPRING_DATASOURCE_USERNAME: ${TEST_DB_USER:-test_user} SPRING_DATASOURCE_PASSWORD: ${TEST_DB_PASSWORD:-test_password} SPRING_REDIS_HOST: test-redis SPRING_REDIS_PORT: 6379 SERVER_PORT: 8080 TZ: Asia/Shanghai ports: - "${TEST_API_PORT:-8081}:8080" depends_on: test-postgres: condition: service_healthy test-redis: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: - test-network # 测试应用 - Admin Backend test-admin-backend: build: context: ./everything-is-suitable-api/everything-is-suitable-admin-app dockerfile: Dockerfile container_name: test-admin-backend environment: SPRING_PROFILES_ACTIVE: test SPRING_DATASOURCE_URL: jdbc:postgresql://test-postgres:5432/${TEST_DB_NAME:-everything_test} SPRING_DATASOURCE_USERNAME: ${TEST_DB_USER:-test_user} SPRING_DATASOURCE_PASSWORD: ${TEST_DB_PASSWORD:-test_password} SPRING_REDIS_HOST: test-redis SPRING_REDIS_PORT: 6379 SERVER_PORT: 8081 TZ: Asia/Shanghai ports: - "${TEST_ADMIN_PORT:-8082}:8081" depends_on: test-postgres: condition: service_healthy test-redis: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8081/actuator/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: - test-network # 测试数据管理工具 test-data-manager: build: context: . dockerfile: Dockerfile.test-data-manager container_name: test-data-manager environment: DB_HOST: test-postgres DB_PORT: 5432 DB_NAME: ${TEST_DB_NAME:-everything_test} DB_USER: ${TEST_DB_USER:-test_user} DB_PASSWORD: ${TEST_DB_PASSWORD:-test_password} API_URL: http://test-api-gateway:8080 ADMIN_API_URL: http://test-admin-backend:8081 TZ: Asia/Shanghai volumes: - ./test-data:/app/test-data - ./test-data/scripts:/app/scripts:ro depends_on: test-postgres: condition: service_healthy test-api-gateway: condition: service_healthy test-admin-backend: condition: service_healthy networks: - test-network profiles: - data-manager # 测试监控 - Prometheus test-prometheus: image: prom/prometheus:latest container_name: test-prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/usr/share/prometheus/console_libraries' - '--web.console.templates=/usr/share/prometheus/consoles' - '--web.enable-lifecycle' ports: - "${TEST_PROMETHEUS_PORT:-9091}:9090" volumes: - ./test-monitoring/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro - test-prometheus-data:/prometheus depends_on: - test-api-gateway - test-admin-backend networks: - test-network profiles: - monitoring # 测试监控 - Grafana test-grafana: image: grafana/grafana:latest container_name: test-grafana environment: GF_SECURITY_ADMIN_USER: ${GRAFANA_ADMIN_USER:-admin} GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD:-admin} GF_USERS_ALLOW_SIGN_UP: "false" GF_INSTALL_PLUGINS: "grafana-piechart-panel" ports: - "${TEST_GRAFANA_PORT:-3001}:3000" volumes: - test-grafana-data:/var/lib/grafana - ./test-monitoring/grafana/provisioning:/etc/grafana/provisioning:ro - ./test-monitoring/grafana/dashboards:/var/lib/grafana/dashboards:ro depends_on: - test-prometheus networks: - test-network profiles: - monitoring networks: test-network: driver: bridge volumes: test-postgres-data: driver: local test-redis-data: driver: local test-prometheus-data: driver: local test-grafana-data: driver: local