前言#
上一篇《IPFS 分佈式文件儲存原理》對於 IPFS 系統的設計理念、功能、工作原理及 IPNS 做了詳細的介紹,那麼,如何在本地搭建一個 IPFS 節點呢?
本文在macOS 11.2.3
系統上搭建了一個 IPFS 節點(命令行版本),並對文件上傳、下載、網絡同步、pin
、GC
、IPNS
等進行了實際操作,以加深對 IPFS 工作原理的理解。
代碼實踐#
安裝#
wget https://dist.ipfs.io/go-ipfs/v0.8.0/go-ipfs_v0.8.0_darwin-amd64.tar.gz
tar -xvzf go-ipfs_v0.8.0_darwin-amd64.tar.gz
cd go-ipfs
./install.sh
ipfs --version
啟動#
# 啟動節點
ipfs init
# 上傳文件
ipfs add ipfs_init_readme.png
# 上傳文件並且只輸出哈希值
ipfs add -q ipfs_init_readme.png
# 上傳目錄
ipfs add -r [Dir]
# 查看文件
ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/readme
ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/quick-start
# 查看自己上傳的文件
ipfs cat QmaP3QS6ZfBoEaUJZ3ZfRKoBm3GGuhQSnUWtkVCNc8ZLTj
# 查看圖片並輸出到文件
ipfs cat QmfViXYw7GA296brLwid255ivDp1kmTiXJw1kmZVsg7DFH > ipfsTest.png
# 下載文件
ipfs get QmfViXYw7GA296brLwid255ivDp1kmTiXJw1kmZVsg7DFH -o ipfsTest.png
# 壓縮並下載文件
ipfs get QmfViXYw7GA296brLwid255ivDp1kmTiXJw1kmZVsg7DFH -Cao ipfsTest.png
開啟 / 加入服務#
# 查看當前節點信息
ipfs id
# 查看IPFS配置信息
ipfs config show
# 開啟節點伺服器
ipfs daemon
API 服務,默認在 5001 端口,可以通過 http://localhost:5001/webui 進行訪問
網關服務,默認在 8080 端口,在瀏覽器裡訪問文件需要借助於 IPFS 提供的網關服務,由瀏覽器先訪問到網關,網關去獲取 IPFS 網絡殺過了的文件。通過 http://localhost:8080/ipfs/[File Hash] 來訪問上傳到 IPFS 的文件
文件操作#
# 列出文件
ipfs files ls
# 創建目錄
ipfs files mkdir
# 刪除文件
ipfs files rm
# 拷貝文件
ipfs files cp [File Hash] /[Dest Dir]
# 移動文件
ipfs files mv [File Hash] /[Dest Dir]
# 狀態
ipfs files stat
# 讀取
ipfs files read
使用 IPNS 來解決文件更新問題#
# 使用IPNS發布內容以自動更新
ipfs name publish [File Hash]
# 查詢節點id指向的Hash
ipfs name resolve
# 有多個站點需要更新,可以新產生一個秘鑰對,使用新的key發布
ipfs key gen --type=rsa --size=2048 mykey
ipfs name publish --key=mykey [File Hash]
Pinning#
當我們向 IPFS 網絡請求文件時,IPFS 會把內容先同步的本地提供服務,使用 Cache 機制處理文件以防止儲存空間不斷增長,如果文件一段時間未被使用則會被 “回收”,Pining 的作用就是確保文件在本地不被 “回收”。
# pin一個文件
ipfs pin add [File Hash]
# 查詢某一個Hash是否被pin
ipfs pin ls [File Hash]
# 刪除pin的狀態
ipfs pin rm -r [File Hash]
# GC操作
ipfs repo gc
總結#
本文主要在本地部署了 IPFS 文件系統並對基本操作進行了嘗試,基於macOS 11.2.3
和go-ipfs_v0.8.0_darwin-amd64
版本,不同系統操作可能會因版本或依賴問題不一樣,如有錯漏,歡迎交流指正。