Ubuntu1604搭建IPFS私有网络

目录

IPFS (InterPlanetary File System) 是一个面向全球的、点对点的分布式版本文件系统。它用基于内容的地址替代基于域名的地址,也就是用户寻找的不是某个地址而是储存在某个地方的内容,不需要验证发送者的身份,而只需要验证内容的哈希,通过这样可以让网页的速度更快、更安全、更健壮、更持久。IPFS表示,IPFS未来将替代HTTP(以及其他的许多东西)。

准备至少两台服务器,这里使用了三台:

节点 IP
管理节点 10.1.1.170
peer1 10.1.1.171
peer2 10.1.1.172

IPFS 官方提供的安装方式有安装包方式,ipfs-update 方式,源码编译安装方式,具体可以查看 https://docs.ipfs.io/guides/guides/install/

这里使用ipfs-update 方式安装。以下操作若未作说明,则在所有节点执行。

1.安装golang

使用二进制包安装,下载最新的安装包:

wget https://golang.google.cn/dl/go1.16.2.linux-amd64.tar.gz

解压缩:

sudo tar xzf go1.16.2.linux-amd64.tar.gz

配置环境变量:

sudo vim /etc/profile

由于golang的包管理被墙,除了go的运行位置外还需添加包管理的代理:

export GOPATH=/data/go
export PATH=$GOPATH/bin:$PATH
export GOPROXY=https://goproxy.io
export GO111MODULE=on

使环境变量生效:

source /etc/profile

验证安装:

ubuntu@ipfs1_170:/data$ go version
go version go1.16.2 linux/amd64

2.安装 ipfs-update

由于DNS污染问题,需先配置hosts文件:

sudo vim /etc/hosts

添加:

209.94.78.78 ipfs.io
209.94.90.1 ipfs.io

保存退出后,安装ipfs-update:

go get -u github.com/ipfs/ipfs-update

通过ipfs-update versions可以列出所有可以使用和可以下载的ipfs版本.我们这里直接安装最新的版本,安装最新版本:

ipfs-update install latest

3.初始化

首先确定本地仓库的目录,默认是在~/.ipfs下,如果要修改,在/etc/profile里添加:

export IPFS_PATH=/data/ipfs

使环境变量生效:

source /etc/profile

进入/data/ipfs文件夹:

ipfs init

4.创建共享密钥

swarm.key密钥允许我们创建一个私有网络,并告诉网络节点只和拥有相同秘钥的节点通信,在一个节点上执行下面命令:

go get -u github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen
ipfs-swarm-key-gen > /data/ipfs/swarm.key

通过scp或者上传的方式将生成的swarm.key拷贝到每一台节点的/data/ipfs/目录下。

5.移除默认的 bootstrap 节点

为了不连接全球的 IPFS 网络,需要将默认的 bootstrap 的节点信息删除:

ipfs bootstrap rm --all

6.创建私有网络节点

在每台节点中添加管理节点的 bootstrap:

ipfs bootstrap add /ip4/10.1.1.170/tcp/4001/ipfs/12D3KooWKuZxqY2gZJHKtU7zmtgp9SkAUFX82HgPMWPo4u3af3by

12D3KooWKuZxqY2gZJHKtU7zmtgp9SkAUFX82HgPMWPo4u3af3by为ipfs init时生成的节点 ID,也可以通过ipfs id查看当前节点的 ID。我们还需要设置环境变量/etc/profile来强制我们的网络进入私有模式:

export LIBP2P_FORCE_PNET=1

使环境变量生效:

source /etc/profile

7.修改默认配置

默认ipfs的api只能本机访问,根据实际情况修改成本地或远程访问,首先配置编辑器的环境变量,选择一个你熟悉的编辑其,这里使用vim,在/etc/profile中添加:

export EDITOR=/usr/bin/vim

使环境变量生效:

source /etc/profile

进入配置编辑:

ipfs config edit

找到Addresses,修改API键对应的值,这里修改成本机ip,即10.1.1.170:

  "Addresses": {
    "API": "/ip4/10.1.1.170/tcp/5001",
    "Announce": [],
    "Gateway": "/ip4/10.1.1.170/tcp/8080",
    "NoAnnounce": [],
    "Swarm": [
      "/ip4/0.0.0.0/tcp/4001",
      "/ip6/::/tcp/4001",
      "/ip4/0.0.0.0/udp/4001/quic",
      "/ip6/::/udp/4001/quic"
    ]
  },

保存退出。

8.运行ipfs

ipfs daemon

验证节点信息:

ubuntu@ipfs1_170:/data$ ipfs swarm peers
/ip4/10.1.1.171/tcp/4001/p2p/12D3KooWENuSL1yXp5ZQAw93BPKBFa7931rpXzh766ByGHrsWLMu
/ip4/10.1.1.172/tcp/4001/p2p/12D3KooWLJ4EXrqRmpZyfAXMUyHR1ctXFUneBQsM29VX1X7Msbde

9.添加文件至节点并验证

在peer2添加文件

echo "hello from ipfs" > hello.txt
ubuntu@ipfs2_172:~$ ipfs add hello.txt
added QmdWtwDuS5nnXGDUtFj28B5xUyzmxgsry3N9jkRP7jvnxn hello.txt
 16 B / 16 B [============================================================================================================================================] 100.00%

在peer1查看该文件

ubuntu@ipfs2_171:~$ ipfs cat QmdWtwDuS5nnXGDUtFj28B5xUyzmxgsry3N9jkRP7jvnxn
hello from ipfs

10.API说明文档

中文社区文档:https://ipfs.netlify.app/docs/api.html

官方文档(英文):https://docs.ipfs.io/reference/http/api/#getting-started

中文的版本相对滞后,仅供参考。

11.遗留问题

这里仅安装了命令行的程序,没有安装webui,在安装webui时我遇到了跨域访问的问题,按照github上的配置并没有解决问题,后续再跟进研究。webui源码地址:https://github.com/ipfs-shipyard/ipfs-webui

上一篇:分析 AGI 纹理数据并提升 GPU 性能


下一篇:将DLL文件直接封装进exe执行文件中(C#)