Docker Compose部署IPFS私有集群
本文使用Docker Compose部署两节点IPFS私有集群。
下载IPFS镜像
bash
docker pull ipfs/go-ipfs
新建文件夹,存放节点数据。
bash
mkdir -p ipfsTest/node0/data
mkdir -p ipfsTest/node0/export
mkdir -p ipfsTest/node1/data
mkdir -p ipfsTest/node1/export
生成搭建私有网络所需的swarm.key密钥。
bash
go install github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen@latest
# 在$GOPATH/bin/下会有ipfs-swarm-key-gen的二进制文件
cd $GOPATH/bin
./ipfs-swarm-key-gen > swarm.key
cp swarm.key ipfsTest/node0/data
mv swarm.key ipfsTest/node1/data
编写如下docker-compose.yml
yaml
version: "3"
services:
ipfs_node0:
container_name: ipfs_node0
image: ipfs/go-ipfs:latest
restart: always
volumes:
- /path/to/ipfsTest/node0/export:/export # 修改
- /path/to/ipfsTest/node0/data:/data/ipfs # 修改
ports:
- 4001:4001 # IPFS节点之间的P2P网络通信
- 8080:8080 # 用于通过HTTP访问内容的Web网关
- 5001:5001 # 用于与IPFS节点进行编程交互的RESTful API
ipfs_node1:
container_name: ipfs_node1
image: ipfs/go-ipfs:latest
restart: always
volumes:
- /path/to/ipfsTest/node1/export:/export # 修改
- /path/to/ipfsTest/node1/data:/data/ipfs # 修改
ports:
- 4002:4001
- 8081:8080
- 5002:5001
以上四处注释修改的地方,把/path/to/改为你的具体路径。
启动集群
bash
docker-compose up -d
开两个终端,分别进入容器内部,
bash
docker exec -it ipfs_node0 /bin/sh #第一个终端
docker exec -it ipfs_node1 /bin/sh #第二个终端
执行
bash
ipfs id
可以在Addresses看到自己的地址信息,因为是通过docker-compose启动,所以我们无法使用/ip4/127.0.0.1/...
这个地址连接另外一个节点,使用另外一个容器之间可以ping通的地址。
在ipfs_node1容器中,执行
bash
ipfs bootstrap add /ip4/172.20.0.3/tcp/4001/p2p/12D3KooWP2kkpUd8rRNLnY118B4UcvJB9VjvXoQmeXkxzGxUrChcgTNDLtANKHWLP #这里填写ipfs_node0的Address
来连接ipfs_node0。
ipfs_node0连接ipfs_node1为相同的操作。
在容器中执行
bash
ipfs swarm peers
可以看到已连接节点。
测试一下,node0发布文件,node1通过哈希值获取文件
bash
ipfs add /data/ipfs/version
log:
added QmNtaCdRAmsR2cG4dvhfAc8eZv1kaGYoAPGZjec2KY4yG6 version
3 B / 3 B [============================================] 100.00%/ #
在node1上获取
bash
ipfs cat QmNtaCdRAmsR2cG4dvhfAc8eZv1kaGYoAPGZjec2KY4yG6
log:
bash
11
成功。
注意这种方法搭建,访问webui页面不会成功,因为webui的文件在docker安装完时本地是没有webui的代码的。加入公网可以访问webui,是因为节点会从其他节点下载对应的资源到节点的blocks目录下。