最近有一个在Windows环境下搭建IPFS私有网络的需求,虽然网上有很多教程经验贴,但对于新手来说,要么不是特别详细,要么是基于Linux环境下搭建。因此,本文参考相关教程,并在Windows下进行摸索,最终完整地记录了在Windows环境下如何利用Docker搭建IPFS私有网络。
搭建环境
Windows 10 教育版 20H2Docker 20.10.0
生成私有密钥
搭建IPFS私有网络,首先需要使所有节点共享一个密钥swarm.key。
密钥生成工具下载地址:
1)解压
2)编译
go build执行成功后,将会生成main.exe
3)生成swarm.key
执行成功后,得到swarm.key
swarm.key的内容如下
/key/swarm/psk/1.0.0/
/base16/
315f44eb464bea24c5bf8ad492a6f99f1b86d5c6b0f824ea5069bc89d8c0d46f
启动节点
1)寻找镜像
docker search ipfs
2)拉取镜像
docker pull ipfs/go-ipfs
目录设置
# ipfs挂载目录
E:\Projects\zhangxin-thesis\ipfs
# node1目录
E:\Projects\zhangxin-thesis\ipfs\node1
# node2目录
E:\Projects\zhangxin-thesis\ipfs\node2
将前面生成的私有swarm.key放在ipfs的挂载目录下
3)启动节点
# 启动节点1
docker run -d --name ipfs_node_1 -e IPFS_SWARM_KEY_FILE=E:/Projects/zhangxin-thesis/ipfs/swarm.key -v E:/Projects/zhangxin-thesis/ipfs/node1/staging:/export -v E:/Projects/zhangxin-thesis/ipfs/node1/data:/data/ipfs -p 4011:4001 -p 4011:4001/udp -p 127.0.0.1:8001:8080 -p 127.0.0.1:5011:5001 ipfs/go-ipfs:latest
# 启动节点2
docker run -d --name ipfs_node_2 -e IPFS_SWARM_KEY_FILE=E:/Projects/zhangxin-thesis/ipfs/swarm.key -v E:/Projects/zhangxin-thesis/ipfs/node2/staging:/export -v E:/Projects/zhangxin-thesis/ipfs/node2/data:/data/ipfs -p 4012:4001 -p 4012:4001/udp -p 127.0.0.1:8002:8080 -p 127.0.0.1:5012:5001 ipfs/go-ipfs:latest
# 注:
# 本文为同一台宿主机部署2个容器
# 因此在端口映射时
# 节点2不能与节点1映射到相同的宿主机端口
将swarm.key复制到node1目录下的data文件夹内,node2同理
4)删除引导节点
# 清除节点1的默认的bootstrap节点
docker exec ipfs_node_1 ipfs bootstrap rm all
# 清除节点2的默认的bootstrap节点
docker exec ipfs_node_2 ipfs bootstrap rm all
5)查看节点IP
# 查看节点1的ip
docker exec ipfs_node_1 ipfs id
# 查看节点2的ip
docker exec ipfs_node_2 ipfs id
# 得到地址分别问
# 节点1:
# /ip4/172.17.0.2/tcp/4001/p2p/12D3KooWB7rbtLGLT4UGdLEvSY3vyaRfsdASXEoZnJn3iaaeQz3q
# 节点2:
# /ip4/172.17.0.3/tcp/4001/p2p/12D3KooWHtQ5i2v8e6Tot2aQBTqT9M1z48t53WAiLLqqBDLDkzSw
6)添加节点
# 将节点2的地址添加至节点1
docker exec ipfs_node_1 ipfs bootstrap add /ip4/172.17.0.3/tcp/4001/p2p/12D3KooWGWm8rLw45SRfNwvH93eLaZunax3yrAcmmte7w6bE5fqY
# 将节点1的地址添加至节点2
docker exec ipfs_node_2 ipfs bootstrap add /ip4/172.17.0.2/tcp/4001/p2p/12D3KooWB7rbtLGLT4UGdLEvSY3vyaRfsdASXEoZnJn3iaaeQz3q
# 注:
# 如果是3个(节点1、节点2、节点3),节点1需要添加节点2和节点3的ip,以此类推
7)允许跨域
# 节点1允许跨域
docker exec ipfs_node_1 ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin [\"*\"]
docker exec ipfs_node_1 ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods [\"PUT\", \"GET\", \"POST\"]
# 节点2允许跨域
docker exec ipfs_node_2 ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin [\"*\"]
docker exec ipfs_node_2 ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods [\"PUT\", \"GET\", \"POST\"]
8)重启容器
# 重启节点1
docker restart ipfs_node_1
# 重启节点2
docker restart ipfs_node_2
测试
1)添加文件
# 向节点1上传文件
docker exec ipfs_node_1 ipfs add /data/ipfs/swarm.key
# 注:
# 容器内的路径:/data/ipfs/swarm.key
# 对应
# 宿主机的绝对路径:E:/Projects/zhangxin-thesis/ipfs/node1/data/swarm.key
2)查看文件
# 节点2查看文件
docker exec ipfs_node_2 ipfs cat QmZGuZEmKBdcEsR7yiEevpS69nLKXYzmgjeoqiGrcT4RX3
3)下载文件
# 节点2下载文件
docker exec ipfs_node_2 ipfs get QmZGuZEmKBdcEsR7yiEevpS69nLKXYzmgjeoqiGrcT4RX3 -o /data/ipfs/test.key
# 注:
# -o表示输出目录,即保存至/data/ipfs/test.key
# /data/ipfs/test.key
# 对应
# 宿主机的绝对路径:E:/Projects/zhangxin-thesis/ipfs/node2/data/test.key
4)查看文件列表
# 查看节点1的文件列表
docker exec ipfs_node_1 ipfs pin ls
# 注:
# recursive表示文件夹,indirect表示文件
遇到的问题
1)ipfs内置的webui存在问题(两种情况均未解决)
能打开,但是看不到具体数据,页面提示①修改跨域设置;②提交修改后的端口
直接打不开
2)跨域问题(不知是否解决)
3)ipfs的api调用,显示405错误(已解决)
解决方法:将get方法修改成post方法即可
参考链接
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
相关标签: