学习IPFS

 

注:以下所有操作均在CentOS 6.8 x86_64位系统下完成。

 

IPFS(InterPlanetary File System)是一个点对点的分布式超媒体分发协议,被认为是最有可能取代HTTP的新一代互联网协议,关于IPFS的更多介绍可参考:IPFS官网

#准备工作#

在下载IPFS之前可能需要“科学上网”,详见:Centos安装Shadowsocks+安装Privoxy+配置SSH使用代理

#安装IPFS#

这里我们直接下载其官方编译好的版本(Prebuilt Package)。

# wget https://dist.ipfs.io/go-ipfs/v0.4.14/go-ipfs_v0.4.14_linux-amd64.tar.gz
# tar zxf go-ipfs_v0.4.14_linux-amd64.tar.gz
# mv go-ipfs /usr/local/

配置环境:

# vim /etc/profile
...
export IPFS_HOME=/usr/local/go-ipfs
export PATH=$PATH:IPFS_HOME
...
# source /etc/profile
# ipfs version
ipfs version 0.4.14

可以看到IPFS已经安装成功。

#使用IPFS#

一、创建IPFS节点

# ipfs init
initializing IPFS node at /root/.ipfs
generating 2048-bit RSA keypair...done
peer identity: QmTW4AoQABDBxQwa4fn5yEqhAKXx2fyFXkksy6LQuDQWK1
to get started, enter:
        ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

这个时候默认会在~/目录下创建一个.ipfs的目录,里面包含了配置文件信息等。可以自由进行修改(比如可以把默认的10GB存储空间改小点):

# vim /root/.ipfs/config
...
  "Datastore": {
    "StorageMax": "10GB",
    ...
  },
  "Addresses": {
    "Swarm": [
      "/ip4/0.0.0.0/tcp/4001",
      "/ip6/::/tcp/4001"
    ],
...
  }
...

也可以自己选择指定的IPFS目录:

# mkdir -p /data/ipfs
# vim /etc/profile
...
export IPFS_PATH=/data/ipfs
...
# source /etc/profile
# ipfs init
generating 2048-bit RSA keypair...done
peer identity: QmQa7NH5w7pxz34Sme96GUM8dH14upF3H67PDCX8nKXp4T
to get started, enter:
        ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

这里将IPFS目录改为/data/ipfs。

二、查看节点ID

# ipfs id
{
        "ID": "QmQa7NH5w7pxz34Sme96GUM8dH14upF3H67PDCX8nKXp4T",
        "PublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDdpn...",
        "Addresses": null,
        "AgentVersion": "go-ipfs/0.4.14/",
        "ProtocolVersion": "ipfs/0.1.0"
}

这里可以看到QmQa7NH5w7pxz34Sme96GUM8dH14upF3H67PDCX8nKXp4T就是当前节点的ID值,每个节点都有一个唯一的ID值。

三、跨域资源共享

# ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST", "OPTIONS"]'
# ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'

四、启动服务器

当前IPFS节点虽然创建成功,但还没有启动加入到IPFS网络,外面无法访问,需要启动服务器:

# ipfs daemon &
Initializing daemon...
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip4/172.18.167.60/tcp/4001
Swarm listening on /p2p-circuit/ipfs/QmQa7NH5w7pxz34Sme96GUM8dH14upF3H67PDCX8nKXp4T
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip4/172.18.167.60/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready

五、新增文件

我们可以将本地的一个文件添加到IPFS网络中:

# pwd
/root
# vim foo.txt
...
# cat foo.txt
Hello World

# ipfs add foo.txt
added QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u foo.txt
# ipfs cat QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u
Hello World

这个时候我们已经将一个文件foo.txt添加到当前的IPFS节点中,并且可以通过生成的唯一哈希值QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u来查看该文件内容,接下来我们需要将其同步到IPFS网络中:

# ipfs daemon &
Initializing daemon...
...
Daemon is ready

我们试着在本地浏览器打开地址(https://ipfs.io/ipfs/QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u)查看文件:

可以看到文件已经成功地同步到了IPFS网络中。

六、新增文件夹

接下来我们可以在IPFS的根目录下创建文件夹,并且可以将foo.txt文件cp或mv到新创建的文件夹中。

# ipfs files mkdir /foo
# ipfs files cp /ipfs/QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u /foo/foo.txt
# ipfs files ls /
foo
# ipfs files ls /foo
foo.txt
# ipfs files read /foo/foo.txt
Hello World

可以看到我们已经成功地将该文件cp到了一个foo的新建目录下,接下来我们尝试在本地创建一个目录并将其上传到IPFS网络中:

# mkdir bar
# vim bar/bar.txt
# cat bar/bar.txt
Hello World 2
# ipfs add -r bar/
added QmShGj2c1Qe2wQKMUNMx45EPoKsJmwewojrE1ETzXggUFG bar/bar.txt
added QmepZ8kfqvfDgLtaA7jiCZowXsgn63bKxJLS5NPNiqU2A9 bar

我们试着在本地浏览器打开地址(https://ipfs.io/ipfs/QmepZ8kfqvfDgLtaA7jiCZowXsgn63bKxJLS5NPNiqU2A9)查看文件夹:

 

posted @ 2018-04-21 11:57  brishenzhou  阅读(554)  评论(0编辑  收藏  举报