Skip to content
Permalink
Browse files

Add a docker-compose.yml example with 2 peers and auto-bootstrap.

License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
  • Loading branch information
hsanjuan committed Oct 23, 2018
1 parent 48c89fb commit e4fddbc4d7bec95c4e3ac68b0d7208a8e6e62578
Showing with 106 additions and 0 deletions.
  1. +2 −0 .gitignore
  2. +104 −0 docker-compose.yml
@@ -8,9 +8,11 @@ sharness/test-results
sharness/trash*
vendor/


raftFolderFromTest*
peerstore
shardTesting
compose

# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
@@ -0,0 +1,104 @@
version: '3.4'

# This is an example docker-compose file for IPFS Cluster
# It runs two Cluster peers (cluster0, cluster1) attached to two
# IPFS daemons (ipfs0, ipfs1).
#
# It expects a "compose" subfolder as follows where it will store configurations
# and states permanently:
#
# compose/
# |-- cluster0
# |-- cluster1
# |-- ipfs0
# |-- ipfs1
#
#
# During the first start, default configurations are created for all peers.

services:

##################################################################################
##################################################################################
## Cluster PEER 0 ################################################################
##################################################################################

ipfs0:
container_name: ipfs0
image: ipfs/go-ipfs:release
ports:
- "4001:4001" # ipfs swarm
- "4002:4002/udp" # udp swarm
# - "5001:5001" # expose if needed/wanted
# - "8080:8080" # exposes if needed/wanted
volumes:
- ./compose/ipfs0:/data/ipfs

cluster0:
container_name: cluster0
image: ipfs/ipfs-cluster:latest
depends_on:
- ipfs0
environment:
# Change this! Same for all peers!
CLUSTER_SECRET: adc72159e0ce63350c13de6a5e4d3b2f500232a770cb8c3e7829fc514d89d109
IPFS_API: /dns4/ipfs0/tcp/5001
ports:
- "127.0.0.1:9094:9094" # API
# - "9096:9096" # Cluster IPFS Proxy endpoint
volumes:
- ./compose/cluster0:/data/ipfs-cluster

##################################################################################
##################################################################################
## Cluster PEER 1 ################################################################
##################################################################################

ipfs1:
container_name: ipfs1
image: ipfs/go-ipfs:release
ports:
- "4101:4001" # ipfs swarm
- "4102:4002/udp" # udp swarm
# - "5101:5001" # expose if needed/wanted
# - "8180:8080" # exposes if needed/wanted
volumes:
- ./compose/ipfs1:/data/ipfs

# cluster1 bootstraps to cluster0 if not bootstrapped before
cluster1:
container_name: cluster1
image: ipfs/ipfs-cluster:latest
depends_on:
- cluster0
- ipfs1
environment:
# Change this! Same for all peers!
CLUSTER_SECRET: adc72159e0ce63350c13de6a5e4d3b2f500232a770cb8c3e7829fc514d89d109
IPFS_API: /dns4/ipfs1/tcp/5001
ports:
- "127.0.0.1:9194:9094" # API
# - "9196:9096" # Cluster IPFS Proxy endpoint
volumes:
- ./compose/cluster1:/data/ipfs-cluster
entrypoint:
- "/sbin/tini"
- "--"
# Translation: if state folder does not exist, find cluster0 id and bootstrap
# to it.
command: >-
sh -c '
cmd="daemon --upgrade"
if [ ! -d /data/ipfs-cluster/raft ]; then
while ! ipfs-cluster-ctl --host /dns4/cluster0/tcp/9094 id; do
sleep 1
done
pid=`ipfs-cluster-ctl --host /dns4/cluster0/tcp/9094 id | grep -o -E "^(\w+)"`
sleep 10
cmd="daemon --bootstrap /dns4/cluster0/tcp/9096/ipfs/$$pid"
fi
exec /usr/local/bin/entrypoint.sh $$cmd
'
# For adding more peers, copy PEER 1 and rename things to ipfs2, cluster2.
# Keep bootstrapping to cluster0.

0 comments on commit e4fddbc

Please sign in to comment.
You can’t perform that action at this time.