IPFS环境配置和简单使用

IPFS笔记

Posted by Liu Ke on September 25, 2018

Contents

  1. 下载和安装
  2. 配置
    1. 创建ipfs节点
    2. 查看节点ID
    3. 跨域资源共享CORS配置
  3. 启动节点服务器
  4. 上传文件到IPFS
    1. 上传文件
    2. 从IPFS网络查看数据
    3. 本地节点文件管理
    4. 上传整个文件夹

下载和安装

IPFS用基于内容的寻址替代传统的基于域名的寻址,文件存入IPFS网络时会得到文件的哈希值,通过这个哈希值可以由分布式的哈希表找到并查看这个文件。

从官网下载系统对应的go-ipfs压缩包https://dist.ipfs.io/#go-ipfs

All Versions文件夹中有所有历史版本可以选择

解压下载的压缩包.

$ tar -xvzf go-ipfs_v0.4.17_linux-amd64.tar.gz

将解压后的go-ipfs文件夹中的ipfs文件移动到/usr/local/bin/目录下。

$ cd go-ipfs
$ mv ipfs /usr/local/bin/ipfs

配置

创建ipfs节点

第一次使用时,用ipfs init命令在本地计算机建立一个ipfs节点,并返回节点ID。

$ ipfs init

运行上述命令之后,会出现~/.ipfs这个隐藏目录,这个文件夹中的config文件为本地ipfs节点的配置文件。

查看节点ID

使用ipfs id命令可以查看本地节点的ID。

$ ipfs id
{
	"ID": "QmPQjWDsgM2r8iREsd9NAUPKgFEgJTQjrsdzRvnv23ZMde",
	"PublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCoyvZ5M5mvpEX4VN/br3BGVCNxVs1h+5oxwOeby8kU0N8nUQ9n2CVOypsoXX7b6F0eyDY8tAIxtJQ+rQyC/4AYSAyN685ZCBxD7B+Bx7Qt53R/ZIEa3Qd4Gdg9EAeSCvB+G+bdnrNp48uJHMG3Z525tJUTYprid864SWbYGrlY9MLYTGfr2N2nBrP14f6t2rUGldmOANGFh/Ythx1MhJ6bnTAFk8Ke1LVhHIrLtnN+o/50Vn0GKwGHPRc6P1/n0+OQq/yHZs7+em7l3fCqBqfvQyAPNLOhE1BaUy/eJYnNB1Ia28LEXu7RveOTS0mCeuA3tj/g+1hEuqRBvvh4TV3FAgMBAAE=",
	"Addresses": [
		"/ip4/127.0.0.1/tcp/4001/ipfs/QmPQjWDsgM2r8iREsd9NAUPKgFEgJTQjrsdzRvnv23ZMde",
		"/ip4/192.168.93.132/tcp/4001/ipfs/QmPQjWDsgM2r8iREsd9NAUPKgFEgJTQjrsdzRvnv23ZMde",
		"/ip6/::1/tcp/4001/ipfs/QmPQjWDsgM2r8iREsd9NAUPKgFEgJTQjrsdzRvnv23ZMde"
	],
	"AgentVersion": "go-ipfs/0.4.17/",
	"ProtocolVersion": "ipfs/0.1.0"
}

修改节点默认存储空间

ipfs节点默认的存储空间为10GB,可以自定义修改为任意大小。打开~/.ipfs/config文件,找到"StorageMax": "10GB",将10GB修改为想要的大小,保存退出即可。

跨域资源共享CORS配置

如果要求外界能够访问,则需要配置对跨域资源共享CORS进行配置。使用如下命令配置:

$ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT","GET", "POST", "OPTIONS"]'
$ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
$ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials '["true"]'
$ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Headers '["Authorization"]'
$ ipfs config --json API.HTTPHeaders.Access-Control-Expose-Headers '["Location"]'

启动节点服务器

跨域资源共享CORS配置好之后,使用如下命令启动节点服务器:

$ ipfs daemon

通过ipfs daemon启动后,不要关闭终端,再新建一个终端,输入如下命令(需要节点ID):

$ ipfs cat /ipfs/QmPQjWDsgM2r8iREsd9NAUPKgFEgJTQjrsdzRvnv23ZMde/readme

在浏览器输入http://localhost:5001/webui,会看到如下的webUI界面。

上传文件到IPFS

上传文件

可通过ipfs help查看ipfs相关操作命令。

通过vi新建一个文件file.txt文件,文件内容为keliu.mewq保存退出。使用如下ipfs add命令将文件添加到当前ipfs节点,会返回该文件的哈希值:

$ ipfs add file.txt
added QmNo39sZ7Uwg7jkQMtW4FV8Kwv4tVikFYgtjbCmtDH9kCv file.txt
 9 B / 9 B [===========================================================] 100.00%

添加文件之后,需要新建一个终端,使用ipfs daemon命令同步节点数据到IPF网络。

从IPFS网络查看数据

节点数据同步到IPFS网络之后,就可以根据文件的哈希值直接通过浏览器查看文件内容。

直接在地址栏访问https://ipfs.io/ipfs/QmNo39sZ7Uwg7jkQMtW4FV8Kwv4tVikFYgtjbCmtDH9kCv,即可显示文件内容。

还可以通过ipfs cat命令和哈希值查看文件内容。

$ ipfs cat QmNo39sZ7Uwg7jkQMtW4FV8Kwv4tVikFYgtjbCmtDH9kCv
keliu.me

本地节点文件管理

可以通过ipfs files相关命令在本地节点的ipfs根目录下创建文件夹,并能通过命令移动文件。文件相关命令和Linux文件管理的命令很相似。

$ ipfs files mkdir /ke
$ ipfs files cp /ipfs/QmNo39sZ7Uwg7jkQMtW4FV8Kwv4tVikFYgtjbCmtDH9kCv /ke/file.txt
$ ipfs files ls
ke
$ ipfs files ls /ke
file.txt

需要注意的是:cp命令不会改变文件的哈希值,但是mv会改变hash寻址。如果直接通过哈希值访问文件,改变文件在本地节点存放的文件夹位置,不会影响通过哈希值的访问。

可以在ipfs的webUI里的Files下看到本地节点的文件夹情况。

上传整个文件夹

可以使用ipfs add -r上传整个目录到IPFS网络。

新建两个文件,myBlog.txt内容依然为keliu.memyGithub.txt内容为github.com/dugu0808。上传整个文件夹。

$ vi myGithub.txt
$ vi myBlog.txt
$ ipfs add -r ~/Desktop/documents/
added QmNo39sZ7Uwg7jkQMtW4FV8Kwv4tVikFYgtjbCmtDH9kCv documents/file.txt
added QmNo39sZ7Uwg7jkQMtW4FV8Kwv4tVikFYgtjbCmtDH9kCv documents/myBlog.txt
added QmXmsSsxcDg41YyudbrSBhLweaqSSKbN5NgZteKwUcSh8u documents/myGithub.txt
added QmdjKM3DXNiK6vumwbJmvK48raNcjhASK38ykq4d8YtwhR documents

可以在浏览器里查看。我们可以发现,虽然file.txtmyBlog.txt文件名不同,但是内容相同,他们在IPFS上的哈希值和大小是完全一致的。


Fork me on GitHub