Linux安装IPFS
一、需要golang环境
下载安装
$ cd /opt
$ wget https://golang.google.cn/dl/go1.17.1.linux-amd64.tar.gz
$ tar -xf go1.17.1.linux-amd64.tar.gz
创建工作目录
$ mkdir -p /data/gopath && cd /data/gopath
$ mkdir -p src pkg bin
配置环境变量 /etc/profile
export GOROOT=/opt/go
export GOPATH=/data/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
二、IPFS安装部署
安装
官网https://docs.ipfs.io/install/recent-releases/,慢的话去https://github.com/ipfs/go-ipfs/releases下载
# 下载(慢的话参考上面的github地址下载)
$ cd /opt
$ wget https://download.fastgit.org/ipfs/go-ipfs/releases/download/v0.9.1/go-ipfs_v0.9.1_linux-amd64.tar.gz
# 解压
$ tar -xf go-ipfs_v0.9.1_linux-amd64.tar.gz
# 安装
$ cd go-ipfs/
$ ./install.sh
输出一下代表成功
[root@iZbp16mqbjhbx5mcbgggllZ go-ipfs]# ./install.sh
Moved ./ipfs to /usr/local/bin
[root@iZbp16mqbjhbx5mcbgggllZ go-ipfs]# ipfs version
ipfs version 0.9.1
初始化
创建节点目录(单机多节点)
mkdir /data/ipfs_nodes/ipfs_1
mkdir /data/ipfs_nodes/ipfs_2
mkdir /data/ipfs_nodes/ipfs_3
mkdir /data/ipfs_nodes/key #集群私钥目录,用来存放集群的私钥
初始化
IPFS_PATH=/data/ipfs_nodes/ipfs_1 ipfs init
IPFS_PATH=/data/ipfs_nodes/ipfs_2 ipfs init
IPFS_PATH=/data/ipfs_nodes/ipfs_3 ipfs init
输出以下代表成功
generating ED25519 keypair...done
peer identity: 12D3KooW9uugER1oBn33JVVFdQFEg8UJ5c9tizTYb4SWGxBgUfDt
initializing IPFS node at /root/.ipfs/
to get started, enter:
ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/readme
该目录下:
- blocks:文件块内容
- conifg:配置文件
- datastore_spec:存储本地数据
- keystore:存储公私钥对
- version:版本信息
删除引导程序节点的默认条目。因为是部署私有网络,所以需要移除原有的引导程序节点,如果不删除,启动后就会同步IPFS主网的数据。
IPFS_PATH=/data/ipfs_nodes/ipfs_1/ ipfs bootstrap rm --all
IPFS_PATH=/data/ipfs_nodes/ipfs_2/ ipfs bootstrap rm --all
IPFS_PATH=/data/ipfs_nodes/ipfs_3/ ipfs bootstrap rm --all
下载密钥生成工具
cd /data/ipfs_nodes
git clone https://github.com/Kubuxu/go-ipfs-swarm-key-gen.git
创建密钥
扫描二维码关注公众号,回复:
14803106 查看本文章
go build -o ipfs-swarm-key-gen go-ipfs-swarm-key-gen/ipfs-swarm-key-gen/main.go
./ipfs-swarm-key-gen > swarm.key
复制密钥到各个节点
cp /data/ipfs_nodes/swarm.key /data/ipfs_nodes/ipfs_1
cp /data/ipfs_nodes/swarm.key /data/ipfs_nodes/ipfs_2
cp /data/ipfs_nodes/swarm.key /data/ipfs_nodes/ipfs_3
修改各个节点的配置文件
cd /data/ipfs_nodes/ipfs_1
vim config
"API": {
"HTTPHeaders": {
"Access-Control-Allow-Methods": [ # 配置跨域设置,供前端调用
"PUT",
"GET",
"POST"
],
"Access-Control-Allow-Origin": [
"*"
]
}
}
"Addresses": {
"API": "/ip4/0.0.0.0/tcp/15001", # 这里的ip和端口,0.0.0.0对外开放,不能配本机公网ip,会报错
"Announce": [],
"Gateway": "/ip4/127.0.0.1/tcp/18081", # 这里的ip和端口
"NoAnnounce": [],
"Swarm": [
"/ip4/0.0.0.0/tcp/14001", # 这里的ip和端口
"/ip6/::/tcp/14001", # 这里的ip和端口
"/ip4/0.0.0.0/udp/14001/quic", # 这里的ip和端口
"/ip6/::/udp/14001/quic" # 这里的ip和端口
]
}
启动节点
启动第一个节点
export LIBP2P_FORCE_PENT=1|IPFS_PATH=/data/ipfs_nodes/ipfs_1/ ipfs daemon &
# export LIBP2P_FORCE_PNET=1表示您将节点强制为私有
# & 是表示后台运行
查看第一个节点的peer id
IPFS_PATH=/data/ipfs_nodes/ipfs_1/ ipfs id
第一个节点之后的节点,启动前都要添加引导程序节点,与第一个节点的id建立起联系
IPFS_PATH=/data/ipfs_nodes/ipfs_2 ipfs bootstrap add /ip4/127.0.0.1/tcp/14001/ipfs/12D3KooWKUVFMHN7k7H98byTG3bpwTx646JkjeiMmPMipyDjs532
IPFS_PATH=/data/ipfs_nodes/ipfs_3 ipfs bootstrap add /ip4/127.0.0.1/tcp/14001/ipfs/12D3KooWKUVFMHN7k7H98byTG3bpwTx646JkjeiMmPMipyDjs532
export LIBP2P_FORCE_PENT=1|IPFS_PATH=/data/ipfs_nodes/ipfs_2/ ipfs daemon &
export LIBP2P_FORCE_PENT=1|IPFS_PATH=/data/ipfs_nodes/ipfs_3/ ipfs daemon &
查看启动情况
ps -ef | grep ipfs
root 20530 20102 0 12:01 pts/0 00:00:19 ipfs daemon
root 20710 20102 0 14:52 pts/0 00:00:00 ipfs daemon
root 20720 20102 0 14:52 pts/0 00:00:00 ipfs daemon
root 20743 20102 0 14:55 pts/0 00:00:00 grep --color=auto ipfs
测试
通过节点一上传一个txt文件
[root@iZbp16mqbjhbx5mcbgggllZ data]# export LIBP2P_FORCE_PENT=1|IPFS_PATH=/data/ipfs_nodes/ipfs_1/ ipfs add t.txt
added Qmd5nCsoTpdxCFncQ3L1VSDdt4pgaJoCKPWF8zGjMUWegE t.txt
7 B / 7 B [=================================================================================================================================================================================================================] 100.00%
通过节点二获取文件
[root@iZbp16mqbjhbx5mcbgggllZ data]# export LIBP2P_FORCE_PENT=1|IPFS_PATH=/data/ipfs_nodes/ipfs_1/ ipfs cat Qmd5nCsoTpdxCFncQ3L1VSDdt4pgaJoCKPWF8zGjMUWegE
您好
ipfs命令手册参考http://cw.hubwiz.com/card/c/ipfs/1/1/1/
ipfs原理参考https://www.pseudoyu.com/zh/2021/03/25/blockchain_ipfs_structure/