IPFS介紹 - 星際檔案系統

image

https://ipfs.tech/

IPFS(InterPlanetary File System)是一種分佈式的文件系統,旨在建立一個更快、更安全和更開放的互聯網。

https://youtu.be/5Uj6uR3fp-U?si=LLShkmZ5JBewmt6Q

IPFS的主要特點

分佈式存儲

資料不是儲存在單一的伺服器上,而是分佈在全球許多節點上。這種方法提高了資料的冗餘度和可靠性。

內容尋址

IPFS 使用內容尋址(Content Addressing)來存取資料,而不是傳統的基於位置的尋址方法。每個文件都有一個唯一的哈希值作為其地址。

版本控制

類似於Git,IPFS 支援資料的版本控制,這意味著每個文件的更改都可以被跟蹤和還原。

點對點網絡

IPFS 使用點對點(P2P)技術,允許用戶直接連接並共享資源,而不需要依賴中央伺服器。

去中心化

IPFS 的架構去除了對中心化伺服器的依賴,減少了單點故障的風險,並且提高了資料的可用性和抗審查性。

IPFS 的主要用途

網站託管

通過IPFS,網站可以以去中心化的方式託管,不再依賴單一伺服器,從而提高網站的穩定性和安全性。

分佈式應用程式(dApps)

IPFS 常被用於支援去中心化應用程式,這些應用程式需要一個可靠的分佈式存儲解決方案。

大文件共享

由於其高效的分塊和分發機制,IPFS 非常適合用來共享和存儲大文件。

實際操作

設定與啟動

建立一個ipfs_test資料夾,結構如下。

1
2
3
ipfs_test
|_ staging
|_ data

image

staging 是準備要放即將要 export 出去的檔案的地方。

使用 docker 拉go-ipfs image 啟動,並指定檔案 export 的路徑。

1
2
3
export ipfs_staging=/absolute/path/to/<staging的資料夾>/
export ipfs_data=/absolute/path/to/<data的資料夾>/
docker run -d --name ipfs_host -v $ipfs_staging:/export -v $ipfs_data:/data/ipfs -p 4001:4001 -p 4001:4001/udp -p 127.0.0.1:8080:8080 -p 127.0.0.1:5001:5001 ipfs/go-ipfs:latest

這邊我有遇到錯誤訊息
image

這個錯誤訊息表明在WSL 2中無法找到docker命令,這可能是因為Docker Desktop尚未與WSL 2整合或安裝。

要在WSL 2中使用Docker Desktop,需要先啟用WSL整合。請按照以下步驟操作:

1.打開Docker Desktop。
image

2.點擊左上角的Docker圖標,選擇”Settings”。
image

3.在”Resources”->”WSL integration”部分,勾選”Enable integration with my default WSL distro” 並且也把”Ubuntu-20.04”這邊的開關打開。
image

4.點擊”Apply & Restart”來應用更改。
完成這些步驟後,Docker Desktop將啟用WSL 2整合並重啟。然後,你應該能夠在WSL 2中使用docker命令來運行容器。

如果要監看 logs,可以下:

1
docker logs -f ipfs_host

image

進入 container 做事:

1
2
docker exec -it ipfs_host /bin/sh

image

image
這邊可以發現開啟了3個docker

啟動後可以查看介面
image

http://localhost:5001/webui

將檔案上傳至 IPFS

進入 container 後,把檔案(這裡以 測試檔案 xlsx 為例)丟到本地的 staging 資料夾,下 export指令把它上傳到 ipfs 並取得 hash 值。

1
2
docker exec -it ipfs_host /bin/sh
ipfs add -r /export/

image

上傳完後會取得 ipfs-hash

1
2
added QmaEa7JhzR6qpFZpRNRecKsAsf1tqzAJKktXxQ6tE4iTPf export/test0050.xlsx
added QmUELrk81uAbSsEj4r9XHUtUov7GDLMnTyiVXeCSSoK98o export

用 ipfs-hash 去查看檔案

查看剛剛丟的檔案:

1
ipfs cat /ipfs/QmaEa7JhzR6qpFZpRNRecKsAsf1tqzAJKktXxQ6tE4iTPf

也可以從這邊查看 http://127.0.0.1:8080/ipfs/QmaEa7JhzR6qpFZpRNRecKsAsf1tqzAJKktXxQ6tE4iTPf

這邊會直接下載下來

其他常用指令

1
2
3
4
5
6
7
8
9
10
11
# 查看 log
docker logs -f ipfs_host

# 停止容器
docker stop ipfs_host

# 查看內容
ipfs cat /ipfs/QmV3LyHokfUH1kp94Nrxn8q1E8p95Kt9kfKfJSUpXsGc6Q

# docker exec ipfs_host [指令]
docker exec ipfs_host ipfs add -r /export/

把 node 連結到 IPFS network

查詢自己的 id

1
ipfs id

image

介面這邊也可以查看到節點ID
image

尋找其他的 peers

1
ipfs swarm peers

image

圖形化介面查看方式:
image

查看別人的檔案

可以透過自己的 IPFS 節點造訪別人的檔案內容。我們來看看被 IPFS 團隊放上 IPFS 網絡的土耳其文維基百科 snapshot!

1
ipfs cat Qme2sLfe9ZMdiuWsEtajWMDzx6B7VbjzpSC2VWhtB6GoB1/wiki/Peer-to-peer.html 

image

查看土耳其文維基百科部分的檔案:

1
ipfs ls Qme2sLfe9ZMdiuWsEtajWMDzx6B7VbjzpSC2VWhtB6GoB1/wiki/Anasayfa.html

IPFS 操作介面

首頁

image

檔案

image

瀏覽

image

用戶群

image

image

設定

image

這邊我發現實際操作已經跟教學文章比較起來有更新很多畫面了。

後記

這一篇是我在網路上看到這篇教學文章
https://medium.com/wenchin-rolls-around/%E8%A9%A6%E7%8E%A9-ipfs-a69a52abb954

跟著實際操作的紀錄,這邊有官方介紹文件 https://docs.ipfs.tech/concepts/usage-ideas-examples/ 有興趣可以繼續研究,另外還有其他人開發的 IPFS 相關應用 https://github.com/ipfs/awesome-ipfs