注:此版本仅适用于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浏览器图片