Go to file
Hector Sanjuan 0a8edc17c9 Fix #260: Add REST API client and use it in ipfs-cluster-ctl
This adds the pakage api/rest/client which implements a go-client
for the REST API component. It also update the ipfs-cluster-ctl
tool to rely on it.

Originally, I wanted this to live it in it's own separate repository,
but the api client uses /api/types.go, which is part of cluster.

Therefore it would need to import all of cluster as a dependency.
ipfs-cluster-ctl would also need to import go-ipfs-cluster-api-client
as a dependency, creating circular gx deps which would be a mess to
maintain.

Only the splitting of cluster in multiple repositories (at least for
api, rest, ipfs-cluster-ctl, rest/client and test) would allow better
dependency management by allowing rest/client and the ctl tool
to only import what is needed, but this is something which brings
maintenance costs and can probably wait a bit until cluster is more stable.

License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
2017-12-06 20:12:01 +01:00
.gx gx publish 0.3.0 2017-11-15 23:40:03 +01:00
.snapcraft Re-enable snapcraft build on travis 2017-11-14 19:06:05 +01:00
allocator fix gofmt: format some files with gofmt -s 2017-12-06 15:15:54 +01:00
api Fix #260: Add REST API client and use it in ipfs-cluster-ctl 2017-12-06 20:12:01 +01:00
config fix spelling: Fix spelling errors 2017-12-06 15:15:54 +01:00
consensus/raft fix spelling: Fix spelling errors 2017-12-06 15:15:54 +01:00
docker Dockerfile: Remove ipfs from container 2017-11-29 10:34:03 +01:00
docs feat contribution guidelines: add guidelines 2017-12-06 15:15:50 +01:00
informer Issue #202: Fix mock informer 2017-10-26 16:01:41 +02:00
ipfs-cluster-ctl Fix #260: Add REST API client and use it in ipfs-cluster-ctl 2017-12-06 20:12:01 +01:00
ipfs-cluster-service Merge pull request #264 from ipfs/feat/code_quality 2017-12-06 18:46:53 +01:00
ipfsconn/ipfshttp fix spelling: Fix spelling errors 2017-12-06 15:15:54 +01:00
monitor/basic Issue #219: Clean up peer manager. Rename Peers RPC call 2017-11-14 12:26:42 +01:00
pintracker/maptracker RecoverAll: Implement RecoverAllLocal() which recovers all pins in a peer 2017-11-30 01:53:31 +01:00
sharness fix #254, execution locking: 2017-12-06 11:14:53 -05:00
snap Move back the docker call to travis 2017-11-16 14:36:42 +00:00
state fix golint: Address a few golint warnings 2017-12-06 15:15:38 +01:00
test fix spelling: Fix spelling errors 2017-12-06 15:15:54 +01:00
.dockerignore Issue #259: Address CR comments 2017-12-04 13:59:48 +01:00
.gitignore Include a tag annotation, sign tags 2017-11-15 23:39:22 +01:00
.travis.yml Merge pull request #264 from ipfs/feat/code_quality 2017-12-06 18:46:53 +01:00
architecture.md Issue #192: Update docs to the new peerset handling 2017-11-14 22:06:59 +01:00
CAPTAIN.LOG.md Update to captain's log 2017-11-15 14:55:34 +01:00
CHANGELOG.md Add one more bugfix 2017-11-15 16:29:10 +01:00
cluster_config_test.go fix inef assignments: fix some unused assignments 2017-12-06 15:15:52 +01:00
cluster_config.go fix go vet: address go vet warnings 2017-12-06 15:15:41 +01:00
cluster_test.go RecoverAll: Implement RecoverAllLocal() which recovers all pins in a peer 2017-11-30 01:53:31 +01:00
cluster.go fix go vet: address go vet warnings 2017-12-06 15:15:41 +01:00
config_test.go MapPinTracker: support configuration section 2017-11-29 14:42:50 +01:00
contribute.md feat contribution guidelines: add guidelines 2017-12-06 15:15:50 +01:00
coverage.sh ipfs-cluster-service state upgrade cli command 2017-11-28 22:35:48 -05:00
debug.go Avoid shutting down consensus in the middle of a commit 2017-11-14 23:29:56 +01:00
Dockerfile Dockerfile: Remove ipfs from container 2017-11-29 10:34:03 +01:00
Dockerfile-bundle Dockerfile: Remove ipfs from container 2017-11-29 10:34:03 +01:00
Dockerfile-test Dockerfile-test: use go-ipfs:master 2017-11-29 10:34:03 +01:00
ipfscluster_test.go Merge pull request #257 from te0d/feat/add-peer-identifier 2017-12-04 14:25:49 +01:00
ipfscluster.go fix spelling: Fix spelling errors 2017-12-06 15:15:54 +01:00
LICENSE ipfscluster-server executable 2016-12-21 19:37:25 +01:00
logging.go ipfs-cluster-service state upgrade cli command 2017-11-28 22:35:48 -05:00
Makefile feat make check: add make check to run go vet and golint 2017-12-06 15:15:43 +01:00
nodebug.go Issue #18: Move Consensus and PeerMonitor to its own submodules 2017-03-13 18:40:35 +01:00
package.json fix #254, execution locking: 2017-12-06 11:14:53 -05:00
peer_manager_test.go cluster: Make peersFromMultiaddrs remove any duplicates. 2017-11-15 18:55:55 +01:00
peer_manager.go Peerstore: support dns multiaddresses 2017-11-29 10:34:03 +01:00
pnet_test.go Ran go fmt to format pnet_test.go 2017-07-20 17:12:34 -06:00
README.md Dockerfile: Remove ipfs from container 2017-11-29 10:34:03 +01:00
release.sh sign release commits too 2017-11-15 23:54:31 +01:00
ROADMAP.md Updated Captain's log and added Q3 Roadmap (#134) 2017-07-27 14:20:59 +02:00
rpc_api.go Support --local parameter for Status[Local] and Sync[Local] operations 2017-12-01 12:56:26 +01:00
silent.go Issue #18: Move Consensus and PeerMonitor to its own submodules 2017-03-13 18:40:35 +01:00
util.go fix golint: Address a few golint warnings 2017-12-06 15:15:38 +01:00
version.go Release 0.3.0 2017-11-15 23:39:50 +01:00

ipfs-cluster

Made by Main project IRC channel standard-readme compliant GoDoc Go Report Card Build Status Coverage Status

Collective pinning and composition for IPFS.

THIS SOFTWARE IS ALPHA

ipfs-cluster allows to replicate content (by pinning) in multiple IPFS nodes:

  • Works on top of the IPFS daemon by running one cluster peer per IPFS node (ipfs-cluster-service)
  • A replication_factor controls how many times a CID is pinned in the cluster
  • Re-pins stuff in a different place when a peer goes down
  • Provides an HTTP API and a command-line wrapper (ipfs-cluster-ctl)
  • Provides an IPFS daemon API Proxy which intercepts any "pin"/"unpin" requests and does cluster pinning instead
  • The IPFS Proxy allows to build cluster composition, with a cluster peer acting as an IPFS daemon for another higher-level cluster.
  • Peers share the state using Raft-based consensus. Uses the LibP2P stack (go-libp2p-raft, go-libp2p-rpc...)

Table of Contents

Maintainers and Roadmap

This project is captained by @hsanjuan. See the captain's log for a written summary of current status and upcoming features. You can also check out the project's Roadmap for a high level overview of what's coming and the project's Waffle Board to see what issues are being worked on at the moment.

Install

Pre-compiled binaries

You can download pre-compiled binaries for your platform from the dist.ipfs.io website:

Note that since IPFS Cluster is evolving fast, these builds may not contain the latest features/bugfixes. Builds are updated monthly on a best-effort basis.

Docker

You can build or download an automated build of the ipfs-cluster docker container. This container runs ipfs-cluster-service and includes ipfs-cluster-ctl. To launch the latest published version on Docker run:

$ docker run ipfs/ipfs-cluster

To build the container manually you can:

$ docker build . -t ipfs-cluster

You can mount your local ipfs-cluster configuration and data folder by passing -v /data/ipfs-cluster your-local-ipfs-cluster-folder to Docker. Otherwise, a new configuration will be generated. In that case, you can point it to the right IPFS location by setting IPFS_API like --env IPFS_API="/ip4/1.2.3.4/tcp/5001".

Install from the snap store

In any of the supported Linux distros:

sudo snap install ipfs-cluster --edge

(Note that this is an experimental and unstable release, at the moment)

Install from sources

Installing from master is the best way to have the latest features and bugfixes. In order to install the ipfs-cluster-service the ipfs-cluster-ctl tools you will need Go installed in your system and the run the following commands:

$ go get -u -d github.com/ipfs/ipfs-cluster
$ cd $GOPATH/src/github.com/ipfs/ipfs-cluster
$ make install

This will install ipfs-cluster-service and ipfs-cluster-ctl in your $GOPATH/bin folder. See the usage below.

Usage

ipfs-cluster-usage

Quickstart

** Remember: Start your ipfs daemon before running ipfs-cluster **

ipfs-cluster-service runs an ipfs-cluster peer:

  • Initialize with ipfs-cluster-service init
    • This will randomly generate a secret which should be shared among all peers.
  • Run with ipfs-cluster-service. Check --help for options

For more information about ipfs-cluster-service see the ipfs-cluster-service README. Also, read A guide to running IPFS Cluster for full a full overview of how cluster works.

ipfs-cluster-ctl is used to interface with the ipfs-cluster peer:

ipfs-cluster-ctl id                    # see peer information
ipfs-cluster-ctl pin add <cid>         # Pin a CID in ipfs-cluster
ipfs-cluster-ctl pin rm <cid>          # Upin a CID
ipfs-cluster-ctl ls                    # See current pins and allocations
ipfs-cluster-ctl status <cid>          # See information from every allocation for a CID.

For information on how to manage and perform operations on an IPFS Cluster peer see the ipfs-cluster-ctl README.

Go

IPFS Cluster nodes can be launched directly from Go. The Cluster object provides methods to interact with the cluster and perform actions.

Documentation and examples on how to use IPFS Cluster from Go can be found in godoc.org/github.com/ipfs/ipfs-cluster.

Additional docs

You can find more information and detailed guides:

Note: please contribute to improve and add more documentation!

API

TODO: Swagger

This is a quick summary of API endpoints offered by the Rest API component (these may change before 1.0):

Method Endpoint Comment
GET /id Cluster peer information
GET /version Cluster version
GET /peers Cluster peers
POST /peers Add new peer
DELETE /peers/{peerID} Remove a peer
GET /allocations List of pins and their allocations (consensus-shared state)
GET /allocations/{cid} Show a single pin and its allocations (from the consensus-shared state)
GET /pins Status of all tracked CIDs
POST /pins/sync Sync all
GET /pins/{cid} Status of single CID
POST /pins/{cid} Pin CID
DELETE /pins/{cid} Unpin CID
POST /pins/{cid}/sync Sync CID
POST /pins/{cid}/recover Recover CID

Architecture

The best place to get an overview of how cluster works, what components exist etc. is the architecture.md doc.

Contribute

PRs accepted.

Small note: If editing the README, please conform to the standard-readme specification.

License

MIT © Protocol Labs, Inc.