Skip to content

Commit fb64907

Browse files
committed
Added docker-compose bootstrap
1 parent 0a026fa commit fb64907

16 files changed

Lines changed: 121 additions & 140 deletions

File tree

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,9 @@ e2e/coverage.html
1717
e2e/logs/
1818
# Generated config file (template is tracked)
1919
e2e/config.test.yaml
20+
21+
peers.json
22+
node0/
23+
node1/
24+
node2/
25+
config.yaml

Makefile

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,13 @@ clean:
5959

6060
# Full clean (including E2E artifacts)
6161
clean-all: clean e2e-clean
62+
63+
gen-configs:
64+
chmod +x ./deployments/base/node-configs/setup-nodes.sh
65+
./deployments/base/node-configs/setup-nodes.sh
66+
67+
run-dev:
68+
docker compose -f ./deployments/dev/docker-compose.yaml up -d
69+
70+
stop-dev:
71+
docker compose -f ./deployments/dev/docker-compose.yaml down

README.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,60 @@ The application uses a YAML configuration file (`config.yaml`) with the followin
137137

138138
For full installation and run instructions, see [INSTALLATION.md](./INSTALLATION.md).
139139

140+
## Quick Start
141+
142+
Get up and running with MPCIUM in minutes using our automated setup:
143+
144+
### 1. Generate Node Configurations
145+
146+
```bash
147+
# Generate all node configurations, identities, and Docker setup
148+
make gen-configs
149+
```
150+
151+
This command will:
152+
153+
- Generate 3 MPC nodes with 2-of-3 threshold
154+
- Create all necessary identity files and configurations
155+
- Set up Docker Compose files for easy deployment
156+
157+
### 2. Start Development Environment
158+
159+
```bash
160+
# Start all services (NATS, Consul, and MPC nodes)
161+
make start-dev
162+
```
163+
164+
This will launch:
165+
166+
- NATS messaging server
167+
- Consul for service discovery
168+
- 3 MPC nodes (node0, node1, node2)
169+
- Automatic peer registration
170+
171+
### 3. Stop Development Environment
172+
173+
```bash
174+
# Stop all services
175+
make stop-dev
176+
```
177+
178+
### 4. View Logs
179+
180+
```bash
181+
# View logs from all services
182+
docker-compose -f ./deployments/dev/docker-compose.yaml logs -f
183+
184+
# View logs from a specific node
185+
docker-compose -f ./deployments/dev/docker-compose.yaml logs -f mpcium-node0
186+
```
187+
188+
### 5. Test the Setup
189+
190+
Once all nodes are running, you can test the MPC cluster using the client examples in the `examples/` directory.
191+
192+
**That's it!** Your MPCIUM cluster is now ready for secure wallet generation and signing operations.
193+
140194
## Preview usage
141195

142196
### Start nodes

config.yaml

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@ RUN echo '#!/bin/sh' > /app/entrypoint.sh && \
4343
echo 'exec ./mpcium start --name "$NODE_NAME" "$@"' >> /app/entrypoint.sh && \
4444
chmod +x /app/entrypoint.sh
4545

46-
# Create necessary directories
46+
# Create necessary directories with proper permissions for volume mounting
4747
RUN mkdir -p db backups identity certs && \
48+
chmod 777 db backups && \
4849
chown -R mpcium:mpcium /app
4950

5051
# Switch to non-root user

deployments/node-configs/setup-nodes.sh renamed to deployments/base/node-configs/setup-nodes.sh

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ select_deployment_type() {
110110
;;
111111
2)
112112
log_info "Selected: Docker deployment"
113-
NATS_URL="nats://nats:4222"
113+
NATS_URL="nats://nats-server:4222"
114114
CONSUL_ADDRESS="consul:8500"
115115
DEPLOYMENT_TYPE="docker"
116116
break
@@ -300,27 +300,39 @@ distribute_identity_files() {
300300

301301
log_success "Identity files distributed to all nodes"
302302
}
303-
304-
register_peers_to_consul() {
305-
log_info "Registering peers to Consul..."
303+
fix_file_permissions() {
304+
log_info "Fixing file permissions for Docker compatibility..."
306305

307306
cd "$BASE_DIR"
308307

309-
# Check if Consul is accessible
310-
if ! curl -s "$CONSUL_ADDRESS/v1/status/leader" > /dev/null; then
311-
log_warning "Consul not accessible at $CONSUL_ADDRESS"
312-
log_warning "Please ensure Consul is running and register peers manually:"
313-
log_warning " mpcium-cli register-peers"
314-
return
308+
# Fix permissions for all identity files
309+
for i in $(seq 0 $(($NUM_NODES - 1))); do
310+
NODE_DIR="node$i"
311+
if [ -d "$NODE_DIR/identity" ]; then
312+
log_info "Fixing permissions for $NODE_DIR/identity/*"
313+
chmod -R 644 "$NODE_DIR/identity/"*
314+
log_success "Fixed permissions for $NODE_DIR"
315+
fi
316+
done
317+
318+
# Also fix permissions for event initiator files
319+
if [ -f "event_initiator.identity.json" ]; then
320+
chmod 644 event_initiator.identity.json
321+
log_info "Fixed permissions for event_initiator.identity.json"
315322
fi
316323

317-
# Register peers
318-
mpcium-cli register-peers
319-
log_success "Peers registered to Consul"
324+
if [ -f "event_initiator.key" ]; then
325+
chmod 644 event_initiator.key
326+
log_info "Fixed permissions for event_initiator.key"
327+
fi
328+
329+
if [ -f "event_initiator.key.age" ]; then
330+
chmod 644 event_initiator.key.age
331+
log_info "Fixed permissions for event_initiator.key.age"
332+
fi
333+
334+
log_success "File permissions fixed for Docker compatibility"
320335
}
321-
322-
323-
324336
print_summary() {
325337
echo
326338
echo -e "${GREEN}╔══════════════════════════════════════════════════════════════════════════════════╗${NC}"
@@ -449,7 +461,7 @@ main() {
449461
create_node_directories
450462
generate_node_identities
451463
distribute_identity_files
452-
register_peers_to_consul
464+
fix_file_permissions
453465
print_summary
454466
}
455467

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
services:
2-
nats:
2+
nats-server:
33
image: nats:latest
4-
container_name: nats
4+
container_name: nats-server
55
command: -js --http_port 8222
66
ports:
77
- "4222:4222"
@@ -26,11 +26,11 @@ services:
2626
init:
2727
build:
2828
context: ../..
29-
dockerfile: deployments/mpcium-cli/Dockerfile
29+
dockerfile: deployments/base/mpcium-cli/Dockerfile
3030
container_name: mpcium-init
3131
volumes:
32-
- ../node-configs/config.yaml:/app/config.yaml:ro
33-
- ../node-configs/peers.json:/app/peers.json:ro
32+
- ../base/node-configs/peers.json:/app/peers.json:ro
33+
- ../base/node-configs/config.yaml:/app/config.yaml:ro
3434
command: ["register-peers"]
3535
depends_on:
3636
- consul
@@ -41,20 +41,20 @@ services:
4141
mpcium0:
4242
build:
4343
context: ../..
44-
dockerfile: deployments/mpcium/Dockerfile
44+
dockerfile: deployments/base/mpcium/Dockerfile
4545
container_name: mpcium-node0
4646
environment:
4747
- NODE_NAME=node0
4848
volumes:
49-
- ../node-configs/node0/config.yaml:/app/config.yaml:ro
50-
- ../node-configs/node0/identity:/app/identity:ro
51-
- ../node-configs/node0/peers.json:/app/peers.json:ro
49+
- ../base/node-configs/node0/config.yaml:/app/config.yaml:ro
50+
- ../base/node-configs/node0/peers.json:/app/peers.json:ro
51+
- ../base/node-configs/node0/identity:/app/identity:ro
5252
- mpcium-node0-db:/app/db
5353
- mpcium-node0-backups:/app/backups
5454
ports:
5555
- "8080:8080"
5656
depends_on:
57-
- nats
57+
- nats-server
5858
- consul
5959
- init
6060
restart: unless-stopped
@@ -64,20 +64,20 @@ services:
6464
mpcium1:
6565
build:
6666
context: ../..
67-
dockerfile: deployments/mpcium/Dockerfile
67+
dockerfile: deployments/base/mpcium/Dockerfile
6868
container_name: mpcium-node1
6969
environment:
7070
- NODE_NAME=node1
7171
volumes:
72-
- ../node-configs/node1/config.yaml:/app/config.yaml:ro
73-
- ../node-configs/node1/identity:/app/identity:ro
74-
- ../node-configs/node1/peers.json:/app/peers.json:ro
72+
- ../base/node-configs/node1/config.yaml:/app/config.yaml:ro
73+
- ../base/node-configs/node1/peers.json:/app/peers.json:ro
74+
- ../base/node-configs/node1/identity:/app/identity:ro
7575
- mpcium-node1-db:/app/db
7676
- mpcium-node1-backups:/app/backups
7777
ports:
7878
- "8081:8080"
7979
depends_on:
80-
- nats
80+
- nats-server
8181
- consul
8282
- init
8383
restart: unless-stopped
@@ -87,20 +87,20 @@ services:
8787
mpcium2:
8888
build:
8989
context: ../..
90-
dockerfile: deployments/mpcium/Dockerfile
90+
dockerfile: deployments/base/mpcium/Dockerfile
9191
container_name: mpcium-node2
9292
environment:
9393
- NODE_NAME=node2
9494
volumes:
95-
- ../node-configs/node2/config.yaml:/app/config.yaml:ro
96-
- ../node-configs/node2/identity:/app/identity:ro
97-
- ../node-configs/node2/peers.json:/app/peers.json:ro
95+
- ../base/node-configs/node2/config.yaml:/app/config.yaml:ro
96+
- ../base/node-configs/node2/peers.json:/app/peers.json:ro
97+
- ../base/node-configs/node2/identity:/app/identity:ro
9898
- mpcium-node2-db:/app/db
9999
- mpcium-node2-backups:/app/backups
100100
ports:
101101
- "8082:8080"
102102
depends_on:
103-
- nats
103+
- nats-server
104104
- consul
105105
- init
106106
restart: unless-stopped

docker-compose.yaml

Lines changed: 0 additions & 22 deletions
This file was deleted.

node0/config.yaml

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)