aboutsummaryrefslogtreecommitdiff
path: root/seaweedfs-rdma-sidecar/docker-compose.yml
blob: b2970f1141eb327b63ab2ef57733a1ebb9b8bc83 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
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