zoukankan      html  css  js  c++  java
  • 学习IPFS

    注:以下所有操作均在CentOS 6.8 x86_64位系统下完成。

    IPFS(InterPlanetary File System)是一个点对点的分布式超媒体分发协议,被认为是最有可能取代HTTP的新一代互联网协议,关于IPFS的更多介绍可参考:IPFS官网

    #准备工作#

    在下载IPFS之前可能需要“科学上网”,详见:Centos安装Shadowsocks+安装Privoxy+配置SSH使用代理

    #安装IPFS#

    这里我们直接下载其官方编译好的版本(Prebuilt Package)。

    # wget https://dist.ipfs.io/go-ipfs/v0.4.14/go-ipfs_v0.4.14_linux-amd64.tar.gz
    # tar zxf go-ipfs_v0.4.14_linux-amd64.tar.gz
    # mv go-ipfs /usr/local/

    配置环境:

    # vim /etc/profile
    ...
    export IPFS_HOME=/usr/local/go-ipfs
    export PATH=$PATH:IPFS_HOME
    ...
    # source /etc/profile
    # ipfs version
    ipfs version 0.4.14

    可以看到IPFS已经安装成功。

    #使用IPFS#

    一、创建IPFS节点

    # ipfs init
    initializing IPFS node at /root/.ipfs
    generating 2048-bit RSA keypair...done
    peer identity: QmTW4AoQABDBxQwa4fn5yEqhAKXx2fyFXkksy6LQuDQWK1
    to get started, enter:
            ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

    这个时候默认会在~/目录下创建一个.ipfs的目录,里面包含了配置文件信息等。可以自由进行修改(比如可以把默认的10GB存储空间改小点):

    # vim /root/.ipfs/config
    ...
      "Datastore": {
        "StorageMax": "10GB",
        ...
      },
      "Addresses": {
        "Swarm": [
          "/ip4/0.0.0.0/tcp/4001",
          "/ip6/::/tcp/4001"
        ],
    ...
      }
    ...

    也可以自己选择指定的IPFS目录:

    # mkdir -p /data/ipfs
    # vim /etc/profile
    ...
    export IPFS_PATH=/data/ipfs
    ...
    # source /etc/profile
    # ipfs init
    generating 2048-bit RSA keypair...done
    peer identity: QmQa7NH5w7pxz34Sme96GUM8dH14upF3H67PDCX8nKXp4T
    to get started, enter:
            ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

    这里将IPFS目录改为/data/ipfs。

    二、查看节点ID

    # ipfs id
    {
            "ID": "QmQa7NH5w7pxz34Sme96GUM8dH14upF3H67PDCX8nKXp4T",
            "PublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDdpn...",
            "Addresses": null,
            "AgentVersion": "go-ipfs/0.4.14/",
            "ProtocolVersion": "ipfs/0.1.0"
    }

    这里可以看到QmQa7NH5w7pxz34Sme96GUM8dH14upF3H67PDCX8nKXp4T就是当前节点的ID值,每个节点都有一个唯一的ID值。

    三、跨域资源共享

    # ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST", "OPTIONS"]'
    # ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'

    四、启动服务器

    当前IPFS节点虽然创建成功,但还没有启动加入到IPFS网络,外面无法访问,需要启动服务器:

    # ipfs daemon &
    Initializing daemon...
    Swarm listening on /ip4/127.0.0.1/tcp/4001
    Swarm listening on /ip4/172.18.167.60/tcp/4001
    Swarm listening on /p2p-circuit/ipfs/QmQa7NH5w7pxz34Sme96GUM8dH14upF3H67PDCX8nKXp4T
    Swarm announcing /ip4/127.0.0.1/tcp/4001
    Swarm announcing /ip4/172.18.167.60/tcp/4001
    API server listening on /ip4/127.0.0.1/tcp/5001
    Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
    Daemon is ready

    五、新增文件

    我们可以将本地的一个文件添加到IPFS网络中:

    # pwd
    /root
    # vim foo.txt
    ...
    # cat foo.txt
    Hello World
    
    # ipfs add foo.txt
    added QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u foo.txt
    # ipfs cat QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u
    Hello World

    这个时候我们已经将一个文件foo.txt添加到当前的IPFS节点中,并且可以通过生成的唯一哈希值QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u来查看该文件内容,接下来我们需要将其同步到IPFS网络中:

    # ipfs daemon &
    Initializing daemon...
    ...
    Daemon is ready

    我们试着在本地浏览器打开地址(https://ipfs.io/ipfs/QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u)查看文件:

    可以看到文件已经成功地同步到了IPFS网络中。

    六、新增文件夹

    接下来我们可以在IPFS的根目录下创建文件夹,并且可以将foo.txt文件cp或mv到新创建的文件夹中。

    # ipfs files mkdir /foo
    # ipfs files cp /ipfs/QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u /foo/foo.txt
    # ipfs files ls /
    foo
    # ipfs files ls /foo
    foo.txt
    # ipfs files read /foo/foo.txt
    Hello World

    可以看到我们已经成功地将该文件cp到了一个foo的新建目录下,接下来我们尝试在本地创建一个目录并将其上传到IPFS网络中:

    # mkdir bar
    # vim bar/bar.txt
    # cat bar/bar.txt
    Hello World 2
    # ipfs add -r bar/
    added QmShGj2c1Qe2wQKMUNMx45EPoKsJmwewojrE1ETzXggUFG bar/bar.txt
    added QmepZ8kfqvfDgLtaA7jiCZowXsgn63bKxJLS5NPNiqU2A9 bar

    我们试着在本地浏览器打开地址(https://ipfs.io/ipfs/QmepZ8kfqvfDgLtaA7jiCZowXsgn63bKxJLS5NPNiqU2A9)查看文件夹:

  • 相关阅读:
    C#Redis缓存帮助类
    [RxSwift教程]9、过滤操作符:filter、take、skip等
    [RxSwift教程]8、变换操作符:buffer、map、flatMap、scan等
    [RxSwift教程]7、Subjects、Variables
    [RxSwift教程]6、观察者2: 自定义可绑定属性
    [RxSwift教程]5、观察者1: AnyObserver、Binder
    [RxSwift教程]4、Observable订阅、事件监听、订阅销毁
    [RxSwift教程]3、Observable介绍、创建可观察序列
    [RxSwift教程]2、响应式编程与传统式编程的比较样例
    [RxSwift教程]1、安装、介绍
  • 原文地址:https://www.cnblogs.com/brishenzhou/p/8866941.html
Copyright © 2011-2022 走看看