环境
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
[root@localhost ~]# docker -v
Docker version 19.03.4, build 9013bf583a
/data/ipfs # ipfs version
ipfs version 0.6.0
192.168.11.11 一个节点
192.168.11.12 俩个节点
准备
安装 docker
安装 docker-compose(可选)
国内安装源
curl -L http://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
安装 https://github.com/Kubuxu/go-ipfs-swarm-key-gen
准备 docker-compose.yml
安装
1、下载镜像
docker pull ipfs/go-ipfs
2、创建docker-compose.yml
vim docker-compose.yml
version: "3"
services:
ipfs_host:
container_name: ipfs_host
image: ipfs/go-ipfs:latest
restart: always
volumes:
- /data/ipfs/node1/export:/export # (可不修改)修改 挂载目录 ./staging
- /data/ipfs/node1/data:/data/ipfs # (可不修改)修改 挂载目录 ./data
ports:
- 4001:4001
- 0.0.0.0:8080:8080
- 0.0.0.0:5001:5001
2.1、通过docker-compose启动ipfs
docker-compose up -d
3、生成秘钥
生成后将swarm.key复制到每一台节点,放在ipfs挂载的data目录,既docker-compose.yml中设置的/data/ipfs/node1/data:/data/ipfs
go get -u github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen
ipfs-swarm-key-gen > swarm.key
cat swarm.key
/key/swarm/psk/1.0.0/
/base16/
d4b429fa55b9b5f1ff97f9b2447e0920ba8fa68992f98e3b9e6bcdf3b93dbf62
4、节点加入网络
4.1、查看节点信息
添加之前可以通过docker exec ipfs_host ipfs id
查看节点信息,需注意/ip4/127.0.0.1/tcp/4001/p2p/QmTEh2sXwABnndZzNaQbHut49xJozWeq5R3PXTpbBcRKHx
[root@localhost data]# docker exec ipfs_host ipfs id
{
"ID": "QmTEh2sXwABnndZzNaQbHut49xJozWeq5R3PXTpbBcRKHx",
"PublicKey": "CAASpAIwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQCsPaRE6lUq5zZFvFGIrDaW9I/VbOEknp7A/raVvMJHYEe1gKL50V6UbCSxL+d07QNLlQKPyso15MLz3wRByPHNCBPX0dDReF2WSJN1PkTBfa43iZf0ZVgjElZtylb1FOToPFpJvaI7gH54+ScACcX+wrXcmwlFPZQ3XV0NiNcbl3mRNZWZIyx/dHnmIKfSU9qmyJgoMPD2isUbmhvxwO+6Lf6hCH8ih+eBvWz5lwVKOC712Gqu7PuiYrZUCMlIMW2RODU7a/E3nsEUQ9U1dnahCesyMjaQpql3VsCTT5Wt4aNADXLOWLh1z2Np7w5X4QHnjs+lQY0HmLGzT2PQ3ZmzAgED",
"Addresses": [
"/ip4/127.0.0.1/tcp/4001/p2p/QmTEh2sXwABnndZzNaQbHut49xJozWeq5R3PXTpbBcRKHx",
"/ip4/172.18.0.2/tcp/4001/p2p/QmTEh2sXwABnndZzNaQbHut49xJozWeq5R3PXTpbBcRKHx",
"/ip6/::1/tcp/4001/p2p/QmTEh2sXwABnndZzNaQbHut49xJozWeq5R3PXTpbBcRKHx"
],
"AgentVersion": "go-ipfs/0.6.0/d6e036a",
"ProtocolVersion": "ipfs/0.1.0"
}
4.2 、加入节点
docker exec ipfs_host ipfs bootstrap add /ip4/192.168.11.12/tcp/4001/p2p/QmTEh2sXwABnndZzNaQbHut49xJozWeq5R3PXTpbBcRKHx
4.3 、重启容器
docker restart ipfs_host
4.5、查看节点
docker exec ipfs_host ipfs swarm peers
/ip4/192.168.11.11/tcp/4001/p2p/QmWh7ZVJyKxEk6G4AiBRz1jdhpqA11XzKQiTebjiQ6RhrV
/ip4/192.168.11.12/tcp/4002/p2p/QmVkGsg6wsQGkEoazyuBV4FVa68aF2cp7csZNxiymVDFgz
假设一台机器运行多个节点,如通过docker -p 4002:4001
设置的,那么加入节点时候应该是4002(查看节点信息显示的4001,这里的4001是容器端口,4002是本机端口,实际上我们查看的时候是容器内部的端口,所以尽量不要cp)
/ip4/192.168.11.12/tcp/4001/p2p/QmTEh2sXwABnndZzNaQbHut49xJozWeq5R3PXTpbBcRKHx
/ip4/192.168.11.12/tcp/4002/p2p/QmVkGsg6wsQGkEoazyuBV4FVa68aF2cp7csZNxiymVDFgz
5、上传文件
[root@localhost ~]# docker exec ipfs_host ipfs add /data/ipfs/version
3 B / ? added QmUnKvaCFaE8DSHMAq2XeHfrz1wW62uVbb4dNtxQ5zXy6n version
记录返回的ID QmUnKvaCFaE8DSHMAq2XeHfrz1wW62uVbb4dNtxQ5zXy6n
回到其他节点查看文件是否同步
[root@localhost data]# docker exec ipfs_host ipfs cat QmUnKvaCFaE8DSHMAq2XeHfrz1wW62uVbb4dNtxQ5zXy6n
10