This example is adapted from the docker-compose file on IPFS Cluster repo.
It enables the usage of the IPFS Proxy API for clusters.
This API automatically pins content to all nodes in the cluster when /add is called.
This example is adapted from the docker-compose file on IPFS Cluster repo.
It enables the usage of the IPFS Proxy API for clusters.
This API automatically pins content to all nodes in the cluster when /add is called.
| 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 persistance, 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:release | |
| 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_CRDT_TRUSTEDPEERS: '*' # Trust all peers in Cluster | |
| CLUSTER_IPFSHTTP_NODEMULTIADDRESS: /dns4/ipfs0/tcp/5001 | |
| CLUSTER_IPFSHTTP_HTTPLISTENMULTIADDRESS: /ip4/ipfs0/tcp/5001 # Expose API | |
| CLUSTER_IPFSPROXY_NODEMULTIADDRESS: /dns4/ipfs0/tcp/5001 # Make IPFS Proxy work | |
| CLUSTER_IPFSPROXY_LISTENMULTIADDRESS: /ip4/0.0.0.0/tcp/9095 # Expose IPFS Proxy API | |
| 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. | |
| - "9096:9096" # Cluster IPFS Proxy endpoint | |
| - "9095:9095" # Cluster IPFS Proxy 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:release | |
| 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:release | |
| 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. |