IPFS(InterPlanetary File System,星際文件系統)是永久的、去中心化保存和共享文件的方法,這是一種內容可尋址、版本化、點對點超媒體的分佈式協議。git
能夠把 IPFS 想象成全部文件數據是在同一個 BitTorrent 羣而且經過同一個 Git 倉庫存取。github
總之,它集一些成功系統(分佈式哈希表、BitTorrent、Git、自認證文件系統)的優點於一身,是一套很厲害的文件存取系統。golang
IPFS 的發明者 Juan Benet(juan@benet.ai)在 IPFS 技術白皮書中假設了一些使用場景:web
我以爲做爲數據庫這一點對應用開發者來講會頗有用。數據庫
下載 go-ipfs 解壓(下面的示例我是在 Windows 10 上作的,解壓目錄爲 D:\go-ipfs),而後到解壓目錄執行命令 ipfs init
,將在用戶 home(~)下創建 .ipfs 目錄存放數據,默認最大存儲 10G。init 命令能夠帶參,好比修改最大存儲、目錄等,具體參考 ipfs init help
。瀏覽器
繼續執行命令 ipfs daemon
啓動節點服務器:緩存
新開一個命令行,執行命令 ipfs id
以查看當前節點標識:服務器
{ "ID": "QmSYF1HZxhPUWWGrz5bMn16tdD73AeMVhp7pNSHkVCMF7R", "PublicKey": "....", "Addresses": [ "/ip4/169.254.40.215/tcp/4001/ipfs/...", .... ], "AgentVersion": "go-ipfs/0.4.12/", "ProtocolVersion": "ipfs/0.1.0" }
{ "ID": "QmSYF1HZxhPUWWGrz5bMn16tdD73AeMVhp7pNSHkVCMF7R", "PublicKey": "....", "Addresses": [ "/ip4/169.254.40.215/tcp/4001/ipfs/...", .... ], "AgentVersion": "go-ipfs/0.4.12/", "ProtocolVersion": "ipfs/0.1.0" }
網絡
瀏覽器訪問 http://localhost:5001/webui 進入管理界面,查看系統狀態、管理文件以及配置系統。tcp
除了使用 Web 管理界面修改配置外,也能夠直接用命令行 ipfs config show > ipfs.conf
先導出當前配置(JSON 格式,配置項很少且含義明顯),改完後使用 ipfs config replace ipfs.conf
更新配置,重啓服務器就生效了。固然,修改配置也能夠直接用 ipfs config edit
。
服務器最終使用的配置文件保存在 ~/.ipfs/config 中,對比剛剛導出的文件咱們發現導出的文件只比這個 config 少了一項 Identity.PrivKey
,即節點初始化時自動生成的 RSA 私鑰。
節點初始化時會自動生成 RSA 密鑰對,而且私鑰沒有設置密碼。
公鑰經過多重哈希獲得節點 id(即上面的 QmSYF1HZxhPUWWGrz5bMn16tdD73AeMVhp7pNSHkVCMF7R
),節點服務器啓動後會和其餘節點交互公鑰,後續通信時使用對方公鑰加密數據,經過多重哈希對方公鑰、對比對方節點 id 來確認是否正在和正確的節點交互。
私鑰用來解密接收到的數據,也用於 ipns 來綁定文件名。整個過程沒有引入證書,僅是使用了 PKI 機制。
總之,我以爲能夠暫時不用關心密鑰對,可能只有在一些使用場景下面才須要吧。
我當前目錄結構是這樣的:
D:\GO-IPFS │ build-log │ config │ install.sh │ ipfs.conf │ ipfs.exe │ LICENSE │ README.md │ └─b3log └─hacpai README.md
D:\GO-IPFS │ build-log │ config │ install.sh │ ipfs.conf │ ipfs.exe │ LICENSE │ README.md │ └─b3log └─hacpai README.md
我準備添加的目錄是 b3log
,執行命令:
D:\go-ipfs>ipfs add -r b3log 94 B / 94 B [=============================================================================================] 100.00% 0s added Qmco94dYP733XwrUqFUhDtDG8RsqmGQ6UDPvnmH4Pvy2rv b3log/hacpai/README.md added Qmbkno2HVZdW7XfwsVjmuu9VDKBByczFR8qwsBXMjMrjPQ b3log/hacpai added QmPxebZuW2pgfzj5JWq22KUzxStmqQ6i7YUK9Sq9xepXT9 b3log
D:\go-ipfs>ipfs add -r b3log 94 B / 94 B [=============================================================================================] 100.00% 0s added Qmco94dYP733XwrUqFUhDtDG8RsqmGQ6UDPvnmH4Pvy2rv b3log/hacpai/README.md added Qmbkno2HVZdW7XfwsVjmuu9VDKBByczFR8qwsBXMjMrjPQ b3log/hacpai added QmPxebZuW2pgfzj5JWq22KUzxStmqQ6i7YUK9Sq9xepXT9 b3log
這樣咱們使用 ipfs cat /ipfs/Qmco94dYP733XwrUqFUhDtDG8RsqmGQ6UDPvnmH4Pvy2rv
就能夠查看 README.md 了。在其餘節點上也能夠,只要記住這個文件的哈希值就好了。咱們能夠在本身的 HTTP 網關上試試(注意個人端口改爲了 5002,你的默認應該是 8080):
固然也能夠用 ipfs 官方的 HTTP 網關:https://ipfs.io/ipfs/Qmco94dYP733XwrUqFUhDtDG8RsqmGQ6UDPvnmH4Pvy2rv
ipfs get /ipns/QmSYF1HZxhPUWWGrz5bMn16tdD73AeMVhp7pNSHkVCMF7R
ipfs get /ipns/QmSYF1HZxhPUWWGrz5bMn16tdD73AeMVhp7pNSHkVCMF7R
將獲取剛纔咱們發佈的 b3log 目錄。
IPFS 的本意是讓用戶以爲全部文件都是在本地的,沒有「從遠程服務器上下載文件」。Pin 是將文件長期保留在本地,不被垃圾回收。
執行 ipfs pin ls
能夠查看哪些文件在本地是持久化的,經過 add 添加的文件默認就是 pin 過的。
每次修改文件後 add 都會返回不一樣的哈希,這對於網站來講就無法固定訪問地址了,因此咱們須要經過 ipns 來「綁定」節點名。
上面 b3log 目錄的哈希值是 QmPxebZuW2pgfzj5JWq22KUzxStmqQ6i7YUK9Sq9xepXT9
,咱們將整個目錄做爲節點根目錄發佈:
D:\go-ipfs>ipfs name publish QmPxebZuW2pgfzj5JWq22KUzxStmqQ6i7YUK9Sq9xepXT9 Published to QmSYF1HZxhPUWWGrz5bMn16tdD73AeMVhp7pNSHkVCMF7R: /ipfs/QmPxebZuW2pgfzj5JWq22KUzxStmqQ6i7YUK9Sq9xepXT9
D:\go-ipfs>ipfs name publish QmPxebZuW2pgfzj5JWq22KUzxStmqQ6i7YUK9Sq9xepXT9 Published to QmSYF1HZxhPUWWGrz5bMn16tdD73AeMVhp7pNSHkVCMF7R: /ipfs/QmPxebZuW2pgfzj5JWq22KUzxStmqQ6i7YUK9Sq9xepXT9
而後咱們就能夠經過 ipns 訪問了,注意是 ipns:
D:\go-ipfs>ipfs cat /ipns/QmSYF1HZxhPUWWGrz5bMn16tdD73AeMVhp7pNSHkVCMF7R/hacpai/README.md The piper will lead us to reason. 歡迎訪問黑客與畫家的社區 https://hacpai.com
D:\go-ipfs>ipfs cat /ipns/QmSYF1HZxhPUWWGrz5bMn16tdD73AeMVhp7pNSHkVCMF7R/hacpai/README.md The piper will lead us to reason. 歡迎訪問黑客與畫家的社區 https://hacpai.com
之後每次更新文件都再 publish 一下就好了。目前(v0.4.12)使用 ipns 訪問會很慢,聽說 v0.4.14 會解決。
IPFS 容許用戶使用現有的域名系統,這樣就能用一個好記的地址來訪問文件了,好比:
D:\go-ipfs>ipfs cat /ipns/ipfs.b3log.org/hacpai/README.md The piper will lead us to reason. 歡迎訪問黑客與畫家的社區 https://hacpai.com
D:\go-ipfs>ipfs cat /ipns/ipfs.b3log.org/hacpai/README.md The piper will lead us to reason. 歡迎訪問黑客與畫家的社區 https://hacpai.com
只須要在 DNS 解析加入一條 TXT 記錄:
記錄類型 | 主機記錄 | 記錄值 |
---|---|---|
TXT | ipfs | dnslink=/ipns/QmSYF1HZxhPUWWGrz5bMn16tdD73AeMVhp7pNSHkVCMF7R |
原文:https://hacpai.com/article/1511015097370
推薦兩個以太坊相關的實戰教程: