在Linux上不会部署私有IPFS?(保姆级教程!!!)教你一步一步部署。

一、环境准备

系统要求

至少需要2G内存,2 核 CPU。

实验环境

共计两个节点,192.168.159.102、192.168.159.103,系统采用centos7

环境准备后,按照如下步骤部署ipfs,每个节点都要单独部署ipfs。

配置 golang 环境

下载go

$ cd /home
$ wget https://golang.google.cn/dl/go1.17.1.linux-amd64.tar.gz
$ tar -zxvf go1.17.1.linux-amd64.tar.gz -C /usr/local

配置 golang 环境变量

$ vim /etc/profile
文件末尾追加
# golang env
export GOROOT=/usr/local/go
export GOPATH=/data/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
 
$ source /etc/profile

# 创建工作目录:
$ mkdir -p /data/gopath && cd /data/gopath
$ mkdir -p src pkg bin

二、IPFS部署

所有节点上都需要部署ipfs:

1、安装

# 下载
$ cd /home
$ wget https://download.fastgit.org/ipfs/go-ipfs/releases/download/v0.9.1/go-ipfs_v0.9.1_linux-amd64.tar.gz
# 解压缩
$ tar xvfz go-ipfs_v0.9.1_linux-amd64.tar.gz
# 安装
$ cd go-ipfs/
$ ./install.sh 

2、指定IPFS的存储位置

$ export IPFS_PATH="/root/.ipfs/" 

3、初始化:

$ ipfs init 

该操作执行后,默认会在/root/目录下生成一个隐藏目录.ipfs,作为ipfs的local存储。可用ls -a 查看

如果输出以下代码则表示初始化成功了:

generating ED25519 keypair...done
peer identity: 12D3KooWPVtCiwDTbf8L8B5pV5PWpW1C4yfzAZaqZpjz3pyzMEig
initializing IPFS node at /opt/ipfs
to get started, enter:

        ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/readme

三、生成共享key

1、生成Key

选择任意一个节点执行以下操作:

1)下载key生成工具

$ git clone https://hub.fastgit.org/Kubuxu/go-ipfs-swarm-key-gen.git

2)编译go-ipfs-swarm-key-gen

$ go build -o ipfs-swarm-key-gen go-ipfs-swarm-key-gen/ipfs-swarm-key-gen/main.go

3)此时在当前目录下会成一个ipfs-swarm-key-gen的可执行二进制文件。我们使用该文件来生成一个swarm.key文件

$ ./ipfs-swarm-key-gen > swarm.key

2、将生成的swarm.key文件传输到所有需要加入私有网络的节点的 ~/.ipfs/文件夹内。

102上:

$  cp swarm.key  ~/.ipfs/

103上:

$  scp [email protected]:~/.ipfs/swarm.key ~/.ipfs

四、添加网络节点

所有节点上都移除默认的IPFS节点:

$ ipfs bootstrap rm all

查看节点ID:

$ ipfs id 

系统会输出以下内容,记住ID部分:

# 102
{
    
    
        "ID": "12D3KooWP4avEe4hX3XVsbaWMHHuTZcXP5A5kCUf91BhRd9yy1Zb",
        "PublicKey": "CAESIMTMekjuLE276A/3lr++zJqDGzkOYDqJulm6+VyEqVGi",
        "Addresses": null,
        "AgentVersion": "go-ipfs/0.9.1/",
        "ProtocolVersion": "ipfs/0.1.0",
        "Protocols": null
}
# 103
{
    
    
        "ID": "12D3KooWDQL6EigoCsx6EjM4mSpz7Vqq9RHCZzPoshVFS8bdxrXh",
        "PublicKey": "CAESIDVGdYIAdJfI6eZ6mAbrJo8RNn4baXsR4Wb1GZsc6Ocw",
        "Addresses": null,
        "AgentVersion": "go-ipfs/0.9.1/",
        "ProtocolVersion": "ipfs/0.1.0",
        "Protocols": null
}

在102服务器上添加103:

$ ipfs bootstrap add /ip4/192.168.159.103/tcp/4001/ipfs/12D3KooWDQL6EigoCsx6EjM4mSpz7Vqq9RHCZzPoshVFS8bdxrXh

在103服务器上添加102:

$ ipfs bootstrap add /ip4/192.168.159.102/tcp/4001/ipfs/12D3KooWP4avEe4hX3XVsbaWMHHuTZcXP5A5kCUf91BhRd9yy1Zb

五、启动IPFS

所有的节点都添加完毕后使用命令启动IPFS,显示如下输出说明启动成功,配置文件没有问题。

$ nohup ipfs daemon > ipfs.log 2>&1 &
......
API server listening on /ip4/127.0.0.1/tcp/5001
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready

IPFS Daemon启动过程包含8个步骤:

  1. 检查是否已经初始化
  2. 打开初始化根目录 /.ipfs
  3. 读取配置
  4. 根据配置生成一个新节点
  5. 连接到IPFS网络
  6. 开启IPFS API服务
  7. 开启Gateway网关服务
  8. 输出IPFS Daemon ready

网络启动后,可以测试网络的连通性,使用如下命令查看IPFS连接了多少节点:

$ ipfs stats bitswap
 bitswap status
        provides buffer: 0 / 256
        blocks received: 0
        blocks sent: 0
        data received: 0
        data sent: 0
        dup blocks received: 0
        dup data received: 0
        wantlist [0 keys]
        partners [1]

其中partners就是连接到的节点数量,因为我们现在只有两个节点,所以partners1

六、测试文本传输

在102新建一个文本文件:

$ echo "hello world" >> test.txt

将其添加到ipfs网络:

$ ipfs add test.txt 

输出以下字符就说明文件已经上传上去了:

added QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o test.txt
 12 B / 12 B [==================================================================================================================] 100.00%

查看文件:

$ ipfs cat QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o

在子节点重复上面的操作,输出都是hello world说明私有网络已经联通。

七、WEB

web访问 http://192.168.159.101:5001/webui

1、 配置ipfs的CORS策略
要从网页中访问ipfs节点,需要解决跨域安全问题,因此我们需要配置ipfs节点使其允许跨域请求:

$ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]' 
$ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods "[\"PUT\", \"GET\", \"POST\"]"
$ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials "[\"true\"]"

2、 配置ipfs的API监听地址
由于ipfs节点默认在本机(127.0.0.1)的5001端口监听API请求、8080端口监听http请求,因此如果浏览器和ipfs节点不在同一台机器上,需要让ipfs节点监听公开地址:

$ ipfs config --json Addresses.API '"/ip4/0.0.0.0/tcp/5001"' 
$ ipfs config --json Addresses.Gateway '"/ip4/0.0.0.0/tcp/8080"'

3、配置完后重启 ipfs daemon

4、安装运行webui

1)安装npm

$ wget https://nodejs.org/dist/v12.18.1/node-v12.18.1-linux-x64.tar.xz
$ tar -xvf node-v12.18.1-linux-x64.tar.xz
$ ln -s /home/node-v12.18.1-linux-x64/bin/node /usr/bin/node
$ ln -s /home/node-v12.18.1-linux-x64/bin/npm /usr/bin/npm
$ node -v
$ npm -v
# 安装nap 
npm config set registry https://registry.npm.taobao.org
npm install webpack -g

2)部署webui

$ git clone https://hub.fastgit.org/ipfs/webui
$ cd webui
$ npm install
    # Runs server on port 3000.
  1. 配置ipfs的CORS策略
./cors-config.sh

重启ipfs daemon

  1. 启动前端
$ npm start

猜你喜欢

转载自blog.csdn.net/weixin_44045828/article/details/128254531