IPFS (InterPlanetary File System) 是一个面向全球的, 点对点的分布式版本文件系统. 它用基于内容的地址替代基于域名的地址, 也就是用户寻找的不是某个地址而是储存在某个地方的内容, 不需要验证发送者的身份, 而只需要验证内容的哈希, 通过这样可以让网页的速度更快, 更安全, 更健壮, 更持久. IPFS 表示, IPFS 未来将替代 HTTP(以及其他的许多东西).
IPFS 和 BitTorrent 的区别: How does it compare to BitTorrent's Project Maelstrom? https://github.com/ipfs/faq/issues/17
IPFS 从根本上改变了用户搜索的方式. 通过 IPFS, 用户搜索的是内容. 通过 HTTP 浏览器搜索文件的时候, 首先找到服务器的位置(IP 地址), 然后使用路径名称在服务器上查找文件. 按照这个设计, 只有文件所有者可以判断这是否是用户要找的文件. 此时, 必须保证托管者不会通过移除文件或者关闭服务器而对文件做任何更改.
当文件被添加到 IPFS 节点上, 它得到一个新的名字. 这个名字实际上是一个加密哈希, 它是从文件内容中被计算出来. 通过加密保证该哈希始终只表示该文件的内容. 哪怕只在文件中修改一个比特的数据, 哈希都会完全不同.
当下一步向 IPFS 分布式网络询问哈希的时候, 它通过使用一个分布式哈希表, 可以快速 (在一个拥有 10,000,000 个节点的网络中只需要 20 跳) 地找到拥有数据的节点, 从而检索该数据, 并使用哈希验证这是否是正确的数据.
不幸的是, IPFS 被 墙 了. 如果你有幸能翻墙, 你可以通过通过下面的命令下载并安装预编译的 ipfs 工具.
- tar xvfz go-ipfs.tar.gz
- cd go-ipfs
- ./install.sh
然后初始化仓库:
- > ipfs init
- initializing ipfs node at /Users/jbenet/.go-ipfs
- generating 2048-bit RSA keypair...done
peer identity: Qmcpo2iLBikrdf1d6QU6vXuNb6P7hwrbNPW9kLAH8eG67z
to get started, enter:
ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme
它默认会在你的 Home 下创建一个 .ipfs 文件夹.
ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme
查看 ipfs 网络上的一个文件, 正常你可以看到这个文件的内容.
你可以使用 ipfs add 上传文件, ipfs cat 查看文件. 当然 ipfs 包含很多的命令, 你可以在 https://ipfs.io/docs/commands/ 页面查看每个命令.
默认 IPFS 会通过一些种子连接到 IPFS 全球网络, 如果你想搭建一个私有的 IPFS 网络, 可以使用本文下面介绍的方法.
初始化一个私有仓库
命令同上
ipfs init
默认 $IPFS_PATH 为 $Home\.ipfs 文件夹.
创建共享的 key
使用 https://github.com/Kubuxu/go-ipfs-swarm-key-gen 创建私有网络共享的 key, 私有网络的所有的节点都使用这个 key, 不使用这个 key 的节点无法加入这个私有网络.
- go get github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen
- ipfs-swarm-key-gen> ~/.ipfs/swarm.key
移除默认的 bootstrap 节点
为了不连接全球的 IPFS 网络, 你需要将默认的 bootstrap 的节点信息删除.
ipfs bootstrap rm --all
加入私有网络
如果是第一个节点, 这一步可以省略.
如果你已经知道了私有网络的一些节点, 你可以把它们作为 bootstrap 节点.
ipfs bootstrap add <multiaddr>
例如
ipfs bootstrap add /ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64
设置 LIBP2P_FORCE_PNET
设置环境变量 LIBP2P_FORCE_PNET 为 1 .
export LIBP2P_FORCE_PNET=1
测试
在一个节点上增加一个文件, 然后在另外一个节点 cat 这个文件, 看看是否成功了.
参考资料
- http://www.infoq.com/cn/articles/ipfs
- https://github.com/ipfs/go-ipfs/blob/master/docs/experimental-features.md#private-networks
来源: http://www.tuicool.com/articles/zEnq6nf