搭建 IPFS 私有网络

Build an IPFS private network

Posted by Jin on August 31, 2020

搭建 IPFS 私有网络

环境

两台 Linux 设备

步骤

创建 docker-compose.yml
通过 docker 创建 IPFS 容器
配置 IPFS API 以允许跨域资源共享(CORS)请求
共享密钥
移除默认的 bootstrap 节点
互相添加其他节点创建网络
测试 IPFS 私有网络是否搭建成功

创建 docker-compose.yml

version: '3.4'

services:

  ipfs_host:
    container_name: ipfs_host
    image: ipfs/go-ipfs:release
    restart: always
    ports:
      - "4001:4001" # ipfs swarm - expose if needed/wanted
      - "5101:5001" # ipfs api - expose if needed/wanted
      - "8180:8080" # ipfs gateway - expose if needed/wanted
    volumes:
      - ./data:/data/ipfs

通过 docker 创建 IPFS 容器

分别在 xxx.xx.x.111 和 xxx.xx.x.222 节点创建 IPFS 容器

运行 docker-compose 命令

docker-compose up -d

配置 IPFS API 以允许跨域资源共享(CORS)请求

分别在 xxx.xx.x.111 和 xxx.xx.x.222 节点配置跨域资源共享(CORS)请求

docker exec ipfs_host ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
docker exec ipfs_host ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST"]'

共享密钥

私有网络所有的节点必须共享同一个密钥,注意不要忘记这一点

私有链密钥生成工具生成密钥文件(go get 需要配置 golang 环境)

go get github.com/Kubuxu/go-ipfs-swarm-key-gen
cd $GOPAH/src/github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen
go build 
./ipfs-swarm-key-gen > ~/swarm.key

分别将生成的 swarm.key 拷贝至服务器挂载目录 data 文件夹下

scp ~/swarm.key 服务器用户名@服务器地址:/服务器挂载目录data文件夹所在路径

重启服务

docker restart ipfs_host

移除默认的 bootstrap 节点

分别在 xxx.xx.x.111 和 xxx.xx.x.222 节点移除默认的 bootstrap 节点

docker exec ipfs_host ipfs bootstrap rm --all

互相添加其他节点创建网络

获取 xxx.xx.x.111 节点信息

docker exec ipfs_host ipfs id
{
	"ID": "hash值",
	"PublicKey": "公钥值",
	"Addresses": [
		"/ip4/127.0.0.1/tcp/4001/ipfs/hash值",
		"/ip4/某个ip/tcp/4001/ipfs/hash值"
	],
	"AgentVersion": "go-ipfs/0.4.23/5b1687d",
	"ProtocolVersion": "ipfs/0.1.0"
}

xxx.xx.x.222 节点添加 xxx.xx.x.111

docker exec ipfs_host ipfs bootstrap add /ip4/xxx.xx.x.111/tcp/4001/ipfs/hash值

同样,在其他节点执行上述步骤,把对应的ip和hash值改成所要添加的节点信息

执行下面的指令,如果显示你之前所添加的节点信息,则代表该节点添加成功

docker exec ipfs_host ipfs swarm peers

测试 IPFS 私有网络是否搭建成功

在一台机器上执行下面的指令

docker exec ipfs_host ipfs add /data/ipfs/api

在另一台机器上执行下面的指令, 如果显示文件内容,则代表 IPFS 私有网络搭建成功

docker exec ipfs_host ipfs cat QmZGuZEmKBdcEsR7yiEevpS69nLKXYzmgjeoqiGrcT4RX3