docker部署IPFS私有链

简介: docker部署IPFS私有链

注:此版本仅适用于ipfs/go-ipfs:v0.4.18 版本

一、安装IPFS

1.1 下载IPFS镜像

[root@localhost mnt]# docker pull ipfs/go-ipfs:v0.4.18
Using default tag: latest
latest: Pulling from ipfs/go-ipfs:v0.4.18
0de338cf4258: Pull complete 
11c62d923848: Pull complete 
365846b6db74: Pull complete 
068806c0c7c7: Pull complete 
c974b7720ca1: Pull complete 
586d5e183876: Pull complete 
2851d4256382: Pull complete 
9b9ad1445fab: Pull complete 
Digest: sha256:4901bf2adb79a10fa420454a67dfd2417418fac517fead723b085cd4a80e6dfc
Status: Downloaded newer image for ipfs/go-ipfs:v0.4.18

[root@localhost mnt]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
ipfs/go-ipfs            v0.4.18             c8b38c3e0676        4 months ago        43.2MB

1.2 生成IPFS容器

[root@localhost opt]# docker run -d --name ipfs_host -e IPFS_PROFILE=server -v $ipfs_staging:/export -v /opt/ipfs/:/data/ipfs --network=host ipfs/go-ipfs:v0.4.18
58114b2e764f8f64f994b194d4db6b916d8f9549f593621b295d7cf7e420054a

1.3 查看IPFS容器日志

[root@localhost opt]# docker logs -f ipfs_host
Changing user to ipfs
ipfs version 0.4.18
initializing IPFS node at /data/ipfs
generating 2048-bit RSA keypair...done
peer identity: QmUJ9iuDTt44pZgxaAxQZGTmfBVkWi3hZyC9APU6dsANKg
to get started, enter:

    ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

Initializing daemon...
go-ipfs version: 0.4.18-6f19dd5
Repo version: 7
System version: amd64/linux
Golang version: go1.11.1
Swarm listening on /ip4/10.20.29.133/tcp/4001
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip4/172.17.0.1/tcp/4001
Swarm listening on /ip4/172.18.0.1/tcp/4001
Swarm listening on /ip4/172.19.0.1/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /p2p-circuit
Swarm announcing /ip4/10.20.29.133/tcp/4001
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip4/172.17.0.1/tcp/4001
Swarm announcing /ip4/172.18.0.1/tcp/4001
Swarm announcing /ip4/172.19.0.1/tcp/4001
Swarm announcing /ip6/::1/tcp/4001
API server listening on /ip4/0.0.0.0/tcp/5001
Gateway (readonly) server listening on /ip4/0.0.0.0/tcp/8080
Daemon is ready

1.4 查看宿主机映射目录下的文件

[root@localhost ipfs]# pwd
/opt/ipfs
[root@localhost ipfs]# ls
api  blocks  config  datastore  datastore_spec  keystore  repo.lock  version

1.5 使用浏览器访问 http://10.20.29.133:5001/webui

注:

IP地址即为服务器IP

1.6 设置跨源请求

此时,应该页面应该会出现错误,IPFS API无法跨源(CORS)请求,需要设置IPFS API以允许跨源(CORS)请求

1.6.1 进入ipfs容器

[root@localhost ipfs]# docker exec -it ipfs_host sh
/ #

1.6.2 在容器内输入以下命令,进行配置:

/ # ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://10.20.29.133:5001", "https://webui.ipfs.io"]'
/ # ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST"]'
/ #  ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials '["true"]'

1.6.3 退出容器,重启容器,使配置生效

[root@localhost ipfs]# docker restart ipfs_host 
ipfs_host

此时,按照以上方法,部署出第二个节点

1.7 互相添加bootstrap节点

1.7.1 查看IPFS节点1的ID

进入容器,查看ID:

[root@localhost ~]# docker exec -it ipfs_host sh
/ # 
/ # ipfs id
{
    "ID": "QmUJ9iuDTt44pZgxaAxQZGTmfBVkWi3hZyC9APU6dsANKg",
    "PublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDxScq0G0AukaBHUmMNmg7okGqVr22waiugJXjmviGrKJo8fWnfYOaW/NcYrLKUqcvy2fdHVvUpEbMMp7fJKl4/dYB6vJY4/XowR+vz2sP045nVJ7F6arU8KHgX3V2H1wQntKTy67dXQ0RG+z+BuWMuUndAelDrw5ffHEkIR0LLcedlGT3LVFCNKEd/9ZSNsuks1X0sTpvXyolyaLrdet7EPPfjU84UeAPf4TpMGZmG0jCwBefIk4WSfE+A5boKUY/W818+NaE0e+XKW1uNZOeeNJ26uBQMs2TSVnMe4oYm1PCLUS6DNiKcDRwUBJtDplxfrgtV0S+2NaRdSWNQuMCfAgMBAAE=",
    "Addresses": [
        "/ip6/::1/tcp/4001/ipfs/QmUJ9iuDTt44pZgxaAxQZGTmfBVkWi3hZyC9APU6dsANKg",
        "/ip4/127.0.0.1/tcp/4001/ipfs/QmUJ9iuDTt44pZgxaAxQZGTmfBVkWi3hZyC9APU6dsANKg",
        "/ip4/10.20.29.133/tcp/4001/ipfs/QmUJ9iuDTt44pZgxaAxQZGTmfBVkWi3hZyC9APU6dsANKg",
        "/ip4/172.17.0.1/tcp/4001/ipfs/QmUJ9iuDTt44pZgxaAxQZGTmfBVkWi3hZyC9APU6dsANKg",
        "/ip4/172.18.0.1/tcp/4001/ipfs/QmUJ9iuDTt44pZgxaAxQZGTmfBVkWi3hZyC9APU6dsANKg",
        "/ip4/172.19.0.1/tcp/4001/ipfs/QmUJ9iuDTt44pZgxaAxQZGTmfBVkWi3hZyC9APU6dsANKg"
    ],
    "AgentVersion": "go-ipfs/0.4.18/6f19dd5",
    "ProtocolVersion": "ipfs/0.1.0"
}

1.7.2 进入IPFS节点2,添加节点1 的ID

[root@ipfs2 ipfs]# docker exec -it ipfs_host sh
/ # 
/ # ipfs bootstrap add /ip4/10.20.29.133/tcp/4001/ipfs/QmUJ9iuDTt44pZgxaAxQZGTmfBVkWi3hZyC9APU6dsANKg
added /ip4/10.20.29.133/tcp/4001/ipfs/QmUJ9iuDTt44pZgxaAxQZGTmfBVkWi3hZyC9APU6dsANKg

1.7.3 重启IPFS节点2的容器,使配置生效

[root@ipfs2 ipfs]# docker restart ipfs_host
ipfs_host

1.7.4 进入IPFS节点2容器查看boostrap节点

[root@ipfs2 ipfs]# docker exec -it ipfs_host sh
/ # 
/ # ipfs bootstrap list
/ip4/10.20.29.133/tcp/4001/ipfs/QmUJ9iuDTt44pZgxaAxQZGTmfBVkWi3hZyC9APU6dsANKg

按照以上方法,在ipfs节点1中添加节点2的ID信息

二、多节点共享密钥

注:

同一个IPFS私链内的所有节点必须共享同一个密钥才能加入。

首先我们使用密钥创建工具,创建一个密钥。

密钥工具下载地址: https://github.com/Kubuxu/go-ipfs-swarm-key-gen

2.1 安装go语言环境

因为密钥生成需要go 支持,如果本地服务器未安装 go ,请先下载安装 go

2.1.1 下载go安装包

[root@localhost mnt]# wget  https://studygolang.com/dl/golang/go1.11.linux-amd64.tar.gz
[root@localhost go]# ls
go1.11.linux-amd64.tar.gz

2.1.2 解压安装包

[root@localhost mnt]# tar zxvf go1.11.linux-amd64.tar.gz 
[root@localhost mnt]# ls
go  go1.11.linux-amd64.tar.gz
[root@localhost mnt]# cd go
[root@localhost go]# ls
api  AUTHORS  bin  CONTRIBUTING.md  CONTRIBUTORS  doc  favicon.ico  lib  LICENSE  misc  PATENTS  pkg  README.md  robots.txt  src  test  VERSION

2.1.3 设置go的环境变量

# 安装路径
export GOROOT=/mnt/go       #安装路径
export GOPATH=/mnt/godemo   #下载的安装包路径,默认在root目录下
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

2.1.4 生效go语言环境

[root@localhost go]# source  /etc/profile

2.1.5 查看go语言版本

[root@localhost go]# go version
go version go1.11 linux/amd64

2.2 安装秘钥工具

2.2.1 下载秘钥

[root@localhost mnt]# go get -u github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen

2.2.2 安装秘钥

下载后的秘钥安装包在go的安装包目录下
[root@localhost mnt]# cd godemo/
[root@localhost godemo]# ls
bin  src
[root@localhost godemo]# cd bin
[root@localhost bin]# ls
ipfs-swarm-key-gen
[root@localhost bin]# pwd
/mnt/godemo/bin
[root@localhost bin]# ipfs-swarm-key-gen > /opt/ipfs/swarm.key

将生成的key重定向至容器映射目录下,并命名为:swarm.key

2.2.3 查看生成的swarm.key

安装完后,查看生成的swarm.key

[root@localhost bin]# cd /opt/ipfs/
[root@localhost ipfs]# ls
api  blocks  config  datastore  datastore_spec  keystore  repo.lock  swarm.key  version
[root@localhost .ipfs]# cat swarm.key 
/key/swarm/psk/1.0.0/
/base16/
07e09ee139320cd410cd48dda9dcd57f4978ca1be5f813aaea8d9faa9073f146

注意:

此秘钥不能向其他人透露,否则别人可加入到你的节点中!!!

以上,便是IPFS部署私链的全部过程

api:
http://10.20.29.133:5001/webui/ 使用浏览器查看IPFS节点状态

注:IP地址即为服务器IP地址

网关:
http://10.20.29.92:8080/ipfs/QmWM2XF311P96fHvseDzBzFXAKfdWLzYVcqXMfpF3in3YC

参看文件内容详情

后面的hash值为文件上链哈希,如果此哈希文件已经上链,那么前面的IP地址可以是私链当中任何一个节点的IP地址

若需要查看web页面内容,请点击IPFS浏览器图片

相关文章
|
4天前
|
Nacos Docker 容器
docker部署nacos
docker部署nacos
22 2
|
1天前
|
弹性计算 网络安全 Nacos
云服务器 ECS产品使用问题之使用Docker部署Nacos时,遇到端口无法开放,该怎么办
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
1天前
|
测试技术 Linux 开发者
【Docker项目实战】使用Docker部署DashMachine仪表板
【6月更文挑战第17天】使用Docker部署DashMachine仪表板
20 3
|
1天前
|
Docker 容器
蓝易云 - docker之Consul环境的部署
注意,这只是一个基本的Consul环境的部署。在生产环境中,你可能需要配置更多的选项,如数据持久化、网络设置等。
7 1
|
2天前
|
监控 测试技术 开发者
【Docker项目实战】使用Docker部署NextTrace Web路由工具
【6月更文挑战第16天】使用Docker部署NextTrace Web路由工具
14 4
|
3天前
|
存储 Linux Docker
python项目 以docker形式打包部署全流程
在很久很久以前,我已经听过Docker的大名,当时服务着急上线虽然考虑过用Docker来部署我的服务,但是因为赶期的原因放弃了。 这两天因为华为云服务器到期,而且阿里云服务器优惠力度特别大的原因,我要把华为云服务器里的工程迁移到阿里云。 迁移的过程中,大量的时间精力浪费在了重装python,加载依赖,迁移项目,配置端口等环境配置的工作上。 我在想,如果当时用了Docker部署,我至于受这气?
|
3天前
|
Web App开发 测试技术 数据安全/隐私保护
【Docker项目实战】使用Docker部署linkding书签管理器
【6月更文挑战第15天】使用Docker部署linkding书签管理器
16 8
|
4天前
|
应用服务中间件 nginx Docker
docker部署nginx
docker部署nginx
26 1
|
4天前
|
消息中间件 存储 数据安全/隐私保护
docker部署rabbitmq
docker部署rabbitmq
7 0
|
4天前
|
关系型数据库 MySQL Docker
docker部署mysql
docker部署mysql
14 1