services: # Master cluster for coordination and metadata master0: image: chrislusf/seaweedfs:local container_name: test-master0 ports: - "19333:9333" - "29333:19333" command: > -v=1 master -volumeSizeLimitMB=100 -resumeState=false -ip=master0 -port=9333 -peers=master0:9333,master1:9334,master2:9335 -mdir=/tmp/master0 environment: WEED_MASTER_VOLUME_GROWTH_COPY_1: 1 WEED_MASTER_VOLUME_GROWTH_COPY_2: 2 WEED_MASTER_VOLUME_GROWTH_COPY_OTHER: 1 networks: - seaweedmq-test healthcheck: test: ["CMD", "wget", "-q", "--spider", "http://master0:9333/cluster/status"] interval: 10s timeout: 5s retries: 3 master1: image: chrislusf/seaweedfs:local container_name: test-master1 ports: - "19334:9334" - "29334:19334" command: > -v=1 master -volumeSizeLimitMB=100 -resumeState=false -ip=master1 -port=9334 -peers=master0:9333,master1:9334,master2:9335 -mdir=/tmp/master1 environment: WEED_MASTER_VOLUME_GROWTH_COPY_1: 1 WEED_MASTER_VOLUME_GROWTH_COPY_2: 2 WEED_MASTER_VOLUME_GROWTH_COPY_OTHER: 1 networks: - seaweedmq-test depends_on: - master0 master2: image: chrislusf/seaweedfs:local container_name: test-master2 ports: - "19335:9335" - "29335:19335" command: > -v=1 master -volumeSizeLimitMB=100 -resumeState=false -ip=master2 -port=9335 -peers=master0:9333,master1:9334,master2:9335 -mdir=/tmp/master2 environment: WEED_MASTER_VOLUME_GROWTH_COPY_1: 1 WEED_MASTER_VOLUME_GROWTH_COPY_2: 2 WEED_MASTER_VOLUME_GROWTH_COPY_OTHER: 1 networks: - seaweedmq-test depends_on: - master0 # Volume servers for data storage volume1: image: chrislusf/seaweedfs:local container_name: test-volume1 ports: - "18080:8080" - "28080:18080" volumes: - volume1-data:/data/volume1 entrypoint: ["/bin/sh", "-c"] command: > "mkdir -p /data/volume1 && exec weed -v=1 volume -dataCenter=dc1 -rack=rack1 -mserver=master0:9333,master1:9334,master2:9335 -port=8080 -ip=volume1 -publicUrl=localhost:18080 -preStopSeconds=1 -dir=/data/volume1" networks: - seaweedmq-test depends_on: master0: condition: service_healthy volume2: image: chrislusf/seaweedfs:local container_name: test-volume2 ports: - "18081:8081" - "28081:18081" volumes: - volume2-data:/data/volume2 entrypoint: ["/bin/sh", "-c"] command: > "mkdir -p /data/volume2 && exec weed -v=1 volume -dataCenter=dc1 -rack=rack2 -mserver=master0:9333,master1:9334,master2:9335 -port=8081 -ip=volume2 -publicUrl=localhost:18081 -preStopSeconds=1 -dir=/data/volume2" networks: - seaweedmq-test depends_on: master0: condition: service_healthy volume3: image: chrislusf/seaweedfs:local container_name: test-volume3 ports: - "18082:8082" - "28082:18082" volumes: - volume3-data:/data/volume3 entrypoint: ["/bin/sh", "-c"] command: > "mkdir -p /data/volume3 && exec weed -v=1 volume -dataCenter=dc2 -rack=rack1 -mserver=master0:9333,master1:9334,master2:9335 -port=8082 -ip=volume3 -publicUrl=localhost:18082 -preStopSeconds=1 -dir=/data/volume3" networks: - seaweedmq-test depends_on: master0: condition: service_healthy # Filer servers for metadata filer1: image: chrislusf/seaweedfs:local container_name: test-filer1 ports: - "18888:8888" - "28888:18888" command: > -v=1 filer -defaultReplicaPlacement=100 -master=master0:9333,master1:9334,master2:9335 -port=8888 -ip=filer1 -dataCenter=dc1 networks: - seaweedmq-test depends_on: master0: condition: service_healthy healthcheck: test: ["CMD", "wget", "-q", "--spider", "http://filer1:8888/"] interval: 10s timeout: 5s retries: 3 filer2: image: chrislusf/seaweedfs:local container_name: test-filer2 ports: - "18889:8889" - "28889:18889" command: > -v=1 filer -defaultReplicaPlacement=100 -master=master0:9333,master1:9334,master2:9335 -port=8889 -ip=filer2 -dataCenter=dc2 networks: - seaweedmq-test depends_on: filer1: condition: service_healthy # Message Queue Brokers broker1: image: chrislusf/seaweedfs:local container_name: test-broker1 ports: - "17777:17777" command: > -v=1 mq.broker -master=master0:9333,master1:9334,master2:9335 -port=17777 -ip=127.0.0.1 -dataCenter=dc1 -rack=rack1 networks: - seaweedmq-test depends_on: filer1: condition: service_healthy healthcheck: test: ["CMD", "nc", "-z", "localhost", "17777"] interval: 10s timeout: 5s retries: 3 broker2: image: chrislusf/seaweedfs:local container_name: test-broker2 ports: - "17778:17778" command: > -v=1 mq.broker -master=master0:9333,master1:9334,master2:9335 -port=17778 -ip=127.0.0.1 -dataCenter=dc1 -rack=rack2 networks: - seaweedmq-test depends_on: broker1: condition: service_healthy broker3: image: chrislusf/seaweedfs:local container_name: test-broker3 ports: - "17779:17779" command: > -v=1 mq.broker -master=master0:9333,master1:9334,master2:9335 -port=17779 -ip=127.0.0.1 -dataCenter=dc2 -rack=rack1 networks: - seaweedmq-test depends_on: broker1: condition: service_healthy # Test runner container test-runner: build: context: ../../ dockerfile: test/mq/Dockerfile.test container_name: test-runner volumes: - ../../:/app - /tmp/test-results:/test-results working_dir: /app environment: - SEAWEED_MASTERS=master0:9333,master1:9334,master2:9335 - SEAWEED_BROKERS=broker1:17777,broker2:17778,broker3:17779 - SEAWEED_FILERS=filer1:8888,filer2:8889 - TEST_RESULTS_DIR=/test-results - GO_TEST_TIMEOUT=30m networks: - seaweedmq-test depends_on: broker1: condition: service_healthy broker2: condition: service_started broker3: condition: service_started command: > sh -c " echo 'Waiting for cluster to be ready...' && sleep 30 && echo 'Running integration tests...' && go test -v -timeout=30m ./test/mq/integration/... -args -test.parallel=4 " # Monitoring and metrics prometheus: image: prom/prometheus:latest container_name: test-prometheus ports: - "19090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml networks: - seaweedmq-test command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' - '--web.enable-lifecycle' grafana: image: grafana/grafana:latest container_name: test-grafana ports: - "13000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin volumes: - grafana-storage:/var/lib/grafana - ./grafana/dashboards:/etc/grafana/provisioning/dashboards - ./grafana/datasources:/etc/grafana/provisioning/datasources networks: - seaweedmq-test networks: seaweedmq-test: driver: bridge ipam: config: - subnet: 172.20.0.0/16 volumes: grafana-storage: volume1-data: volume2-data: volume3-data: