IPFS-安装与运行环境配置
发布日期:2021-06-29 22:24:25 浏览次数:2 分类:技术文章

本文共 7935 字,大约阅读时间需要 26 分钟。

文章目录

一、项目选择

IPFS 协议包括4种不同语言的实现:

从 Juan Benet 在2015年5月5日在IPFS 网络上存储第一段数据 Hello World^11 开始,目前已经发展到 7k+ star, 200位代码贡献者。go-ipfs 版本也迭代到 0.4.18 版本。

在这里插入图片描述
IPFS 协议目前主要是 go-ipfs 和 js-ipfs 实现得较为完善。这里我们采用 golang 实现的版本验证测试。

二、二进制安装 IPFS

根据自己的操作系统选择相应的安装包

https://dist.ipfs.io/#go-ipfs

1. linux 下安装

官网: https://github.com/ipfs/go-ipfs#install-prebuilt-packages

二进制安装有两种方式:

方式一:https://ipfs.io/ipns/dist.ipfs.io#go-ipfs 直接下载 IPFS 安装包

方式二: 使用linux 包管理工具nix

如上,它通过nix 这个包管理软件来安装。
nix官网: https://nixos.org/download.html

#安装nixcurl -L https://nixos.org/nix/install | sh# 通过nix直接安装nix-env -i ipfs

方式一,下载完成 IPFS 安装包后,我们将它解压到你的可执行文件路径($PATH)之下,执行命令:

$ tar xvfz go-ipfs.tar.gz

$ cd go-ipfs
$ ./install.sh

测试:

$ ipfs help
USAGE:
ipfs - Global p2p merkle-dag filesystem.

1.1 Nix

官网: https://nixos.org/

Nix

For Linux and MacOSX you can use the purely functional package manager Nix:

$ nix-env -i ipfs

You can also install the Package by using its attribute name, which is also ipfs.

Nix是一个强大的Linux和其他Unix系统的包管理器,它使包管理变得可靠和可复制。在不同的机器上共享您的开发和构建环境。

NixOS是一个Linux发行版,具有独特的包和配置管理方法。它建立在Nix包管理器之上,是完全声明式的,使升级系统更加可靠,并且具有许多其他优点。

2. Window下安装

下载地址:https://dist.ipfs.io/#go-ipfs (选windows binary)

解压
在这里插入图片描述
创建一个ipfs节点

执行:.\ipfs.exe init

查看节点ID

执行:.\ipfs.exe id

启动节点服务器

执行:.\ipfs.exe daemon打开 http://localhost:5001/webui 浏览web ui界面

往节点中新增文件或目录

新增文件: .\ipfs.exe add hello.txt新增目录: .\ipfs.exe add -r hello备注:可以通过文件hash直接访问文件.\ipfs.exe cat /ipfs/QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxchttps://ipfs.io/ipfs/QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc

将节点ID与文件Hash进行绑定

绑定后,只需访问 https://ipfs.io/ipns/节点ID 就可以访问对应的文件或目录了
注意:文件或目录更新后,需要重新进行绑定
绑定操作: .\ipfs.exe name publish 文件或目录的hash值

三、源码安装 IPFS 和 配置

官网参考: https://github.com/ipfs/go-ipfs#download-and-compile-ipfs

  1. 首先是下载节点软件IPFS

    #git clone https://github.com/ipfs/go-ipfs.git#$ cd go-ipfs#$ make install# 使用下面方法,下载成功了$ go get -u -d github.com/ipfs/go-ipfs$ cd $GOPATH/src/github.com/ipfs/go-ipfs$ make install

    $GOPATH没有设置,Go 1.8 版本之后,GOPATH 默认在用户目录的 go 文件夹下。

    /root/go/bin 下 生成有刚才安装的ipfs命令

    [root@VM_0_14_centos bin]# lsipfs[root@VM_0_14_centos bin]# pwd/root/go/bin

    可以使用ln (ln [选项] 源文件 目标文件) 建立软连接 方便使用

    ln -s /root/go/bin/ipfs /usr/sbin/ipfs
  2. 初始化本地仓库

    和git类似,ipfs节点也要初始化一个本地仓库,执行init子命令来初始化本地仓库,ipfs init

    在home目录下面运行 ipfs init 进行初始化,完成ipfs节点的创建

    cd /root/go/bin/./ipfs  init

    看到如下提醒,说明已经安装成功!

    [root@VM_0_14_centos bin]# ./ipfs  initinitializing IPFS node at /root/.ipfsgenerating 2048-bit RSA keypair...donepeer identity: QmZa1uirV57QcKj5CLv9myxVJ5LyYLs7cdFdETPEtrL1pxto get started, enter:	ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/readme[root@VM_0_14_centos bin]# ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/readme-bash: ipfs: command not found[root@VM_0_14_centos bin]# ./ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/readmeHello and Welcome to IPFS!██╗██████╗ ███████╗███████╗██║██╔══██╗██╔════╝██╔════╝██║██████╔╝█████╗  ███████╗██║██╔═══╝ ██╔══╝  ╚════██║██║██║     ██║     ███████║╚═╝╚═╝     ╚═╝     ╚══════╝If you're seeing this, you have successfully installedIPFS and are now interfacing with the ipfs merkledag! -------------------------------------------------------| Warning:                                              ||   This is alpha software. Use at your own discretion! ||   Much is missing or lacking polish. There are bugs.  ||   Not yet secure. Read the security notes for more.   | -------------------------------------------------------Check out some of the other files in this directory:  ./about  ./help  ./quick-start     <-- usage examples  ./readme          <-- this file  ./security-notes[root@VM_0_14_centos bin]#

    执行以上命令后,或者用户的根目录(linux:/root/ 或 /home/xxx windows:下C:\Users\Administrator.ipfs)下生成一个名为.ipfs文件夹用于存储节点数据。

    ipfs init也就是ipfs初始化。通过初始化我们创建了一个本地的离线IPFS节点在这个离线节点中我们也可以做一些简单的操作。比如添加文件、查看文件内容、查看版本、查看配置等。

  3. 打开ipfs配置文件

    .ipfs节点的默认存储空间为10个G,如果需要修改可以在~/.ipfs/config文件中修改。

    将"StorageMax": "10GB"修改为其他值即可。

  4. 查看节点ID

    ./ipfs id
  5. 添加文件到节点

    添加命令:ipfs add filename
    查看命令:ipfs cat 添加文件时返回的哈希值

    具体操作:

    创建一个文件并在里面写入"123456":

    添加到本地节点:
    添加成功后,会返回该文件的哈希,我们可以通过它来查看刚刚添加的文件:

    [root@VM_0_14_centos bin]# touch ipfsfile.txt[root@VM_0_14_centos bin]# echo "123456" > ipfsfile.txt[root@VM_0_14_centos bin]# ./ipfs add ipfsfile.txtadded QmQU2gS4gZ7TpiTECjDUxdQFd9bBBEWxDxPPfhLfYHVuei ipfsfile.txt 7 B / 7 B [===============================================================================] 100.00%[root@VM_0_14_centos bin]# ./ipfs cat QmQU2gS4gZ7TpiTECjDUxdQFd9bBBEWxDxPPfhLfYHVuei123456[root@VM_0_14_centos bin]#

    你需要记录下这个编码,因为需要使用它来访问本地仓库(或ipfs网络)中的文件。

    注意:ipfs并不会无节制地将你本地仓库中的文件分布到其他ipfs节点中,如果没有其他的ipfs节点搜索你的文件(的哈希值),那么你本地仓库中的文件将始终只存在于本地。

  6. 将节点接入网络

    IPFS是分布式的全球存储网络。也就是说可以随时跟全球的计算机进行通信并做数据交换。显而易见离线的情况下肯定无法跟其他节点进行通信对不对 所以需要加入到IPFS网络中。在IPFS中要加入到网络中相当简单只需要运行一个简单的命令就能实现。

    使用命令ipfs daemon,通过ipfs daemon 实现和其他节点链接

    [root@VM_0_14_centos bin]# ./ipfs daemon

    只有当启动监听后,节点才能够接受ipfs网络中的内容检索请求,参与内容的交换与分布。

    启动后在浏览器中输入:https://ipfs.io/ipfs/QmQU2gS4gZ7TpiTECjDUxdQFd9bBBEWxDxPPfhLfYHVuei

    即可查看刚刚添加的文件的具体内容。

    打开Web节点客户端

    http://localhost:5001/webui

1. ipfs daemon命令

ipfs daemon命令用来启动一个连接网络的IPFS节点。

命令行

ipfs daemon [--init] [--routing=
] [--mount] [--writable] [--mount-ipfs=
] [--mount-ipns=
] [--unrestricted-api] [--disable-transport-encryption] [--enable-gc] [--manage-fdlimit=false] [--offline] [--migrate] [--enable-pubsub-experiment] [--enable-mplex-experiment=false]

选项

-init                         bool   - 是否使用默认设置自动初始化ipfs,默认值:false--routing                      string - 路由选项,默认值:dht--mount                        bool   - 是否将IPFS挂载到文件系统,默认值:false--writable                     bool   - 是否允许使用`POST/PUT/DELETE`修改对象,默认值: false.--mount-ipfs                   string - 当使用--mount选项时IPFS的挂接点,默认值采用配置文件中的设置--mount-ipns                   string - 当使用--mount选项时IPNS的挂接点,默认值采用配置文件中的设置--unrestricted-api             bool   - 是否允许API访问未列出的哈希,默认值:false--disable-transport-encryption bool   - 是否进制传输层加密,默认值:false。当调试协议时可开启该选项--enable-gc                    bool   - 是否启用自动定时仓库垃圾回收,默认值:false--manage-fdlimit               bool   - 是否按需自动提高文件描述符上限,默认值:false--offline                      bool   - 是否离线运行,即不连接到网络,仅提供本地API,默认值:false--migrate                      bool   - true对应于mirage提示时输入yes,false对应于输入no--enable-pubsub-experiment     bool   - 是否启用发布订阅(pubsub)特性,该特性目前尚处于实验阶段--enable-mplex-experiment      bool   - 是否启用`go-multiplex`流多路处理器,默认值:true

说明

服务进程将在指定的端口监听网络连接。使用ipfs config Addresses 命令修改默认端口。

例如,修改网关监听端口:

ipfs config Addresses.Gateway /ip4/127.0.0.1/tcp/8082
同样的方式修改API地址:
ipfs config Addresses.API /ip4/0.0.0.0/tcp/5001
在修改地址后,确保重新启动服务进程以便生效。

默认情况下,网络仅在本地可以访问,如果希望允许其他计算机访问,可以 使用地址0.0.0.0。例如

./ipfs config Addresses.Gateway /ip4/0.0.0.0/tcp/8080

**当开放API访问时请千万小心,这存在一定的安全风险,因为任何人都可以 远程控制你的节点。**如果你希望远程控制节点,请使用防火墙、授权代理 或其他服务来保护该API访问地址。

修改http默认只监听本地端口

ipfs本身开发了基于http的服务框架,客户端发送http post请求到远程节点,远程节点接受请求并处理。默认的http api接口端口地址是:5001,可以直接修改config文件或通过命令修改。

命令修改: $ ipfs config Addresses.API /ip4/0.0.0.0/tcp/5001

另外ipfs默认http只监听本地端口,想要支持远程访问,需要API配置做如下修改: /ip4/127.0.0.1——>/ip4/0.0.0.0

过程问题整理

外网访问webui,web界面报错如下:

您的 IPFS 守护程序是否正在运行?
Failed to connect to the API.
Make sure you configure your IPFS API to allow cross-origin (CORS) requests, running the commands below:

解决方法:

./ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://taigu.xxx.cn:5002", "http://127.0.0.1:5001", "https://webui.ipfs.io"]'./ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST"]'

2. ipfs goland

四、ipfs http客户端库

Ipfs节点提供和REST API接口,可供我们在程序代码中操作节点进行文件的上传等操作。不过大多数情况下,我们并不需要直接操作这个REST开发接口,而是使用经过封装的更友好的ipfs-api。

即官方封装好了一些,ipfs 客户端工具。

1. python

https://pypi.org/project/ipfsapi/

2. js

https://www.npmjs.com/package/ipfs-http-client

五、参考

ipfs安装和配置

参考URL: https://www.jianshu.com/p/ba332e67278a
ipfs节点安装与使用
参考URL: https://www.cnblogs.com/helloworld2018/p/8971449.html
https://github.com/xipfs/IPFS-Internals/blob/master/ebook/01.0.md
[推荐]ipfs命令手册
参考URL: http://cw.hubwiz.com/card/c/ipfs/1/1/5/

转载地址:https://docker.blog.csdn.net/article/details/106212948 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:IPFS-文件HASH值计算
下一篇:IPFS入门介绍

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月08日 15时44分26秒