ipfs-shipyard / cube

IPFS Cube will help people deploy and manage their own IPFS pinning services on top of existing cheap hardware, or cloud storage.
32 stars 3 forks source link

🚧🚧🚧🚧 WARNING: This is a pre-alpha experiment. Expect drastic changes as we iterate and learn. 🚧🚧🚧🚧

Cube

IPFS Cube will help people deploy and manage their own IPFS pinning services on top of existing cheap hardware, or cloud storage.

Note: This is meant to be a tool that anyone can use. Protocol Labs/IPFS is not running its own pinning service.

What is the problem we’re trying to solve?

This combination of uses is not only compelling on its own, it’s also a basis for a plethora of more specific IPFS products and tools that could address use cases like users of apps like PeerPad who need a place to pin their documents and edits government agencies publishing open data and measuring impact of the data research labs pinning and redistributing data they’ve produced or relied on libraries pinning, cataloging, indexing, and preserving the data their patrons rely on participants in a community wifi network maintaining content for their local peers to access independently of broader internet connectivity

All of these use cases depend on reliable, easy to use, easily managed pinning services.

We need a thread that weaves together all the dependencies and interacting modules across Protocol Labs to create a cohesive path towards broader user adoption of our technologies. We need to make it easier for people to make the choice between local pinning (just running ipfs pin locally), remote centralized pinning (pinning with Cube), and remote replicated pinning (pinning with Cluster).

The vision

What would it mean to run a Cube?

Running an IPFS Cube is running an IPFS pinning service that has members/subscribers, controls for managing usage, and a great UX overall. By default a Cube will be backed by an IPFS Cluster, but it can be re-configured to use other storage services such as Microsoft Azure, the Cloudflare IPFS gateway, or Amazon S3.

An example of a target user for IPFS Cube might be a tech-savvy librarian at a public library, who already runs a couple websites and is an admin on their Drupal instance. They probably have sysadmin privileges on a server or two, but their real motivation is to support their community’s ability to store, share, access and preserve knowledge. They want to run a pinning service for their community and would prefer to have a complete experience from install through management and most debugging that doesn’t involve hacking around on the command line.

This is just one example of a target user. Our first effort will focus on choosing their optimal set of target users and identifying real people who we can engage with as exemplars of the use cases.

How does this relate to IPFS Cluster?

Cube will be a tool that many people will use together with IPFS Cluster. They will use Cube to run and manage a pinning service and, by default, that Cube will create an IPFS Cluster to handle storage. Because of this relationship, Cube’s use cases strongly overlap with some of the use cases for Cluster. If we are successful at building a great UX for Cube, thousands or millions of people will use Cube to run and manage their own IPFS Clusters, with Cube as their main interface while Cluster functions primarily as an underlying system that they don’t have to worry about unless they choose to.

Running a Cluster is running a group of nodes with some strategy for understanding what content gets pinned. The target users are system administrators of some sort who are comfortable with ideas like virtualization, kubernetes, and CLIs. By contrast, running a Cube gives you a pinning service with tools for managing and monitoring the service, its users, its configuration, etc. By default a Cube will spin up an IPFS Cluster as its storage layer. Its target users are mainly focused on the people pinning data on their Cube, the costs and benefits of running the Cube, and quality of service rather than focusing on the storage equipment, pinning strategies, etc. They prefer non-CLI tools and might not have deep familiarity with ideas like virtualization, kubernetes, etc.

Building out Cube is good for Cluster product development because we will have the opportunity to grapple with what should (or should not) be in the core Cluster product. For example, for a basic Cube to work, it needs to have things like:

seamless automated creation and configuration of an IPFS Cluster through simple UI authentication and authenticated pinning per user and per group of user allocation of storage reporting on storage usage tooling for configuration (how are you going to store this stuff, how redundant)

To implement these features well, we need end user input for both Cluster and Cube. Building Cube will help disambiguate which functionality lives in which module for it, and other third-party services seeking to use Cluster to support their work.

Running the prototype

Easiest way to try out the latest build is to download the latest built version from master. You can find that in the directory of artifacts on Jenkins. Find the file that fits the pattern cube-$version-standalone.jar, download and run it. GUI should start and the setup process should start.

If you're interested in building from source, please see the guide on how to contribute.

Team

Contribute

Cube is a work in progress. As such, there's a few things you can do right now to help out:

Read Cube contributing.md for details on the latest development flow.

Want to hack on Cube?

License

The MIT License (MIT)

Copyright (c) 2017 Protocol Labs Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.