ipfs区块链存储
-
- 安装请查看ipfs安装文档
-
- 总结:
- IPFS初始化
-
- 在服务器上运行ipfs
- 进入IPFS网络
- 切换回原始终端。如果您已连接到网络,则在运行时应该能够看到对等方的ipfs地址:
- 打开本地webui控制台
- IPFS配置修改
- 上传文件到IPFS
- 开启daemon服务,进入IPFS网络
- 上传目录到IPFS
- 使用IPNS解决文件更新问题
- 查询节点id指向的hash
- 多个站点更新,可以新生成一个秘钥对,使用新的key发布,如:
- Pining--把文件钉住,防止常使用不使用文件被“回收”
- 备份ipfs本地数据
安装请查看ipfs安装文档
总结:
大致步骤如下:
1、分别初始化3个ipfs节点。
ipfs init
2、删除ipfs默认的网关节点
ipfs bootstrap rm all
3、修改ipfs节点的API 和Gateway
ipfs config Addresses.Gateway /ip4/0.0.0.0/tcp/8080
ipfs config Addresses.API /ip4/0.0.0.0/tcp/5001
4、添加其中一台节点的地址到另一台节点的bootstrap列表中。
ipfs bootstrap add
5、设置环境变量LIBP2P_FORCE_PNET为1。
export LIBP2P_FORCE_PNET=1
IPFS初始化
# 执行初始化命令
ipfs init
# 执行完初始化命令后,会生成一个秘钥对并产生对应的节点id.即ipfs init 下方的peer identity
peer identity: 12D3KooWKwagJEtGiwQLRReNqHj5naRsXmD3MWdUWQnV2BcnVAd3
# 节点的id用来标识和连接一个节点,每个节点的id是独一无二的.
在服务器上运行ipfs
# 如果服务器上运行,则应使用server配置文件初始化IPFS 。这可以防止IPFS在尝试发现本地节点时创建大量数据中心内部流量:
ipfs init --profile server
进入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
# 记下你得到的tcp端口。如果它们不同,请在下列命令中使用您的。
切换回原始终端。如果您已连接到网络,则在运行时应该能够看到对等方的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
# 这些是/ipfs/的组合。
打开本地webui控制台
http://localhost:5001/webui
# 或
http://127.0.0.1:5001/webui
IPFS配置修改
# 在IPFS初始化之后,可以根据需要修改配置(可选),修改方法如下:
# cd到ipfs配置目录
cd ~/.ipfs
# 查看该目录下的文件
ls
# 得到的结果如下
#qiaofei@omaidb .ipfs % ls
# blocksdatastore keystore
# configdatastore_spec version
vim config#将Addresses节点下的"API": "/ip4/127.0.0.1/tcp/5001"改为
"API": "/ip4/0.0.0.0/tcp/5001"# 重新启动节点
ipfs daemon
上传文件到IPFS
# 我们先创建一个upchain.pro.txt文件,可以使用如下方式:
> echo "登链学院:区块链教育领先品牌" >> upchain.pro.txt
# ipfs 使用add 命令来添加内容到节点中, 在命令行输入:
> ipfs add upchain.pro.txt
added QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi upchain.pro.txt
43 B / 43 B [=====================================================] 100%
# 当它文件添加到节点时,会为文件生成唯一的hash: QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi, 可以使用ipfs cat 查看文件的内容:
> ipfs cat QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi
登链学院:区块链教育领先品牌# 此时文件仅仅只是上传到本地的IPFS节点中,如果需要把文件同步到网络,就需要开启daemon服务才同步到网络
开启daemon服务,进入IPFS网络
# 开启daemon服务
ipfs daemon
# 开启 daemon 之后,Swarm 就会尝试连接其他的节点,同步数据,同时在本地还会开启两个服务:API服务及Web网关服务,下面分别介绍下:
# ?API服务,默认在5001端口,可以通过 http://localhost:5001/webui[3] 进行访问,界面如:# ?网关服务,默认在8080端口, 由于当前浏览器还不支持通过IPFS协议(ipfs://)来访问文件,如果我们要在浏览器里访问文件的话,就需要借助于IPFS 提供的网关服务,由浏览器先访问到网关,网关去获取IPFS网络杀过了的文件。 有了网关服务,就可以通过这个链接:http://localhost:8080/ipfs/QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi 来访问刚刚上传到ipfs 的文件。
#ipfs 也提供了官方的网关服务:https://ipfs.io/,[4] 因此也可以通过 https://ipfs.io/ipfs/QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi[5] (需要访问外国网站)来访问刚刚上传到ipfs 的文件。
上传目录到IPFS
# 我们先创建一个文件夹upchain, 并把之前的 upchain.pro.txt 放进目录。
> mkdir upchain
> mv upchain.pro.txtupchain
# 上传upchain目录到IPFS
# 上传目录时要使用-r 参数
ipfs add -r upchain
# 在上传时文件夹,文件夹也会生成一个对应的hash,可以通过hash后接文件名来进行访问, 如:
>ipfs cat QmQYpGRFBpHVzoShpwU5C3XgGAxJKqY83X8VXfMbyktdbP/upchain.pro.txt
登链学院:区块链教育领先品牌#在浏览器可以链接:
http://127.0.0.1:8080/ipfs/QmQYpGRFBpHVzoShpwU5C3XgGAxJKqY83X8VXfMbyktdbP/upchain.pro.txt 来访问。
# 通过上传目录的方式,可以把整个静态网站的根目录上传到IPFS网络,这样就可以省去托管服务器,例如可以直接通过以下链接访问深入浅出区块链博客:
https://ipfs.io/ipfs/QmaFWgfpRNzeLgfDrH33BuBdiauRTejnF3Yw9AuCphq2ua/index.html
使用IPNS解决文件更新问题
# 因为IPFS在IPFS中,对一个文件的内容修改后(如升级),会生成一个完全不同的新Hash,使用IPNS就可以利用同一个链接总是指向更新的内容,其实使用也很简单,只需要每次在内容更新之后使用ipfs name publish hash 发布到节点。# 例如把upchain.pro.txt发布到节点,使用下面的命令:
> ipfs name publish QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi# 命令中的QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi是upchain.pro.txt的hash,
# 命令提示中的QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva是当前节点id(大家可以回看一个前面ipfs init 的输出)。# 发布之后就可以使用http://127.0.0.1:8080/ipns/QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva[7] 或 https://ipfs.io/ipns/QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva[8] 来访问upchain.pro.txt的内容# 修改文件后记得重新发布一下
ipfs name publish 文件哈希
查询节点id指向的hash
# 查询节点指向的哈希
ipfs name resolve
# 有一点值得大家注意: 节点id其实是公钥的hash,它的关联信息是需要经过私钥签名才可以发布,因此只有我们自己才可以更新节点的指向。
多个站点更新,可以新生成一个秘钥对,使用新的key发布,如:
> ipfs key gen --type=rsa --size=2048 mykey
QmVZvdYEsdfHSR43Qm1fY8eDFrhB3UNZ2oVyEuVUH3VHrg
> ipfs name publish --key=mykeyhashxxx
Pining–把文件钉住,防止常使用不使用文件被“回收”
# Pinning 在IPFS里是一个很重要的概念,当我们每次请求一个网络上的内容的时候,IPFS总是会把内容先同步的本地提供服务,而为了防止 IPFS 存储空间不停增长,实际上使用cache 机制来处理文件, 如果文件在一段时间内没有被使用,文件会被”回收“。 Pinning 的作用就是把文件”钉“住,确保文件在本地不被”回收“。 如果是重要的文件,就可以使用 Pinning 防止文件被删除。# 查询某个hash是否被pin:
# 下面这个是被pin的
ipfs pin ls QmUUiDN6tWtj89xmUw1iCK2NczBqE6m3zH9QnbhHoMvZ5S
QmUUiDN6tWtj89xmUw1iCK2NczBqE6m3zH9QnbhHoMvZ5S recursive
# 这个是没有被pin的
ipfs pin ls QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7
Error: path 'QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7' is not pinned# 手动钉住一个文件
> ipfs pin add QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7
pinned QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7 recursively
# 删除pin状态,-r参数是递归删除pin状态
> ipfs pin rm -r QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7
unpinned QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7
# 删除没有钉住的文件
# 对于没有pin住的文件, 如果执行GC操作 ipfs repo gc 文件会被删除。
ipfs repo gc
备份ipfs本地数据 【Linux存储|ipfs区块链存储】如果要切换电脑,可以自行备份下~/.ipfs目录即可
推荐阅读
- 游戏|Digital Fashion ——元宇宙里的下一个万亿机会
- 运维|CDH /HDP 何去何从()
- java|你知道哪些开源基金会()
- java|世界最著名的 16 个开源软件基金会,你认识哪几个呢()
- 比特币|加密支持者质疑马斯克组建比特币挖矿委员会(特斯拉要入局挖矿())
- 区块链|以太坊测试网络搭建
- 区块链|区块链技术的应用有哪些()
- 大数据|技术分享|新代币标准的讨论
- 分布式系统|区块链核心技术-P2P网络