version: '3.8' services: # HashiCorp Vault server for E2E testing vault: image: hashicorp/vault:1.15 container_name: foxhunt-vault-test cap_add: - IPC_LOCK command: - vault - server - -dev - -dev-root-token-id=vault-root-token - -dev-listen-address=0.0.0.0:8200 environment: VAULT_DEV_ROOT_TOKEN_ID: vault-root-token VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:8200" VAULT_ADDR: "http://0.0.0.0:8200" ports: - "8200:8200" volumes: - vault-data:/vault/data - ./fixtures/vault-config:/vault/config:ro networks: - foxhunt-test healthcheck: test: ["CMD", "vault", "status"] interval: 5s timeout: 3s retries: 5 start_period: 10s # Vault initialization container for PKI setup vault-init: image: hashicorp/vault:1.15 container_name: foxhunt-vault-init depends_on: vault: condition: service_healthy environment: VAULT_ADDR: "http://vault:8200" VAULT_TOKEN: vault-root-token volumes: - ./fixtures/vault-setup:/scripts:ro command: ["/scripts/setup-vault.sh"] networks: - foxhunt-test restart: "no" # PostgreSQL for configuration system postgres: image: postgres:15 container_name: foxhunt-postgres-test environment: POSTGRES_DB: foxhunt_test POSTGRES_USER: foxhunt POSTGRES_PASSWORD: test_password ports: - "5433:5432" volumes: - postgres-data:/var/lib/postgresql/data - ../../../migrations:/docker-entrypoint-initdb.d:ro networks: - foxhunt-test healthcheck: test: ["CMD-SHELL", "pg_isready -U foxhunt -d foxhunt_test"] interval: 5s timeout: 5s retries: 5 # Redis for caching and pub/sub redis: image: redis:7-alpine container_name: foxhunt-redis-test ports: - "6380:6379" networks: - foxhunt-test healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 5 # TLI service for testing Vault integration tli-service: build: context: ../../.. dockerfile: tli/Dockerfile container_name: foxhunt-tli-test depends_on: vault-init: condition: service_completed_successfully postgres: condition: service_healthy redis: condition: service_healthy environment: VAULT_ADDR: "http://vault:8200" VAULT_ROLE_ID: "test-role-id" DATABASE_URL: "postgresql://foxhunt:test_password@postgres:5432/foxhunt_test" REDIS_URL: "redis://redis:6379" RUST_LOG: debug FOXHUNT_ENV: test volumes: - ./fixtures/vault-certs:/opt/foxhunt/certs - ./fixtures/vault-secrets:/opt/foxhunt/vault networks: - foxhunt-test ports: - "50051:50051" # gRPC port - "3000:3000" # HTTP dashboard restart: unless-stopped # Trading service for multi-service testing trading-service: build: context: ../../.. dockerfile: Dockerfile target: trading-service container_name: foxhunt-trading-test depends_on: vault-init: condition: service_completed_successfully postgres: condition: service_healthy redis: condition: service_healthy environment: VAULT_ADDR: "http://vault:8200" VAULT_ROLE_ID: "test-role-id" DATABASE_URL: "postgresql://foxhunt:test_password@postgres:5432/foxhunt_test" REDIS_URL: "redis://redis:6379" RUST_LOG: debug FOXHUNT_ENV: test volumes: - ./fixtures/vault-certs:/opt/foxhunt/certs - ./fixtures/vault-secrets:/opt/foxhunt/vault networks: - foxhunt-test ports: - "50052:50051" # gRPC port restart: unless-stopped # Network proxy for simulating network failures toxiproxy: image: ghcr.io/shopify/toxiproxy:2.5.0 container_name: foxhunt-toxiproxy-test ports: - "8474:8474" # API port - "8201:8201" # Proxied Vault port networks: - foxhunt-test command: ["-host", "0.0.0.0", "-config", "/config/toxiproxy.json"] volumes: - ./fixtures/toxiproxy:/config:ro volumes: vault-data: driver: local postgres-data: driver: local networks: foxhunt-test: driver: bridge name: foxhunt-test-network