文章目录

  • 一、项目选择
  • 二、二进制安装 IPFS
    • 1. linux 下安装
      • 1.1 Nix
    • 2. Window下安装
  • 三、源码安装 IPFS 和 配置
    • 1. ipfs daemon命令
      • 修改http默认只监听本地端口
      • 过程问题整理
    • 2. ipfs goland
  • 四、ubuntu下安装和使用
    • 什么是snap
  • 五、ipfs http客户端库
    • 1. python
    • 2. js
  • 六、参考

一、项目选择

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

#安装nix
curl -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/QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc
https://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]# ls
    ipfs
    [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  init
    initializing IPFS node at /root/.ipfs
    generating 2048-bit RSA keypair...done
    peer identity: QmZa1uirV57QcKj5CLv9myxVJ5LyYLs7cdFdETPEtrL1px
    to 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/readme
    Hello and Welcome to IPFS!██╗██████╗ ███████╗███████╗
    ██║██╔══██╗██╔════╝██╔════╝
    ██║██████╔╝█████╗  ███████╗
    ██║██╔═══╝ ██╔══╝  ╚════██║
    ██║██║     ██║     ███████║
    ╚═╝╚═╝     ╚═╝     ╚══════╝If you're seeing this, you have successfully installed
    IPFS 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.txt
    added QmQU2gS4gZ7TpiTECjDUxdQFd9bBBEWxDxPPfhLfYHVuei ipfsfile.txt7 B / 7 B [===============================================================================] 100.00%[root@VM_0_14_centos bin]# ./ipfs cat QmQU2gS4gZ7TpiTECjDUxdQFd9bBBEWxDxPPfhLfYHVuei
    123456
    [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=<routing>] [--mount] [--writable] [--mount-ipfs=<mount-ipfs>] [--mount-ipns=<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

四、ubuntu下安装和使用

你可以使用snapcraft来安装IPFS

snap install ipfs
root@VM-0-2-ubuntu:~# ipfs  init
generating ED25519 keypair...done
peer identity: 12D3KooWDretF1EQoQ2My1NYUG1gSifhTfeevzkrFwySZGxAwAKb
initializing IPFS node at /root/snap/ipfs/common
to get started, enter:ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/readmeroot@VM-0-2-ubuntu:~#

什么是snap

Ubuntu离线部署snap软件包
参考URL: http://jingsam.github.io/2018/11/22/install-snaps-offline.html

snap来自于Snappy, Snappy是Canonical公司的一个包管理和软件部署系统。它最初是为Ubuntu手机操作系统设计的。

在离线部署方面,Windows明显比Linux做得好,Windows软件包通常会将软件所需的依赖打包,部署时只需拷贝一个软件安装包即可。那Linux有没有类似Windows软件安装包的东西呢?幸运的是,Ubuntu提供了snap软件包机制,可以用来简化离线部署。

snap软件包类似于windows的软件安装包,将所需的依赖都统一打包到软件包中,部署时只需拷贝snap文件。另外,snap也加强了安全隔离机制,通过注册软件包的签名和权限控制信息,使得snap软件运行在“沙盒”环境中。

snap是一种全新的软件包管理方式,它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立。所以使用snap包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理。但是由此带来的问题就是它占用更多的磁盘空间。

Snap的安装包扩展名是.snap,类似于一个容器,它包含一个应用程序需要用到的所有文件和库(snap包包含一个私有的root文件系统,里面包含了依赖的软件包)。它们会被安装到单独的目录;各个应用程序之间相互隔离。使用snap有很多好处,首先它解决了软件包的依赖问题;其次,也使应用程序更容易管理。

现在支持snap的应用并不多,snap软件包一般安装在/snap目录下

snap不同于以往的apt,通过它可以简单的解决安装过程中的依赖问题

五、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/
在CentOS 7/CentOS 8上安装Snapd和snap应用程序
参考URL: https://www.linuxidc.com/Linux/2020-03/162485.htm

IPFS-安装与运行环境配置相关推荐

  1. java安装及运行环境配置

    本文将讲解java的安装以及相关运行环境的配置. 安装 安装包可以去官网下载.版本尾号为偶数一般为测试版本,所以推荐下载奇数尾数安装包. ​ 安装界面,一直下一步即可. ​ 安装路径设置,如果为节省c ...

  2. Asymptote 的编译安装与运行环境配置

    简介 Asymptote 是一种支持二维与三维绘图并且对 TeX 非常友好的科学绘图编程语言. 从 Asymptote svn 仓库迁出源码 $ svn co http://asymptote.svn ...

  3. 安装JDK1.8+环境配置

    安装JDK1.8+环境配置 1.下载JDK 2.安装JDK 3.环境配置 3.1 新建系统变量 3.2 添加Path路径 3.3 使用cmd命令行验证是否环境配置成功 1.下载JDK 直接官网下载:h ...

  4. laravel5.8笔记一:安装与服务器环境配置

    laravel版本:5.8 环境要求: PHP >= 7.1.3 OpenSSL PHP 扩展 PDO PHP 扩展 Mbstring PHP 扩展 Tokenizer PHP 扩展 XML P ...

  5. Linux下安装Dubbo运行环境

    Linux下安装Dubbo运行环境 1.1.1    安装jdk zk首先需要安装jdk环境. yum -y install glibc.i686       #jdk依赖glibc mkdir /u ...

  6. eclipse下载,安装,JDk环境配置教程

    eclipse下载,安装,JDk环境配置教程(多图) 第一步:下载eclipse,并安装. 下载链接:http://www.eclipse.org/downloads/ 点击 Download Pac ...

  7. JDK安装、java环境配置(转)

    JDK安装.java环境配置 JDK是Java语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境,JAVA工具和JAVA ...

  8. Win10系统下Python安装和Geany环境配置的几点总结

    Win10系统下Python安装和Geany文本编辑器配置的几点总结 (START OF MY BLOG LIFE) 一.Python的安装 Python直接可以在官网下载(https://www.p ...

  9. Oracle 12cR1 RAC 在VMware Workstation上安装(上)—OS环境配置

    Oracle 12cR1 RAC 在VMware Workstation上安装(上)-OS环境配置 1.1  整体规划部分 1.1.1  所需软件介绍 Oracle RAC不支持异构平台.在同一个集群 ...

  10. 安装jre运行环境_如何下载安装java运行环境jre

    如果你只需要运行Java程序或Applet,下载并安装它即可.如果你要自行开发Java软件,请下载JDK.在JDK中附带有JRE.注意由于Microsoft对Java的支持不完全,请不. . Java ...

最新文章

  1. 中如何构造有参和无惨_CAD制图初学入门:CAD机械软件中如何构造孔?
  2. 前端笔记(6)css布局机制,浮动,清除浮动,图片格式,ps切片工具及插件
  3. php lodop 实例,Vue使用lodop实现打印小结
  4. 分布式内存数据库---Redis的持久化
  5. Batch Normalization原文详细解读
  6. mysql 数据传输 定时,MySQL数据库定时备份的实现方法
  7. android点击地址调用地图,Android 实现点击按钮 调用手机外部地图导航
  8. OpenCV Mat基础认知感
  9. 【转】java注解-最通俗易懂的讲解
  10. 论文重复率太高咋办?Python来帮你解决
  11. MCSA / Windows Server 2016 使用Hyper-V组件搭建实验环境
  12. eureka服务下架、服务续期及eureka源码分析
  13. 解决多旅行商(MTSP)的分组遗传算法(GGA-SS)
  14. bedgraph文件转bigwig文件
  15. 疑因内部宫斗被离职,中兴 70 后程序员从公司坠楼 ​​​​
  16. MIT又出新玩法,利用AI可轻松分离视频中的乐器声音
  17. VMware workstation虚拟机REHL8下配置安装Django 4.0.6 +uwsgi 2.0.20 +nginx1.22+Mariadb10.9.1
  18. 福昕阅读器不能编辑情况
  19. TCP/IP协议:最大传输单元MTU 路径MTU
  20. 计算机映像缺失磁盘如何修复,Win10安装会遇到的问题汇总及解决方法

热门文章

  1. Seata实战-分布式事务简介及demo上手
  2. 第二次Pr培训学习笔记
  3. 音频转文字怎么操作?推荐三个实用软件
  4. 《中国垒球》:晋级决赛·剑指冠军
  5. DirectX修复工具通用数据包
  6. 如何通过迅雷加速下载Android SDK
  7. 诺基亚(Nokia)衰落的真实原因
  8. Redis键-值数据库 nosql 数据建模(5)------ 如何存储树形结构的数据
  9. Notepad++ 编辑器常用设置与常用组合快捷键汇总
  10. C++学习32:侯捷C++11,14新特性(标准库部分)