IPFS 私网搭建

1 安装go环境

1.1 下载go安装包

​ 打开 链接 选择并下载合适的安装包

1.2 解压安装包

将go安装包解压至 /usr/local/ 目录下

tar -zxvf go1.18.2.linux-amd64.tar.gz -C /usr/local/

1.3 添加环境变量

1 在控制台键进入vim /etc/profile

2 在最后一行添加

export GOROOT=/usr/local/goexport PATH=$PATH:$GOROOT/bin

3 键入 source/etc/profile

4 键入 go -version查看go的版本,控制台正常输出go版本号,则说明go安装成功

2 安装IPFS客户端

2.1 下载客户端

打开 官网链接 选择并下载合适的客户端版本

ipfs官网和客户端下载需要科学上网才可下载,可使用 百度网盘下载 ,提取码 xr7s,目前百度网盘提供的是0.12.2版本

2.2 安装ipfs

1 解压ipfs安装包,解压到当前目录即可

2 解压后,会在当前目录生成一个 go-ipfs 的文件夹

3 cd进入 go-ipfs文件夹

4 执行 install.sh 文件

tar -zxvf go-ipfs_v0.12.2_linux-amd64.tar.gzcd go-ipfs ./install.sh

5 执行 ipfs help 检查ipfs安装是否成功,控制台输出ipfs相关命令,则说明ipfs安装成功

3 搭建私网

3.1 节点初始化

3.1.1 节点初始化

每个节点都要执行

键入 ipfs init ,控制台会输出节点的相关信息

信息主要包含节点的id和节点的初始化目录

用root账户登录的话,会在root目录下生成一个 .ipfs 文件夹,如果使用其他账户登录,则会在 /home/目录下生成 .ipfs文件夹

如果忘记节点id,可以通过 ipfs id 查看

3.1.2 跨域问题

每个节点都要执行

节点初始化完成后,非本地访问会产生跨域问题,分别键入以下命令解决跨域

本次搭建只是为了测试,”*” 表示允许所有域名访问,实际生产环境应该指定域名或关闭跨域

1 Linux

ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT","GET","POST","OPTIONS"]'ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials '["true"]'ipfs config --json API.HTTPHeaders.Access-Control-Allow-Headers '["Authorization"]'ipfs config --json API.HTTPHeaders.Access-Control-Expose-Headers '["Location"]'

2 Windows

ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin "[\"*\"]" ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods "[\"PUT\",\"GET\",\"POST\",\"OPTIONS\"]" ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials "[\"true\"]"ipfs config --json API.HTTPHeaders.Access-Control-Allow-Headers "[\"Authorization\"]"ipfs config --json API.HTTPHeaders.Access-Control-Expose-Headers "[\"Location\"]"
3.1.3创建共享密钥

任意一个节点执行

克隆密钥生成工具
git clone https://github.com/Kubuxu/go-ipfs-swarm-key-gen.git
编译
go build -o ipfs-swarm-key-gen go-ipfs-swarm-key-gen/ipfs-swarm-key-gen/main.go

编译时如果控制台输出 go.mod file not found in current directory or any parent directory 的错误的话,只需要暂时将 GO111MODULE 暂时关闭即可,键入

go env -w GO111MODULE=off

生成密钥
./ipfs-swarm-key-gen > swarm.key

密钥生成后,将密钥复制到 .ipfs 文件夹中

cp swarm.key /root/.ipfs

若忘记 .ipfs 的路径,可通过 find / -name ".ipfs" 找到

3.1.4 分发密钥

将生成的密钥分发到各个节点

要确保密钥分发到每一个节点上

scp swarm.key user@ip:.ipfs_path

eg. scp swarm.key root@172.24.7.101:/root/.ipfs/

如果要发送到windows节点,windows需要打开ssh服务,

windows开启ssh服务步骤:

a. 设置–>更新和安全–>开发者选项–>开启‘开发人员模式’

b. 设置–>应用–>应用和功能–> 可选功能–>安装‘OpenSSH客户端’

c. 重启电脑

d. 管理员启动控制台–> 键入ssh

e. 管理员启动控制台–> net start sshd

3.1.5 删除默认节点

每个节点执行

删除公网节点

ipfs bootstrap rm all
3.1.6 添加节点

各个节点分别添加其他节点

ipfs bootstrap add /ip4/ip地址/tcp/4001/ipfs/另一个节点id

eg

ipfs bootstrap add /ip4/172.24.7.101/tcp/4001/ipfs/12D3KooWK1ivQRSyL3aSS6TLx4YkvB3diiiVckerUAs6MK5aA9q9
3.1.7 启动节点

每个节点执行

键入 ipfs daemon 节点即可启动

windows节点启动 ipfs daemon 可能会报 Only one usage of each socket address (protocol/network address/port) is normally permitted. 这个错误;可以通过修改注册表解决:

在注册表中找到下图的目录,然后添加红色框的四个参数和对应的值,重启电脑

3.1.8 文件上传与读取

新增一个test.txt的文件,文件内容是‘this is a test file’
在一个节点上上传一个文件

新增成功后,会返回该文件的cid

在另一个节点上键入 ipfs cat QmShXqLJmGrTgkq3BFZgvBiz1HnWtH2fGMMn8ierCvQyLL

就可以看到文件内容