Skip to content

Commit 722fa7d

Browse files
committed
fix: overhauled Docker deployment
1 parent e4e6a1e commit 722fa7d

File tree

4 files changed

+53
-33
lines changed

4 files changed

+53
-33
lines changed

Dockerfiles/Dockerfile.dela

+1-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,5 @@ WORKDIR /go/d-voting/cli/memcoin
99
RUN go build
1010
ENV PATH=/go/dela/cli/crypto:/go/d-voting/cli/memcoin:${PATH}
1111
WORKDIR /go
12-
RUN mkdir /data
13-
RUN crypto bls signer new --save /data/private.key
14-
ENTRYPOINT ["/bin/bash", "-c", "memcoin --config /tmp/node start --postinstall --proxyaddr :$PROXYPORT --proxykey $PROXYKEY --listen tcp://$HOSTNAME:2000 --routing tree"]
12+
ENTRYPOINT ["/bin/bash", "-c", "memcoin --config /data/node start --postinstall --proxyaddr :$PROXYPORT --proxykey $PROXYKEY --listen tcp://0.0.0.0:2000 --public http://$HOSTNAME:2000 --routing tree"]
1513
CMD []

README.docker.md

+6-7
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,7 @@ The relevant files are:
1111
You need to create a local .env file with the following content:
1212

1313
```
14-
DELA_REPLICAS=3 # number of Dela nodes to deploy
15-
DELA_NODE_URL=http://d-voting-dela-1:8080 # Dela node URL *within the Docker network* (port must be in DELA_PROXY_PORT_RANGE)
16-
DELA_PORT_RANGE=2000-2002 # Dela ports (at least DELA_REPLICAS ports)
17-
DELA_PROXY_PORT_RANGE=8080-8082 # Dela proxy ports (at least DELA_REPLICAS ports)
14+
DELA_NODE_URL=http://dela-leader:8080 # Dela node URL *within the Docker network* (port must be in DELA_PROXY_PORT_RANGE)
1815
DATABASE_USERNAME=dvoting # choose any PostgreSQL username
1916
DATABASE_PASSWORD= # choose any PostgreSQL password
2017
DATABASE_HOST=db # PostgreSQL host *within the Docker network*
@@ -52,6 +49,8 @@ to delete the volumes (this will reset your instance).
5249

5350
## Post-install commands
5451

55-
1. run the script `DELA_REPLICAS=... init_dela.sh` to initialize the DELA network with `DELA_REPLICAS set to the same value as in .env`
56-
2. run `docker exec -it d-voting-backend-1 /bin/bash` to connect to the backend
57-
3. execute `node -e 'require("./dbUtils").addAdmin("./dvoting-users", <sciper>)'` with your Sciper to add yourself as admin
52+
1. `./init_dela.sh`
53+
2. `docker compose exec backend /bin/bash`
54+
3. `cd src`
55+
4. `node -e 'require("./dbUtils").addAdmin("<sciper>")'`
56+
5. exit the container and run `docker compose down && docker compose up -d`

docker-compose.yml

+31-6
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,38 @@
11
services:
22

3-
dela: # DELA nodes
3+
dela-leader: # inital DELA leader node
44
image: dela
55
build:
6-
dockerfile: ./Dockerfile.dela
7-
context: ./Dockerfiles
8-
deploy:
9-
replicas: ${DELA_REPLICAS}
6+
dockerfile: ./Dockerfiles/Dockerfile.dela
107
environment:
118
PROXYKEY: ${PUBLIC_KEY}
129
PROXYPORT: ${PROXYPORT}
13-
LLVL: info
10+
LLVL: debug
11+
volumes:
12+
- dela-leader:/data
13+
hostname: dela-leader
14+
dela-worker-1: # DELA worker node
15+
image: dela
16+
build:
17+
dockerfile: ./Dockerfiles/Dockerfile.dela
18+
environment:
19+
PROXYKEY: ${PUBLIC_KEY}
20+
PROXYPORT: ${PROXYPORT}
21+
LLVL: debug
22+
volumes:
23+
- dela-worker-1:/data
24+
hostname: dela-worker-1
25+
dela-worker-2: # DELA worker node
26+
image: dela
27+
build:
28+
dockerfile: ./Dockerfiles/Dockerfile.dela
29+
environment:
30+
PROXYKEY: ${PUBLIC_KEY}
31+
PROXYPORT: ${PROXYPORT}
32+
LLVL: debug
33+
volumes:
34+
- dela-worker-2:/data
35+
hostname: dela-worker-2
1436

1537
frontend: # web service frontend
1638
image: frontend
@@ -53,3 +75,6 @@ services:
5375

5476
volumes:
5577
postgres-data: # PostgreSQL database
78+
dela-leader:
79+
dela-worker-1:
80+
dela-worker-2:

init_dela.sh

+15-17
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,33 @@
11
#!/bin/bash
22

3-
# check if DELA_REPLICAS environment variable is set
4-
if [ -z ${DELA_REPLICAS} ]; then
5-
echo "DELA_REPLICAS environment variable needs to be set to use this script";
6-
exit 1;
7-
fi
8-
9-
LEADER_IP=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' d-voting-dela-1);
103
MEMBERS="";
114

5+
# create signing keys
6+
for container in dela-leader dela-worker-1 dela-worker-2; do
7+
docker compose exec "$container" crypto bls signer new --save /data/private.key;
8+
done
9+
1210
# share the certificate
13-
for i in $(seq 2 "$DELA_REPLICAS"); do
14-
TOKEN_ARGS=$(docker exec d-voting-dela-1 /bin/bash -c 'LLVL=error memcoin --config /tmp/node minogrpc token');
15-
docker exec d-voting-dela-"$i" memcoin --config /tmp/node minogrpc join --address //"$LEADER_IP":2000 $TOKEN_ARGS;
11+
for container in dela-worker-1 dela-worker-2; do
12+
TOKEN_ARGS=$(docker compose exec dela-leader /bin/bash -c 'LLVL=error memcoin --config /data/node minogrpc token');
13+
docker compose exec "$container" memcoin --config /data/node minogrpc join --address //dela-leader:2000 $TOKEN_ARGS;
1614
done
1715

1816
# create a new chain with the nodes
19-
for i in $(seq 1 "$DELA_REPLICAS"); do
17+
for container in dela-leader dela-worker-1 dela-worker-2; do
2018
# add node to the chain
21-
MEMBERS="$MEMBERS --member $(docker exec d-voting-dela-$i /bin/bash -c 'LLVL=error memcoin --config /tmp/node ordering export')";
19+
MEMBERS="$MEMBERS --member $(docker compose exec $container /bin/bash -c 'LLVL=error memcoin --config /data/node ordering export')";
2220
done
23-
docker exec d-voting-dela-1 memcoin --config /tmp/node ordering setup $MEMBERS;
21+
docker compose exec dela-leader memcoin --config /data/node ordering setup $MEMBERS;
2422

2523
# authorize the signer to handle the access contract on each node
26-
for i in $(seq 1 "$DELA_REPLICAS"); do
27-
docker exec d-voting-dela-"$i" /bin/bash -c 'memcoin --config /tmp/node access add --identity $(crypto bls signer read --path /data/private.key --format BASE64_PUBKEY)';
24+
for container in dela-leader dela-worker-1 dela-worker-2; do
25+
docker compose exec "$container" /bin/bash -c 'memcoin --config /data/node access add --identity $(crypto bls signer read --path /data/private.key --format BASE64_PUBKEY)';
2826
done
2927

30-
IDENTITY=$(docker exec d-voting-dela-1 crypto bls signer read --path /data/private.key --format BASE64_PUBKEY);
28+
IDENTITY=$(docker compose exec dela-leader crypto bls signer read --path /data/private.key --format BASE64_PUBKEY);
3129
# update the access contract
32-
docker exec d-voting-dela-1 memcoin --config /tmp/node pool add\
30+
docker compose exec dela-leader memcoin --config /data/node pool add\
3331
--key /data/private.key\
3432
--args go.dedis.ch/dela.ContractArg\
3533
--args go.dedis.ch/dela.Access\

0 commit comments

Comments
 (0)