一、項目選擇
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
-
首先是下載節點軟件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
-
初始化本地倉庫
和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節點在這個離線節點中我們也可以做一些簡單的操作。比如添加文件、查看文件內容、查看版本、查看配置等。
-
打開ipfs配置文件
.ipfs節點的默認存儲空間爲10個G,如果需要修改可以在~/.ipfs/config文件中修改。將"StorageMax": "10GB"修改爲其他值即可。
-
查看節點ID
./ipfs id
-
添加文件到節點
添加命令: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節點搜索你的文件(的哈希值),那麼你本地倉庫中的文件將始終只存在於本地。
-
將節點接入網絡
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/