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

相关文章
|
1月前
|
运维 网络安全 持续交付
IDEA+Docker 远程一键部署项目:技术干货分享
【10月更文挑战第4天】在现代软件开发中,快速、可靠、自动化的部署流程是提升开发效率和运维质量的关键。IDEA(IntelliJ IDEA)作为Java开发者首选的IDE,结合Docker这一轻量级容器化技术,能够实现远程一键部署项目,极大地简化了开发到生产的流程。今天,我将和大家分享这一组合在工作学习中的实际应用和技术干货。
192 3
|
1月前
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
4天前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
10天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
47 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
25天前
|
Web App开发 前端开发 测试技术
【Docker项目实战】使用docker部署tabler后台模版
【10月更文挑战第10天】使用docker部署tabler后台模版
31 1
【Docker项目实战】使用docker部署tabler后台模版
|
26天前
|
JSON JavaScript 测试技术
【Docker项目实战】使用Docker部署PPTist在线演示文稿应用
【10月更文挑战第9天】使用Docker部署PPTist在线演示文稿应用
33 1
【Docker项目实战】使用Docker部署PPTist在线演示文稿应用
|
27天前
|
消息中间件 编解码 Docker
【Docker项目实战】Docker部署RabbitMQ消息中间件
【10月更文挑战第8天】Docker部署RabbitMQ消息中间件
71 1
【Docker项目实战】Docker部署RabbitMQ消息中间件
|
28天前
|
存储 前端开发 测试技术
【Docker项目实战】使用Docker部署Calcium网页计算器
【10月更文挑战第7天】使用Docker部署Calcium网页计算器
28 1
【Docker项目实战】使用Docker部署Calcium网页计算器
|
1月前
|
存储 测试技术 Linux
【Docker项目实战】使用Docker部署Radicale日历和联系人应用
【10月更文挑战第4天】使用Docker部署Radicale日历和联系人应用
106 2
【Docker项目实战】使用Docker部署Radicale日历和联系人应用
|
12天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
35 2