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浏览器图片

相关文章
|
3天前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
144 91
|
4天前
|
存储 NoSQL Redis
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
|
19天前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
12天前
|
JavaScript 前端开发 Docker
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
71 44
|
1月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
58 23
|
23天前
|
SQL Java Maven
docker部署apollo
docker部署apollo步骤
|
1月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
49 22
|
1月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
66 25
|
2月前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
96 8
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
1月前
|
SQL 关系型数据库 MySQL
docker-compose部署mysql8
使用docker-compose容器化部署mysql8