| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- services:
- # SeaweedFS Master Server
- seaweedfs-master:
- image: chrislusf/seaweedfs:latest
- container_name: seaweedfs-master
- command: master -ip=seaweedfs-master -port=9333 -mdir=/data
- ports:
- - "9333:9333"
- volumes:
- - master-data:/data
- networks:
- - seaweedfs-rdma
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:9333/cluster/status"]
- interval: 10s
- timeout: 5s
- retries: 3
- start_period: 10s
- # SeaweedFS Volume Server
- seaweedfs-volume:
- image: chrislusf/seaweedfs:latest
- container_name: seaweedfs-volume
- command: volume -mserver=seaweedfs-master:9333 -ip=seaweedfs-volume -port=8080 -dir=/data
- ports:
- - "8080:8080"
- volumes:
- - volume-data:/data
- depends_on:
- seaweedfs-master:
- condition: service_healthy
- networks:
- - seaweedfs-rdma
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:8080/status"]
- interval: 10s
- timeout: 5s
- retries: 3
- start_period: 15s
- # Rust RDMA Engine
- rdma-engine:
- build:
- context: .
- dockerfile: Dockerfile.rdma-engine.simple
- container_name: rdma-engine
- environment:
- - RUST_LOG=debug
- - RDMA_SOCKET_PATH=/tmp/rdma-engine.sock
- volumes:
- - rdma-socket:/tmp
- # Note: hugepages mount commented out to avoid host system requirements
- # - /dev/hugepages:/dev/hugepages
- # Privileged mode for RDMA access (in production, use specific capabilities)
- privileged: true
- networks:
- - seaweedfs-rdma
- command: ["./rdma-engine-server", "--debug", "--ipc-socket", "/tmp/rdma-engine.sock"]
- healthcheck:
- test: ["CMD", "test", "-S", "/tmp/rdma-engine.sock"]
- interval: 5s
- timeout: 3s
- retries: 5
- start_period: 10s
- # Go RDMA Sidecar / Demo Server
- rdma-sidecar:
- build:
- context: .
- dockerfile: Dockerfile.sidecar
- container_name: rdma-sidecar
- ports:
- - "8081:8081"
- environment:
- - RDMA_SOCKET_PATH=/tmp/rdma-engine.sock
- - VOLUME_SERVER_URL=http://seaweedfs-volume:8080
- - DEBUG=true
- volumes:
- - rdma-socket:/tmp
- depends_on:
- rdma-engine:
- condition: service_healthy
- seaweedfs-volume:
- condition: service_healthy
- networks:
- - seaweedfs-rdma
- command: [
- "./demo-server",
- "--port", "8081",
- "--rdma-socket", "/tmp/rdma-engine.sock",
- "--volume-server", "http://seaweedfs-volume:8080",
- "--enable-rdma",
- "--debug"
- ]
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:8081/health"]
- interval: 10s
- timeout: 5s
- retries: 3
- start_period: 15s
- # Test Client for Integration Testing
- test-client:
- build:
- context: .
- dockerfile: Dockerfile.test-client
- container_name: test-client
- environment:
- - RDMA_SOCKET_PATH=/tmp/rdma-engine.sock
- - SIDECAR_URL=http://rdma-sidecar:8081
- - SEAWEEDFS_MASTER=http://seaweedfs-master:9333
- - SEAWEEDFS_VOLUME=http://seaweedfs-volume:8080
- volumes:
- - rdma-socket:/tmp
- depends_on:
- rdma-sidecar:
- condition: service_healthy
- networks:
- - seaweedfs-rdma
- profiles:
- - testing
- command: ["tail", "-f", "/dev/null"] # Keep container running for manual testing
- # Integration Test Runner
- integration-tests:
- build:
- context: .
- dockerfile: Dockerfile.test-client
- container_name: integration-tests
- environment:
- - RDMA_SOCKET_PATH=/tmp/rdma-engine.sock
- - SIDECAR_URL=http://rdma-sidecar:8081
- - SEAWEEDFS_MASTER=http://seaweedfs-master:9333
- - SEAWEEDFS_VOLUME=http://seaweedfs-volume:8080
- volumes:
- - rdma-socket:/tmp
- - ./tests:/tests
- depends_on:
- rdma-sidecar:
- condition: service_healthy
- networks:
- - seaweedfs-rdma
- profiles:
- - testing
- command: ["/tests/run-integration-tests.sh"]
- volumes:
- master-data:
- driver: local
- volume-data:
- driver: local
- rdma-socket:
- driver: local
- networks:
- seaweedfs-rdma:
- driver: bridge
|