搭建IPFS网络私网教程

前言

项目中需要使用ipfs,所以自己搭建一个。

1. 准备机器

准备几台虚拟机,不分主从,我用的是centos7,下面的教程也是基于centos7.

4台虚拟机

主机名 ip 说明
centos-11 *.*.*.11 不分主从 01
centos-12 *.*.*.12 不分主从 02
centos-13 *.*.*.13 不分主从 03
centos-14 *.*.*.14 不分主从 04

2. 下载与安装

//各节点都要执行
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中

3. 初始化节点

各节点都要执行

  1. 初始化
 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
  1. 记下节点id:
01:Qmee3b4p*********************YniPJynb
02:QmZfJxkA*********************gkm7hzFE
03:QmPaid8k*********************cBBTuU6k
04:QmPMo2LV*********************DfCGScNN
在各个节点的home目录新增了ipfs的文件夹.ipfs:
cd ~/.ipfs
  1. 修改存储容量
    修改~/.ipfs/config中"StorageMax"字段即可(目前默认为10GB)
  2. 修改访问路径
    IPFS的API和GATEWAY默认访问路径为127.0.0.1.如需要其他机器访问,需要修改~/.ipfs/config中API和GATEWAY字段,将127.0.0.1替换为0.0.0.0
  3. http corps问题
    非本地访问会产生跨域问题,需要在设置中注明。
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. 查看节点ID
    如果忘记了id,可以通过ipfs id命令查看

4. 创建共享密钥

私有网络内所有节点需要共享一套密钥

在任意一个虚拟机上执行

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地址

5. 添加启动节点

所有节点执行

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

注意:

  1. daemon守护进程如果直接运行,关闭会话窗口后就会失效
  2. daemon守护进程前台运行状态下,使用CTRL+C退出
  3. daemon后台启动后需要使用kill -9命令杀死才能停止
  4. 每一次修改config后都需要重启daemon

6. 设置ipfs服务

关闭所有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

7.安装可视化管理页面WEBUI

在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

8.API

所有命令行支持的命令都有对应的Restful api实现,官方文档:

https://docs.ipfs.io/reference/api/http/

中文参考:

https://blog.csdn.net/weixin_43132569/article/details/82628570

SDK

有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重试即可

你可能感兴趣的:(IPFS)