Merge pull request #588 from ipfs/docker-compose
Add a docker-compose.yml example with 2 peers and auto-bootstrap.
This commit is contained in:
commit
cd30ae603a
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -8,9 +8,11 @@ sharness/test-results
|
|||
sharness/trash*
|
||||
vendor/
|
||||
|
||||
|
||||
raftFolderFromTest*
|
||||
peerstore
|
||||
shardTesting
|
||||
compose
|
||||
|
||||
# Compiled Object files, Static and Dynamic libs (Shared Objects)
|
||||
*.o
|
||||
|
|
|
@ -44,9 +44,10 @@ jobs:
|
|||
- make check
|
||||
- make service
|
||||
- make ctl
|
||||
- name: "Docker build"
|
||||
- name: "Docker and Compose build"
|
||||
script:
|
||||
- make docker
|
||||
- make docker-compose
|
||||
- name: "Sharness"
|
||||
script:
|
||||
- sudo apt-get update
|
||||
|
|
8
Makefile
8
Makefile
|
@ -93,6 +93,14 @@ docker:
|
|||
docker exec tmp-make-cluster-test sh -c "ipfs-cluster-service -v"
|
||||
docker kill tmp-make-cluster-test
|
||||
|
||||
|
||||
docker-compose:
|
||||
CLUSTER_SECRET=$(shell od -vN 32 -An -tx1 /dev/urandom | tr -d ' \n') docker-compose up -d
|
||||
sleep 20
|
||||
docker exec cluster0 ipfs-cluster-ctl peers ls | grep -o "Sees 1 other peers" | uniq -c | grep 2
|
||||
docker exec cluster1 ipfs-cluster-ctl peers ls | grep -o "Sees 1 other peers" | uniq -c | grep 2
|
||||
docker-compose down
|
||||
|
||||
prcheck: deps check service ctl test
|
||||
|
||||
.PHONY: all gx deps test test_sharness clean_sharness rw rwundo publish service ctl install clean gx-clean docker
|
||||
|
|
98
docker-compose.yml
Normal file
98
docker-compose.yml
Normal file
|
@ -0,0 +1,98 @@
|
|||
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
|
||||
# - "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:
|
||||
CLUSTER_SECRET: ${CLUSTER_SECRET} # From shell variable
|
||||
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
|
||||
# - "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:
|
||||
CLUSTER_SECRET: ${CLUSTER_SECRET} # From shell variable
|
||||
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.
|
Loading…
Reference in New Issue
Block a user