一.概念:
IPFS是一个点对点的分布式超媒体分发协议,愿景是取代HTTP成为新一代协议
二.IPFS工作原理:
- IPNS(去中心化的命名系统),每个文件都可以被命名为易读的名字。通过搜索名字来找到文件。(思考:命名系统原理)
- 查找文件时,通过文件的哈希在网络中查找存储该文件的节点,再找到想要的文件
- IPFS网络节点只存储感兴趣的内容及相关索引信息
- IPFS通过网络删除具有相同哈希值的文件,通过计算判断文件的重复,还可以跟踪每个文件的历史记录
- 每个文件以及其中所有内容都被赋予一个加密散列的唯一指纹
三.HTTP与IPFS
HTTP:超文本传输协议
HTTP目前所存在的问题:
- 效率低下
- 历史文件存储,--网页平均使用寿命有限,大量的网站文件不能长期保存。也可能因为操作等原因永久删除一些重要文件
- 中心化:中心化网络容易被控制
- HTTP网络应用太依赖骨干网络,通过大量备份保证数据安全
IPFS:IPFS是一个分布式存储和共享文件网络传输的协议。它是一种内容寻址的超媒体分发协议,在IPFS网络中,所有节点构成一个分布式文件系统。
IPFS特点:
- 内容寻址,而不是域名寻址。文件(内容)具有存在的唯一性,一个文件加入IPFS网络之后,会被赋予一个唯一的哈希值。
- 历史版本控制器(git),可追溯
- IPFS网络数据基于区块链
- 通过使用FILECOIN代币进行激励,让每一个网络节点有动力存储数据。
- FileCoin:ipfs的加密货币。矿工提供开放的硬盘空间获取filecoin,用户使用FileCoin来支付在去中心网络中所需要获取的文件的费用。
四.IPFS相关操作
安装与配置:
创建一个IPFS节点,ipfs init
查看: ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme
进入 cd ~/.ipfs
设置环境变量:export EDITOR=/usr/bin/vim
查看配置:ipfs config edit
PeerID:就是当前节点id
查看节点ID: ipfs id
启动节点:ipfs daemon
验证:在浏览器中输入http://localhost:5001/webui
- mac下安装配置ipfs详见:https://www.jianshu.com/p/ef88c977ee68
跨域设置
- 概念:当一个资源从与服务器不同的域或者端口请求其它资源时,发起的是一个跨域请求。在浏览器中,是会限制从脚本内发起的跨域HTTP请求。
- 同源:域名、协议、端口都相同被称为同源
- 添加跨域资源共享配置
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 add filename
- 通过地址查找内容:ipfs cat 地址
- 新建终端并同步:ipfs daemon
- 通过ipfs的数据浏览器查看:http://ipfs.io/ipfs/hash(需要翻墙)
通过IPFS创建目录存储文件:
- 创建目录: ipfs files mkdir /troy
- 拷贝文件: ipfs files cp /ipfs/hash /troy/test.txt
- 查看目录内容: ipfs files ls /troy/
- 查看拷贝的文件内容: ipfs files read /troy/test.txt
上传目录到IPFS:
- 新建目录,添加文件:ipfs add -r(递归添加) dir(新建的包含文件内容的目录)
- 通过路径访问指定目录中的文件
- 通过目录访问: ipfs cat txt地址
- 直接通过文件访问: ipfs cat 目录地址
- 在网络中查看:可以通过目录访问,也可以通过文件哈希直接访问
创建简易网页发布到IPFS:
- 新建html页面
- 添加到ipfs
- 重启服务,同步数据 ipfs daemon
- 访问数据
- 发布到IPNS,返回当前节点的ID,如果修改了网站内容,哈希值会发生变化,在网站更新的时候可以将网站发布到IPNS上面。
- 命令:ipfs name publish hash
- 访问IPNS:http://ipfs.io/ipns/hash(节点ID)
发布一个极简博客:
- Hugo:一个用go语言写的静态网站生成器
- 安装:sudo apt-get install hugo
- 检查:hugo version
- 新建网站模型:hugo new site 1801
- 添加主题:
- Git init
- git submodule add https://github.com/themefisher/navigator-hugo.git
- git submodule add:将一个已经存在的git仓库添加为正在工作的仓库的子模块
- echo 'theme = "ananke"' >> config.toml
js-ipfs-api的使用:
- 前端框架:create-react-app
- 安装:sudo npm install -g create-react-app
- 创建react项目:create-react-app projectname(翻墙)
- 安装ipfs-api : npm install --save ipfs-api
- 要实现的功能:通过浏览器将内容文本存入IPFS中
- 导入IPFS
- 实现后台逻辑
- 实现前端渲染
实现图片的上传与下载
实现IPFS+以太坊存储:truffle unbox react