IPFS私有集群的安装部署

IPFS的安装部署(私有集群)

利用docker部署

  1. 环境

    • golang
    • docker

    生成搭建私有网络所需的swarm.key密钥

    go get github.com/Kubuxu/go-ipfs-swarm-key-gen
    cd $GOPATH
    go build
    ./ipfs-swarm-key-gen > swarm.key
    
  2. 创建挂载目录:

    ipfs 的 export 和 data 目录挂载到主机上,这里做下准备,每个不同是私链节点的挂载目录不一样。

    以node0为例

    /home/admin/Docker/IPFS/node0/export

    /home/admin/Docker/IPFS/node0/data

  3. 在docker上部署

    在docker上搜索ipfs的镜像

    docker search ipfs
    

    拉取镜像

    docker pull ipfs/go-ipfs
    

    启动容器,并创建节点

    docker run --name ipfs-node-0 -v /home/admin/Docker/IPFS/node0/export:/export -v /home/admin/Docker/IPFS/node0/data:/data/ipfs -p 10000:4001 -p 11000:5001 -p 12000:8080 -d ipfs/go-ipfs:latest
    

    查看日志

    docker logs -f ipfs-node-0
    

    日志情况:

    Changing user to ipfs
    ipfs version 0.7.0
    generating ED25519 keypair...done
    peer identity: 12D3KooWKKsuNQpDteX6Xk5949kT67B5kTeZARpt4MBRbBseG3n4
    initializing IPFS node at /data/ipfs
    to get started, enter:
    
    	ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/readme
    
    Initializing daemon...
    go-ipfs version: 0.7.0-ea77213
    Repo version: 10
    System version: amd64/linux
    Golang version: go1.14.4
    Swarm is limited to private network of peers with the swarm key
    Swarm key fingerprint: d11e26ed1fe5b43f743eaf27f74d704a
    Swarm listening on /ip4/127.0.0.1/tcp/4001
    Swarm listening on /ip4/172.17.0.2/tcp/4001
    Swarm listening on /p2p-circuit
    Swarm announcing /ip4/127.0.0.1/tcp/4001
    Swarm announcing /ip4/172.17.0.2/tcp/4001
    API server listening on /ip4/0.0.0.0/tcp/5001
    WebUI: http://0.0.0.0:5001/webui
    Gateway (readonly) server listening on /ip4/0.0.0.0/tcp/8080
    Daemon is ready
    

    出现“Swarm is limited to private network of peers with the swarm key”,代表使用了私有密钥,属于私有节点。
    "Daemon is ready"表示ipfs已经启动。

    删除公有集群的引导节点

    docker exec ipfs-node-0 ipfs  bootstrap rm --all
    

    单个节点启动完成。

    另起一个节点,创建方式与单个节点的方式相同。注意端口号,文件路径需要更改。

    docker run --name ipfs-node-1 -v /home/admin/Docker/IPFS/node1/export:/export -v /home/admin/Docker/IPFS/node1/data:/data/ipfs -p 10001:4001 -p 11001:5001 -p 12001:8080 -d ipfs/go-ipfs:latest
    

    查看节点,打开节点的shell,在node0中可以看到node1的identity。

    docker exec -it ipfs-node-0 /bin/sh
    / # ipfs swarm peers
    /ip4/172.17.0.3/tcp/4001/p2p/12D3KooWFAWPkrCxHdTnM4KeuVVUD1hA8uaxUYDdefNEE1aNwKvu
    

    至此,部署完毕。

    测试:

    node0发布文件,node1通过哈希值获取文件

    docker exec ipfs-node-0 ipfs add /data/ipfs/version
    

    log:

    QmUnKvaCFaE8DSHMAq2XeHfrz1wW62uVbb4dNtxQ5zXy6n version 3 B / 3 B  100.00%
    

    在node1上获取

    docker exec ipfs-node-1 ipfs cat QmUnKvaCFaE8DSHMAq2XeHfrz1wW62uVbb4dNtxQ5zXy6n
    

    log:

    10
    

    测试成功。


在ubuntu虚拟机中部署

  1. 为各个虚拟机分配不同的IP地址(静态IP),参考博客: https://www.cnblogs.com/yyee/p/12899953.html

  2. 在官网上,下载ipfs安装包。下载地址: https://dist.ipfs.io/go-ipfs/

    由于特殊原因,网站需要*,也可以从我的网盘获取go-ipfs的安装包(version: v0.7.0)。

    网盘地址:https://wws.lanzous.com/i0GjXjamlbi

  3. 解压安装包,在go-ipfs目录下运行如下指令

    sudo ./install.sh
    
  4. 初始化及相关配置

    在根目录运行如下指令

    ipfs init
    

    执行完此条命令之后,ipfs会在本地的根目录下创建一个名为.ipfs的隐藏文件夹,运行如下指令,即可看到新创建的文件夹

    ls -f
    
  5. 搭建私有节点

    搭建私有集群需要所有的节点使用同一个swarm.key私有密钥。
    生成私有密钥需要配置go语言环境,如果虚拟机里没有go语言环境,可以选择在有go语言的环境中,生成swarm.key,再复制到节点的目录中也是一样的。

    • 从github上获取生成私有密钥的代码,并运行生成私有密钥。

      go get -u http://github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen
      cd $GOPATH
      cd src/github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen/
      go build
      ./ipfs-swarm-key-gen > ~/swarm.key 
      

      “>”后是生成目录,可以任意选择,这里直接生成到了根目录下,方便之后copy到别的虚拟机中,也可以直接生成到ipfs的目录下。

    • 将swarm.key移动到ipfs的目录下

      sudo mv swarm.key ~/.ipfs
      
    • 移除默认的公有集群引导节点

      ipfs bootstrap rm --all
      
    • 启动服务

      ipfs daemon
      

    日志中出现“Swarm is limited to private network of peers with the swarm key”,代表创建的是私有节点。

  6. 搭建私有网络集群

    首先,需要保证节点的ipfs服务在运行状态,即“ipfs daemon”指令在运行中。

    然后,在要连接的目标节点中,通过如下指令,查询该节点的id。

    ipfs id
    

    最后,在私有节点中,手动添加其它节点的bootstrap信息。

    ipfs bootstrap add /ip4/192.168.23.101/tcp/4001/ipfs/12D3KooWG8oq9bC6WWsuUuvzUjNF6vPpjkoWmhTpQonJPfZbCRosB
    

    其中,/ip4/后面的ip地址是要连接的目标节点的ip地址,可以通过指令:ip address在目标节点中查看。

    /ipfs/后是目标节点的ipfs的id。

  7. 验证与测试

    在节点中输入如下指令,查询当前连接的节点。

    ipfs swarm peers
    

    测试在一个节点创建文件并添加到ipfs网络,其它节点接收。

    • 创建文件

      echo helloworld > test.txt
      
    • 添加到ipfs网络

      ipfs add test.txt
      

      返回信息,其中包括以Qm开头的哈希值,复制哈希值。

    • 通过哈希值获取文件

      在另一个节点中,通过文件的哈希值,获取文件。

      ipfs cat <Qm开头的哈希值>
      

      运行过后,打印出helloworld,代表搭建成功。

  8. 注意事项

    如果发现ipfs节点没有正常连接,首先检查各个节点的ipfs服务是否正在运行状态,如果运行状态正常,检查是否正确的设置了虚拟机的静态ip地址。

上一篇:Docker Compose 和 Docker Swarm 和 Docker Service


下一篇:五款*的Docker容器GUI工具