miroir/examples/docker-compose-dev-rf2.yml
jedarden 32bda26613 P9.2: Integration test harness with docker-compose
Implement integration test suite for Miroir with docker-compose:

- Updated docker-compose-dev.yml to use Meilisearch v1.37.0
- Created tests/integration.rs with comprehensive test coverage:
  * Document round-trip (1000 docs)
  * Search coverage across all shards (unique-keyword test)
  * Facet aggregation (3 colors, sum = 100)
  * Offset/limit paging
  * Settings broadcast
  * Task polling
  * Health check
  * Node failure test with RF=2
- Created docker-compose-dev-rf2.yml for RF=2/HA testing (6 nodes)
- Created dev-config-rf2.yaml for RF=2 configuration
- Created tests/README.md with documentation

Tests run against real Docker Compose stack:
  cargo test --test integration -- --test-threads=1

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 07:26:55 -04:00

172 lines
4.6 KiB
YAML

# Miroir development stack — 6 Meilisearch nodes + 1 Miroir orchestrator (RF=2, RG=2)
# For testing node failure and high availability scenarios
# Quick start: docker compose -f examples/docker-compose-dev-rf2.yml up -d
services:
# Meilisearch node 0 (shard replica group 0)
meili-0:
image: getmeili/meilisearch:v1.37.0
container_name: miroir-meili-0
environment:
- MEILI_ENV=development
- MEILI_MASTER_KEY=dev-node-key
- MEILI_NO_ANALYTICS=true
ports:
- "7701:7700"
volumes:
- meili-0-data-rf2:/meili_data
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7700/health"]
interval: 5s
timeout: 2s
retries: 3
# Meilisearch node 1 (shard replica group 0)
meili-1:
image: getmeili/meilisearch:v1.37.0
container_name: miroir-meili-1
environment:
- MEILI_ENV=development
- MEILI_MASTER_KEY=dev-node-key
- MEILI_NO_ANALYTICS=true
ports:
- "7702:7700"
volumes:
- meili-1-data-rf2:/meili_data
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7700/health"]
interval: 5s
timeout: 2s
retries: 3
# Meilisearch node 2 (shard replica group 0)
meili-2:
image: getmeili/meilisearch:v1.37.0
container_name: miroir-meili-2
environment:
- MEILI_ENV=development
- MEILI_MASTER_KEY=dev-node-key
- MEILI_NO_ANALYTICS=true
ports:
- "7703:7700"
volumes:
- meili-2-data-rf2:/meili_data
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7700/health"]
interval: 5s
timeout: 2s
retries: 3
# Meilisearch node 3 (shard replica group 1)
meili-3:
image: getmeili/meilisearch:v1.37.0
container_name: miroir-meili-3
environment:
- MEILI_ENV=development
- MEILI_MASTER_KEY=dev-node-key
- MEILI_NO_ANALYTICS=true
ports:
- "7704:7700"
volumes:
- meili-3-data-rf2:/meili_data
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7700/health"]
interval: 5s
timeout: 2s
retries: 3
# Meilisearch node 4 (shard replica group 1)
meili-4:
image: getmeili/meilisearch:v1.37.0
container_name: miroir-meili-4
environment:
- MEILI_ENV=development
- MEILI_MASTER_KEY=dev-node-key
- MEILI_NO_ANALYTICS=true
ports:
- "7705:7700"
volumes:
- meili-4-data-rf2:/meili_data
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7700/health"]
interval: 5s
timeout: 2s
retries: 3
# Meilisearch node 5 (shard replica group 1)
meili-5:
image: getmeili/meilisearch:v1.37.0
container_name: miroir-meili-5
environment:
- MEILI_ENV=development
- MEILI_MASTER_KEY=dev-node-key
- MEILI_NO_ANALYTICS=true
ports:
- "7706:7700"
volumes:
- meili-5-data-rf2:/meili_data
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7700/health"]
interval: 5s
timeout: 2s
retries: 3
# Redis task store for multi-replica deployments
redis:
image: redis:7-alpine
container_name: miroir-redis-rf2
ports:
- "6379:6379"
volumes:
- redis-data-rf2:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 2s
retries: 3
# Miroir orchestrator
miroir:
build:
context: ..
dockerfile: Dockerfile
image: miroir-dev-rf2:latest
container_name: miroir-orchestrator-rf2
environment:
- MIROIR_MASTER_KEY=dev-key
- MIROIR_NODE_MASTER_KEY=dev-node-key
ports:
- "7710:7700"
volumes:
- ../examples/dev-config-rf2.yaml:/etc/miroir/config.yaml:ro
- miroir-data-rf2:/data
depends_on:
meili-0:
condition: service_healthy
meili-1:
condition: service_healthy
meili-2:
condition: service_healthy
meili-3:
condition: service_healthy
meili-4:
condition: service_healthy
meili-5:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7700/health"]
interval: 5s
timeout: 2s
retries: 3
volumes:
meili-0-data-rf2:
meili-1-data-rf2:
meili-2-data-rf2:
meili-3-data-rf2:
meili-4-data-rf2:
meili-5-data-rf2:
miroir-data-rf2:
redis-data-rf2: