在B站看了黎跃春老师的教学视频,结合网上的资源和自己的操作整理的笔记,知识无价,感谢分享!
1.IPFS:
IPFS (InterPlanetary File System)是个点对点的分布式超媒体分发协议,它整合了过去几年最好的分布式系统思路,为所有人提供全球统的可寻址空间,包括Git、自证明文件系统SFS、BitTorrent 和DHT,同时也被认为是最有可能取代HTTP的新一代互联网协议。
IPFS用基于内容的寻址替代传统的基于域名的寻址,用户不需要关心服务器的位置,不用考虑文件存储的名字和路径。我们将一个文件放到IPFS节点中,将会得到基于其内容计算出的唯一加密哈希值。 哈希值直接反映文件的内容,哪怕只修改1比特,哈希值也会完全不同.当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。
IPFS是通用目的的基础架构,基本没有存储上的限制。大文件会被切分成小的分块,下载的时候可以从多个服务器同时获取。IPFS的网络是不固定的,细粒度的,分布式的网络,可以很好的适应内容分发网络的要求。这样的设计可以很好的共享各类数据,包括图像、视频流、分布式数据库、整个操作系统。
IPFS提供了一个友好的WEB访问接口,用户可通过[http://ipfs](http://ipfs/.io/hash获取IPFS网络中的内容,也许在不久的将来,IPFS协议将会彻底替代传统的HTTP协议。
大量数据上传区块链成本非常高,把数据上传到IPFS,把哈希传到区块链,通过哈希到IPFS上进行寻址。
IPFS的工作原理:
每个文件及其中的所有块都被赋予一个称为加密散列的唯一指纹。
IPFS通过网络删除重复具有相同哈希值的文件,通过计算是可以判断哪些文件是冗余重复的。并跟踪每个文件的版本历史记录。
每个网络节点只存储它感兴趣的内容,以及一些索引信息,有助于弄清楚谁在存储什么。
查找文件时,你通过文件的哈希值就可以在网络查找到储存改文件的节点,找到想要的文件。
-
使用称为IPNS(去中心化命名系统),每个文件都可以被协作命名为易读的名字。通过搜索,就能很容易地找到想要查看的文件。
从IPFS的介绍可以看出, IPFS设想的是让所有的网络终端节点不仅仅只充当 Browser或Client的角色,其实人人都可以作为这个网络的运营者,人人都可以是服务器。
“如果你把它(分布式账本)加到IPFS里,然后通过哈希算法把它录入区块里,那么你就可以通过IPFS直接在网上浏览交易以及文件。IPFS协议与区块链技术结合是个“完美的婚姻”。” ------Benet(IPFS创始人)
2. IPFS本地环境安装
2.1下载ipfs压缩包
百度搜索IPFS ,点击 try it
下载后,解压缩存档文件,并将ipfs二进制文件移动到可执行文件$PATH中的某个位置,使用install.sh脚本:
$ tar xvfz go-ipfs_v0.4.21_linux-amd64.tar.gz
$ cd go-ipfs
$ sudo ./install.sh
$ ipfs version
测试一下:
$ ipfs help
USAGE:
ipfs - Global p2p merkle-dag filesystem.
恭喜你!现在,您的计算机上已经安装了一个可以工作的IPFS。
Installing with ipfs-update
ipfs-update是一个命令行工具,用于安装和升级ipfs二进制文件。
Getting ipfs-update
ipfs-update can be downloaded for your platform at: https://dist.ipfs.io/#ipfs-update
If you have a working Go environment (>=1.8), you can also install it with:
$ go get -u [github.com/ipfs/ipfs-update](http://github.com/ipfs/ipfs-update)
安装ipfs的新版本或升级时,请确保使用最新版本的ipfs-update。
Installing ipfs with ipfs-update
ipfs-update版本列出所有可供下载的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
v0.3.10
v0.3.11
v0.4.0
v0.4.1
v0.4.2
v0.4.3
v0.4.4
v0.4.5
v0.4.6
v0.4.7-rc1
ipfs-update install latest 将安装最新可用的版本:
$ 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!
请注意,最新的可用版本可能不稳定(即表单中的候选版本vX.X.X-rcX)。因此,建议指定要安装的版本,例如:ipfs-update install v0.4.6。
3. 如何在本地创建一个IPFS节点
文件夹存储相关数据
通过节点连接的形式同步,将数据上传到整个IPFS网络。
cd ~/ 到主页面
在ubuntu下查看隐藏的文件和文件夹
ls -a 可以查看到隐藏的文件
此外 ,进入自己主目录,按ctrl+h也能看见以点号开头的隐藏文件
ipfs init 节点创建成功
ls -a 这回可以看到ipfs文件
cd .ipfs
节点已经创建成功,默认存储空间是10G,
我们要添加数据的时候,会先添加到本地的节点中,只有通过网络同步之后,才会把数据同步到整个IPFS网络,如果同步到IPFS网络后,就可以直接在公网查询数据。如果没有同步,就只能在本地即本机查询。
查看本地默认的存储空间是多大,如何修改:
执行完ipfs init命令后,会在根目录生成一个.ipfs的文件夹存储节点数据。.ipfs节点默认存储空间为10个G。
如果你自己想修改节点默认存储空间,可打开终端执行下面的命令,还是在.ipfs下。
$ export EDITOR=/usr/bin/vim
$ ipfs config edit
本步骤出问题是因为没有安装vim,打开一个新的terminal安装vim:
'$ sudo apt install vim'
再重新执行上面的两个语句。
执行完ipfs config edit命令后会打开一个文件,在这个文件中找到下图中绘制红线的位置,将10GB修改成你自己想要的存储空间。修改完毕,保存退出。(PS:输入i可以开始编辑,编译完毕后按esc键,再输入:,再次输入wq保存并且退出)。
如何区分本机节点和其他电脑的节点:
ipfs id
可以查看ID,ID是电脑的唯一标识,用于标识节点。
cd .. 切换回桌面
cd Desktop/
ls
mkdir 1124
cd 1124/
cat > file.txt
微信:liyc1215
Ctrl C退出
cat file.txt 查看当前文件的内容
如何将数据添加到本地的节点当中
ipfs add file.txt
将数据添加到ipfs中会返回一个哈希
QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T file.txt
已经往我们本地节点储存了一份数据
数据的文件名就是这个哈希,可以通过这个哈希找到这个文件的内容。
验证:
ipfs cat + hash
ipfs cat QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
返回当前写入节点中的数据
vi file.txt
修改数据,按i可以编辑,写完后,按ESC键,:wq 保存并退出
ipfs add file.txt
产生新的哈希
added QmXjapcc9QbEPpN78JpabCpwszjitsAyZm6Y4UHHLcJk2y.txt
ipfs cat QmXjapcc9QbEPpN78JpabCpwszjitsAyZm6Y4UHHLcJk2y
若想外网也可以访问,ipfs.io/ipfs/QmXjapcc9QbEPpN78JpabCpwszjitsAyZm6Y4UHHLcJk2y
就需要把数据同步到整个网络当中,现在只是存储在本地中。
4.同步、启动节点服务器
就可以将节点和其他节点进行同步,依然在./1124下。
ipfs daemon
ipfs.io/ipfs/QmXjapcc9QbEPpN78JpabCpwszjitsAyZm6Y4UHHLcJk2y
需要耐心等待
5.跨域资源共享CORS配置
为了后续的开发方便,我们还需要对跨域资源共享( CORS )进行配置,ctrl- c退出ipfs,然后按照下面的步骤进行跨域配置。
ctrl- c退出ipfs
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"]'
验证
- 启动服务器
$ ipfs daemon
- 新建终端执行下面的命令
$ ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme
localhost:~ yuechunli$
浏览器输入下面的网址
打开http://localhost:5001/webui会看到一个漂亮的UI界面。