IPFS技术系列之IPFS实践应用

前言

本文主要介绍如何使用IPFS及常规操作


一、IPFS开发基础

在这部分主要介绍IPFS的环境搭建及常用操作。

1.安装IPFS

1.1 通过安装包安装

IPFS有多种语言的实现方式,主流的是Go语言和JavaScript实现的版本,本文主要介绍Go语言版本。
首先安装IPFS之前,需要安装大于1.7版本的Go语言环境。
1.在IPFS官网(https://dist.ipfs.io/#go-ipfs)下载go-ipfs的预编译版本。
在这里插入图片描述
Mac OS X系统用户请下载darwin Binary amd64。
·Linux系统用户请下载linux Binary amd64。
·Windows系统用户请下载windows Binary amd64.

国内用户也可以通过官方开放在GitHub上的源 码仓库来获取最新发布的安装包:https://github.com/ipfs/go-ipfs/releases。
以centos为例:
依次执行以下操作:

tar xvfz go-ipfs_v0.4.16_darwin-amd64.tar.gz
cd go-ipfs 
./install.sh

执行ipfs -help命令,会出现如下界面,表示安装完成
在这里插入图片描述

1.2 通过ipfs-update安装

ipfs-update是一个用来更新IPFS版本的命令行工具
我们可以通过 下面两种方式获得该命令:
1)直接从https://dist.ipfs.io/#ipfs-update 下载,解压安装包,运行 install.sh脚本进行安装。
2)如果Go语言版本高于1.8,也可以直接用以下方式安装:

>go get -u github.com/ipfs/ipfs-update

通过ipfs-update versions命令,可以列出所有可下载的IPFS版本

>ipfs-update versions
 v0.3.2 
 v0.3.4
 v0.3.5 
 v0.3.6
 v0.3.7 
 v0.3.8 
 v0.3.9 

通过ipfs-update install latest命令更新并下载最新的go-ipfs版本

$ipfs-update install latest 
fetching go-ipfs version v0.4.7-rc1 
binary downloaded, verifying... 
success! 
stashing old binary 
installing new binary to /home/hector/go/bin/ipfs
checking if repo migration is needed... 
Installation complete!

2 IPFS仓库配置初始化

2.1 初始化

1.使用ipfs init命令来初始化IPFS仓库。

$ ipfs init 
initializing ipfs node at /Users/daijiale/.go-ipfs
generating 2048-bit RSA keypair...done
peer identity: Qmcpo2iLBikrdf1d6QU6vXuNb6P7hwrbNPW9kLAH8eG67z
to get started, enter:
ipfs  cat/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme

2.通过IPFS查看文件的指令打开IPFS的readme

ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme

配置成功之后会出现以下界面:
在这里插入图片描述

2.2 访问配置文件

IPFS本地仓库文件默认存储在~/.ipfs路径下

>ls ~/.ipfs blocks datastore keystore config datastore_spec version

下面介绍几个仓库归档文件的作用:
·blocks:本地仓库存储的CID文件块链接目录。
·keystore:密钥对文件存储目录。
·datastore:LevelDB数据文件目录。
·datastore_spec:LevelDB数据文件缓存目录。
·config:仓库配置文件。 ·version:版本信息文件。
配置文件是json格式,我们可以通过ipfs config show或vim config命 令来查看和编辑内容。

3.与IPFS文件系统进行交互

下面将介绍本地文件与IPFS文件系统交互的几种常用方式。

1.添加文件到IPFS

//切换到本地桌面目录下 
$ cd ~/Desktop 
//新建ipfs-test文件目录 
$ mkdir ipfs-test 
//切换到ipfs-test文件目录 
$ cd ipfs-test 
//新建文件的同时写入一串字符串:"version 1 of my text"
 $ echo "version 1 of my text" > mytextfile.txt 
 //查看mytextfile.txt文件内容 
 $ cat mytextfile.txt version 1 of my text 
 //将mytextfile.txt文件添加到IPFS文件系统中 
 $ ipfs add mytextfile.txt 
 added QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy mytextfile.txt

2.我们可以通过ipfs cat CID命令读取IPFS网络中文件内容。

//在IPFS网络中查看验证刚才上传的mytextfile.txt文件内容 
$ ipfs cat QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy
 version 1 of my text

3.内容唯一性验证

我们可以直接将文件内容添加到IPFS中来测试文件hash(CID)是否与文件内容本身一一对应。
我们可以通过三种方式进行验证。
1)将内容添加到IPFS文件系统中

$ echo "version 1 of my text" | ipfs add added QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy
QmZtmD2qt6fJot32nabSP3CUjicnypEB

2).将相同内容的文本添加到IPFS文件系统中

$ ipfs add mytextfile.txt added 
QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy mytextfile.txt

3).将mytextfile.txt文本中的内容取出加入IPFS文件系统中

$ cat mytextfile.txt | ipfs add added QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy
 QmZtmD2qt6fJot32nabSP3CUjicnypEB

通过3种方式对比校验,我们可以看出,只有内容保存不变,得到的CID也会不变。

4.在IPFS中写入内容文件名称和目录信息

使用ipfs add -w CID命令再一次向IPFS中添加mytextfile.txt

$ ipfs add -w mytextfile.txt
 added QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy mytextfile.txt 
 added QmPvaEQFVvuiaYzkSVUp23iHTQeEUpDaJnP8U7C3PqE57w

由此可见,将会得到两个哈希值。第一个与之前的相同,第二个代表IPFS
Wrapped ,它包括了与内容相关的目录和文件名等信息。

5.展示IPFS Wrapped信息

我们可以通过ipfs ls -v 来获取IPFS Wrapped所包含都全部信息

$ ipfs ls -v QmPvaEQFVvuiaYzkSVUp23iHTQeEUpDaJnP8U7C3PqE57w 
Hash                                          Size Name
 QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy 29 mytextfile.txt

6.通过父目录内容哈希来获取文件内容

我们可以通过如下父目录内容哈希路径格式来获取文件内容

$ ipfs cat QmPvaEQFVvuiaYzkSVUp23iHTQeEUpDaJnP8U7C3PqE57w/mytextfile.txt
 version 1 of my text

4.加入IPFS网络环境

1)通过ipfs daemon命令,我们可以把本机的IPFS文件系统接入IPFS网络

> ipfs daemon
  Initializing daemon...
  API server listening on /ip4/127.0.0.1/tcp/5001
  Gateway server listening on /ip4/127.0.0.1/tcp/8080

2)如果接入成功,可以在
在运行ipfs swarm peers时能够看到p2p网络中对等 方的IPFS节点地址信息

> ipfs swarm peers 
/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
/ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx 
/ip4/134.121.64.93/tcp/1035/ipfs/QmWHyrPWQnsz1wxHR219ooJDYTvxJPyZuDUPSDpdsAovN5 
/ip4/178.62.8.190/tcp/4002/ipfs/QmdXzZ25cyzSF99csCQmmPZ1NTbWTe8qtKFaZKpZQPdTFB

5.与HTTP Web交互

要与HTTP Web交互,需要先启动守护进程连接网络服务。

ipfs daemon

1.从本地HTTP网关中获取IPFS数据

我们可以在浏览器输入以下命令

http://localhost:8080/ipfs/Qmd286K6pohQcTKYqnS1YhWrCiS4gz7Xi34sdwMe9USZ7u

2.从公共HTTP网关获取IPFS数据

公共网关是指可用于访问IPFS网络中任何内容的公共HTTP网络地址,官方提供了ipfs.io的域名网关地址。

//ipfs.io由官方提供
https://ipfs.io/ipfs/Qmd286K6pohQcTKYqnS1YhWrCiS4gz7Xi34sdwMe9USZ7u 
//ipfs.infura.io 由CONSENSYS团队提供 
https://ipfs.infura.io/ipfs/Qmd286K6pohQcTKYqnS1YhWrCiS4gz7Xi34sdwMe9USZ7u

3.IPFS Web控制台

IPFS提供了本地的Web控制台服务。浏览器输入http://localhost:5001/webui,可以直接访问Web控制台。如图:
在这里插入图片描述

6.API使用

IPFS搭建好之后除了命令行操作,还可以 使用API的方式调用。

1.IPFS命令行用法

IPFS命令行由-config(配置文件路径)、-debug(Debug模式操 作)、-help(帮助文档)等多种选项和一系列(子命令)构 成,命令格式如下:

ipfs [--config= <config> | -c] [--debug=<debug> | -D] [--help=<help>] [-h=<h>] [--local=<local> | -L

1).选项
IPFS命令行选项如下图:
在这里插入图片描述
2).子命令
操作IPFS的基本命令如下图:
在这里插入图片描述
操作IPFS数据结构的命令如下图:
在这里插入图片描述操作IPFS的高级命令如下图:
在这里插入图片描述
在这里插入图片描述
操作IPFS网络通信相关的命令:
在这里插入图片描述
控制IPFS相关辅助工具的命令如下:
在这里插入图片描述
IPFS在本地文件系统中有一个仓库,其默认位置为~/.ipfs,可以通 过设置环境变量IPFS_PATH改变仓库位置

export IPFS_PATH=/path/to/ipfsrepo

【遇到的坑】

在服务器端执行ipfs daemon后,关闭终端会相应造成守护进程停止,因此我们需要将ipfs服务
1.基于Linux服务器创建一个服务。

cd /lib/systemd/system/
vim ipfs.service

2.粘贴以下代码让IPFS遇到故障后能自动重启服务

[Unit]
Description=IPFS
[Service]
ExecStart=/usr/local/bin/ipfs daemon
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target

3.保存退出后执行命令

systemctl start ipfs

未对IPFS设置跨域会出现以下错误
1.在控制台执行以下命令

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"]'

2.最后命令行重新启动IPFS即可

systemctl start ipfs

二、IPFS开发进阶

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

猜你喜欢

转载自blog.csdn.net/ggj89/article/details/122537516