项目中需要使用ipfs,所以自己搭建一个。
准备几台虚拟机,不分主从,我用的是centos7,下面的教程也是基于centos7.
4台虚拟机
主机名 | ip | 说明 |
---|---|---|
centos-11 | *.*.*.11 |
不分主从 01 |
centos-12 | *.*.*.12 |
不分主从 02 |
centos-13 | *.*.*.13 |
不分主从 03 |
centos-14 | *.*.*.14 |
不分主从 04 |
//各节点都要执行
1.到ipfs官网下载安装包 (直接使用已编译版本,也可以自己编译)
https://ipfs.io/ipns/dist.ipfs.io/go-ipfs/v0.4.22/go-ipfs_v0.4.22_linux-amd64.tar.gz
2.解压
tar xvfz go-ipfs_v0.4.22_linux-amd64.tar.gz
3.安装
cd go-ipfs
./install.sh
4.测试
ipfs help
如果测试失败,检查/usr/local/bin路径是否处于PATH中。如无则添加到/etc/profile中
各节点都要执行
ipfs init
//生成的结果如下:
initializing IPFS node at /root/.ipfs
generating 2048-bit RSA keypair...done
peer identity: QmPMo2L*************zDCGScNN
to get started, enter:
ipfs cat /ipfs/QmS4ustL54*******a8nUH4uVv/readme
01:Qmee3b4p*********************YniPJynb
02:QmZfJxkA*********************gkm7hzFE
03:QmPaid8k*********************cBBTuU6k
04:QmPMo2LV*********************DfCGScNN
在各个节点的home目录新增了ipfs的文件夹.ipfs:
cd ~/.ipfs
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials '["true"]'
注意: 开发环境设置中“*”意为允许所有域名访问,生产环境下应该将跨域设置为指定域名或关闭跨域
私有网络内所有节点需要共享一套密钥
在任意一个虚拟机上执行
1.下载密钥工具
go get -u github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen
2.生成密钥
ipfs-swarm-key-gen > ~/.ipfs/swarm.key
3.将密钥分发到各个节点
scp ~/.ipfs/swarm.key root@*.*.*.11:~/.ipfs/
scp ~/.ipfs/swarm.key root@*.*.*.12:~/.ipfs/
scp ~/.ipfs/swarm.key root@*.*.*.13:~/.ipfs/
上面省略的是ip地址
所有节点执行
1.删除默认启动节点(删除公网节点)
ipfs bootstrap rm all
2.各节点分别将其他节点添加到bootstrap列表
ipfs bootstrap add /ip4/被添加节点的ip地址/tcp/4001/ipfs/被添加节点的ID值
//11服务器:
ipfs bootstrap add /ip4/*.*.*.12/tcp/4001/ipfs/QmZfJ********gkm7hzE
ipfs bootstrap add /ip4/*.*.*.13/tcp/4001/ipfs/QmPai********BBTuU6k
ipfs bootstrap add /ip4/*.*.*.14/tcp/4001/ipfs/QmPMo********zDCScNN
//12服务器:
ipfs bootstrap add /ip4/*.*.*.11/tcp/4001/ipfs/Qmee3********niPJynb
ipfs bootstrap add /ip4/*.*.*.13/tcp/4001/ipfs/QmPai********GcBuU6k
ipfs bootstrap add /ip4/*.*.*.14/tcp/4001/ipfs/QmPMo********DCGScNN
//13服务器:
ipfs bootstrap add /ip4/*.*.*.11/tcp/4001/ipfs/Qmee3********niPJynb
ipfs bootstrap add /ip4/*.*.*.12/tcp/4001/ipfs/QmZfJ********iP7hzFE
ipfs bootstrap add /ip4/*.*.*.14/tcp/4001/ipfs/QmPMo********zFGScNN
//14服务器:
ipfs bootstrap add /ip4/*.*.*.11/tcp/4001/ipfs/Qmee3********niPJynb
ipfs bootstrap add /ip4/*.*.*.12/tcp/4001/ipfs/QmZfJ********km7hzFE
ipfs bootstrap add /ip4/*.*.*.13/tcp/4001/ipfs/QmPai********GBTuU6k
3.启动节点
ipfs deamon
//后台启动 nohup ipfs daemon &
4.测试
在14机器上传文件:
ipfs add a.tar.gz
//输出:
//added QmUct****************nwwXQQ a.tar.gz
//5.10 MiB / 5.10 MiB [=============================] 100.00%
在其他机器下载:
ipfs get QmUct***************nwwXQQ
//输出:
//Saving file(s) to QmUct********************nwwXQQ
//5.10 MiB / 5.10 MiB [=============================] 100.00% 0s
注意:
- daemon守护进程如果直接运行,关闭会话窗口后就会失效
- daemon守护进程前台运行状态下,使用CTRL+C退出
- daemon后台启动后需要使用kill -9命令杀死才能停止
- 每一次修改config后都需要重启daemon
关闭所有daemon后所有节点都需要执行:
cd /lib/systemd/system/
vim ipfs.service
[Unit]
Description=IPFS
[Service]
ExecStart=/usr/local/bin/ipfs daemon
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target
:wq
service ipfs start
在11服务器内的任意位置执行以下命令:
git clone https://github.com/ipfs/webui
cd webui
npm install
npm start
成功后访问 http://*.*.*.11:3000
即可打开页面
如果页面显示 Failed to connect to the API. 需要在页面下方的API ADDRESS处配置API地址:
/ip4/*.*.*.11/tcp/5001
所有命令行支持的命令都有对应的Restful api实现,官方文档:
https://docs.ipfs.io/reference/api/http/
中文参考:
https://blog.csdn.net/weixin_43132569/article/details/82628570
有GO语言实现的SDK:
https://github.com/ipfs/go-ipfs-api
ipfs id报错
Error: cannot connect to the api. Is the deamon running? To run as a standalone CLI command remove the api file in $IPFS_PATH/api
解决方法:删除~/.ipfs/api重试即可