version: '3.4' # This is an example docker-compose file to quickly test an IPFS Cluster # with multiple peers on a contained environment. # It runs 3 cluster peers (cluster0, cluster1...) attached to go-ipfs daemons # (ipfs0, ipfs1...) using the CRDT consensus component. Cluster peers # autodiscover themselves using mDNS on the docker internal network. # # To interact with the cluster use "ipfs-cluster-ctl" (the cluster0 API port is # exposed to the locahost. You can also "docker exec -ti cluster0 sh" and run # it from the container. "ipfs-cluster-ctl peers ls" should show all 3 peers a few # seconds after start. # # For persistence, a "compose" folder is created and used to store configurations # and states. This can be used to edit configurations in subsequent runs. It looks # as follows: # # 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:latest # ports: # - "4001:4001" # ipfs swarm - expose if needed/wanted # - "5001:5001" # ipfs api - expose if needed/wanted # - "8080:8080" # ipfs gateway - expose if needed/wanted volumes: - ./compose/ipfs0:/data/ipfs cluster0: container_name: cluster0 image: ipfs/ipfs-cluster:latest depends_on: - ipfs0 environment: CLUSTER_PEERNAME: cluster0 CLUSTER_SECRET: ${CLUSTER_SECRET} # From shell variable if set CLUSTER_IPFSHTTP_NODEMULTIADDRESS: /dns4/ipfs0/tcp/5001 CLUSTER_CRDT_TRUSTEDPEERS: '*' # Trust all peers in Cluster CLUSTER_RESTAPI_HTTPLISTENMULTIADDRESS: /ip4/0.0.0.0/tcp/9094 # Expose API CLUSTER_MONITORPINGINTERVAL: 2s # Speed up peer discovery ports: # Open API port (allows ipfs-cluster-ctl usage on host) - "127.0.0.1:9094:9094" # The cluster swarm port would need to be exposed if this container # was to connect to cluster peers on other hosts. # But this is just a testing cluster. # - "9095:9095" # Cluster IPFS Proxy endpoint # - "9096:9096" # Cluster swarm endpoint volumes: - ./compose/cluster0:/data/ipfs-cluster ################################################################################## ## Cluster PEER 1 ################################################################ ################################################################################## # See Cluster PEER 0 for comments (all removed here and below) ipfs1: container_name: ipfs1 image: ipfs/go-ipfs:latest volumes: - ./compose/ipfs1:/data/ipfs cluster1: container_name: cluster1 image: ipfs/ipfs-cluster:latest depends_on: - ipfs1 environment: CLUSTER_PEERNAME: cluster1 CLUSTER_SECRET: ${CLUSTER_SECRET} CLUSTER_IPFSHTTP_NODEMULTIADDRESS: /dns4/ipfs1/tcp/5001 CLUSTER_CRDT_TRUSTEDPEERS: '*' CLUSTER_MONITORPINGINTERVAL: 2s # Speed up peer discovery volumes: - ./compose/cluster1:/data/ipfs-cluster ################################################################################## ## Cluster PEER 2 ################################################################ ################################################################################## # See Cluster PEER 0 for comments (all removed here and below) ipfs2: container_name: ipfs2 image: ipfs/go-ipfs:latest volumes: - ./compose/ipfs2:/data/ipfs cluster2: container_name: cluster2 image: ipfs/ipfs-cluster:latest depends_on: - ipfs2 environment: CLUSTER_PEERNAME: cluster2 CLUSTER_SECRET: ${CLUSTER_SECRET} CLUSTER_IPFSHTTP_NODEMULTIADDRESS: /dns4/ipfs2/tcp/5001 CLUSTER_CRDT_TRUSTEDPEERS: '*' CLUSTER_MONITORPINGINTERVAL: 2s # Speed up peer discovery volumes: - ./compose/cluster2:/data/ipfs-cluster # For adding more peers, copy PEER 1 and rename things to ipfs2, cluster2. # Keep bootstrapping to cluster0.