IPFS-節點安裝與運行環境配置

一、項目選擇

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

下載完成 IPFS 安裝包後,我們將它解壓到你的可執行文件路徑($PATH)之下,執行命令:

$ tar xvfz go-ipfs.tar.gz
$ cd go-ipfs
$ ./install.sh

測試:

$ ipfs help
USAGE:

ipfs - Global p2p merkle-dag filesystem.

Window 安裝

下載完成 IPFS 安裝包後,我們將 ipfs.exe 解壓到%PATH%路徑之下.測試:

$ ipfs help
USAGE:

ipfs - Global p2p merkle-dag filesystem.

三、源碼安裝 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
    
  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]# 
    

    執行以上命令後,或者用戶的根目錄(/root/ 或 /home/xxx)下生成一個名爲.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.txt
     7 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

    現在打開你的瀏覽器,訪問http://127.0.0.1:8000/,一切順利的話,你可以看到一個文本框和一個按鈕,點擊按鈕,即可將文本框的內容上傳到ipfs節點。

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/127.0.0.1/tcp/5002
在修改地址後,確保重新啓動服務進程以便生效。

默認情況下,網絡僅在本地可以訪問,如果希望允許其他計算機訪問,可以 使用地址0.0.0.0。例如

./ipfs config Addresses.Gateway /ip4/0.0.0.0/tcp/8080
**當開放API訪問時請千萬小心,這存在一定的安全風險,因爲任何人都可以 遠程控制你的節點。**如果你希望遠程控制節點,請使用防火牆、授權代理 或其他服務來保護該API訪問地址。

外網訪問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"]'

三、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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章