File size: 3,624 Bytes
b54ffe5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# ==============================================================================
# Multi-Node Federated Consortium Simulation Specification
# Usage:
#   docker compose -f docker-compose.multinode.yml up --build
# ==============================================================================

services:
  coordinator:
    build:
      context: ./backend
      dockerfile: Dockerfile
    container_name: cfi-fl-coordinator
    environment:
      - MODE=coordinator
      - APP_ENV=production
      - APP_LOG_LEVEL=INFO
      - PORT=8000
      - GRPC_PORT=50051
      - CA_CERT_PATH=/app/pki/ca.pem
      - SERVER_CERT_PATH=/app/pki/coordinator/cert.pem
      - SERVER_KEY_PATH=/app/pki/coordinator/key.pem
    volumes:
      - coordinator-data:/app/data
      - coordinator-pki:/app/pki
    networks:
      - consortium-net
    ports:
      - "50051:50051"
      - "8000:8000"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://127.0.0.1:8000/health"]
      interval: 10s
      timeout: 3s
      retries: 3

  bank-a:
    build:
      context: ./backend
      dockerfile: Dockerfile
    container_name: cfi-bank-client-a
    environment:
      - MODE=bank_client
      - BANK_ID=bank_a
      - APP_ENV=production
      - COORDINATOR_URL=coordinator:50051
      - CA_CERT_PATH=/app/pki/ca.pem
      - BANK_CERT_PATH=/app/pki/bank-a/cert.pem
      - BANK_KEY_PATH=/app/pki/bank-a/key.pem
    volumes:
      - bank-a-data:/app/data
      - bank-a-pki:/app/pki
    networks:
      - bank-a-net
      - consortium-net
    depends_on:
      coordinator:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://127.0.0.1:8000/health"]
      interval: 10s
      timeout: 3s
      retries: 3

  bank-b:
    build:
      context: ./backend
      dockerfile: Dockerfile
    container_name: cfi-bank-client-b
    environment:
      - MODE=bank_client
      - BANK_ID=bank_b
      - APP_ENV=production
      - COORDINATOR_URL=coordinator:50051
      - CA_CERT_PATH=/app/pki/ca.pem
      - BANK_CERT_PATH=/app/pki/bank-b/cert.pem
      - BANK_KEY_PATH=/app/pki/bank-b/key.pem
    volumes:
      - bank-b-data:/app/data
      - bank-b-pki:/app/pki
    networks:
      - bank-b-net
      - consortium-net
    depends_on:
      coordinator:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://127.0.0.1:8000/health"]
      interval: 10s
      timeout: 3s
      retries: 3

  bank-c:
    build:
      context: ./backend
      dockerfile: Dockerfile
    container_name: cfi-bank-client-c
    environment:
      - MODE=bank_client
      - BANK_ID=bank_c
      - APP_ENV=production
      - COORDINATOR_URL=coordinator:50051
      - CA_CERT_PATH=/app/pki/ca.pem
      - BANK_CERT_PATH=/app/pki/bank-c/cert.pem
      - BANK_KEY_PATH=/app/pki/bank-c/key.pem
    volumes:
      - bank-c-data:/app/data
      - bank-c-pki:/app/pki
    networks:
      - bank-c-net
      - consortium-net
    depends_on:
      coordinator:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://127.0.0.1:8000/health"]
      interval: 10s
      timeout: 3s
      retries: 3

networks:
  consortium-net:
    driver: bridge
    name: cfi-consortium-net
  bank-a-net:
    driver: bridge
    internal: true
    name: cfi-bank-a-private-net
  bank-b-net:
    driver: bridge
    internal: true
    name: cfi-bank-b-private-net
  bank-c-net:
    driver: bridge
    internal: true
    name: cfi-bank-c-private-net

volumes:
  coordinator-data:
  coordinator-pki:
  bank-a-data:
  bank-a-pki:
  bank-b-data:
  bank-b-pki:
  bank-c-data:
  bank-c-pki: