Files
tokens-reef/docker-compose.test.yml

166 lines
3.8 KiB
YAML
Raw Permalink Normal View History

# 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