我想學習有關 IPFS 和 Web 3.0 的知識,所以我開始研究它,並嘗試將我的站點上傳到那裡。以下是我一路走來學到的一些概念,以及我最終如何將我的網站託管在 tbking.eth 上。我將簡要介紹一下 IPFS,以及為什麼在那裡託管靜態內容是有意義的。如果您已經熟悉 IPFS,您可以跳過前面部分。
什麼是 IPFS
星際檔案系統是共享內容的分散網路。它具有非常簡單但有趣的設計理念:
建立一個在行星間工作的網路,這也是一個更好的跨地球通訊網路。
IPFS 是一個分散的網路,在該網路中,透過 BitTorrent 等多種方式連線對等方並共享檔案。基本原理是,與傳統的 Web 不同,IPFS 中的檔案是根據檔案的位置提供服務的,而傳統的 Web 是根據檔案的位置提供服務的。考慮一下此比較:
Google 的隱私權政策被標識為託管在地址為:
https://policies.google.com/privacy的 Google 伺服器上的檔案。政策內容無關緊要。這稱為 location-addressing。
另一方面,IPFS 透過檔案的內容(使用檔案的雜湊)來標識檔案。假設您要閱讀“XKCD #327 - Exploits of a Mom”。
其IPFS地址為:
https://ipfs.io/ipfs/QmZVjV5jFV7Jo4Hfj6WPyRnHCxf8kbadkqtQBco2gef64x/
該地址不依賴於伺服器的位置,而是雜湊。這稱為 content-addressing。關心 XKCD 的人都可以託管它。這使得斷開的連結不太可能,這也是IPFS的目標之一。
IPFS 文件很好地解釋了這些概念。我將它們推薦給任何想深入研究的人。
在 IPFS 上託管
在 IPFS 上部署靜態內容(例如個人網站)很容易。我在下面列出的步驟可用於任何檔案,例如純 HTML 檔案,由靜態網站生成器(如 Jekyll,Hugo,Hexo 和 Gatsby)生成的網站,甚至是媒體檔案。因此,讓我們開始吧。
新增檔案
IPFS 桌面
如果已安裝並正在執行 IPFS Desktop,則可以使用常規檔案選擇器新增檔案。只需匯入包含您靜態網站內容的目錄即可。
右鍵單擊新新增的內容,然後選擇 Copy CID。開啟以在網上檢視我們的檔案:https://ipfs.io/ipfs/
IPFS CLI
IPFS CLI 允許使用 add 子命令新增檔案和目錄。
最後一行列印的雜湊是整個目錄的 CID,因此也是我們網站的 CID。我們可以看到託管在
https://ipfs.io/ipfs/QmeUG2oZvyx4NzfpP9rruKbmV5UNDmTQ8MoxuhTJGVZVTW/上的示例網站。
提示:在您的網站中使用相對連結非常重要,因為IPFS閘道器的URL類似於/ipfs//file.ext。
PIN
在最後一節中,我們新增的檔案到我們的 IPFS 節點網路找到。這就是 IPFS 閘道器能夠解析它並將其顯示在瀏覽器中的原因。但是,一旦關閉 IPFS 守護程式,該站點很可能將無法訪問。即使在 IPFS 上請求了某些內容之後,接收節點也成為該內容的主機,但是在 12 小時後將對這些內容進行垃圾收集。如何在沒有伺服器的分散式網站中全天候服務您的網站?
在 IPFS 上 Pin 一些內容的節點將永遠託管它(直到取消固定它)。有諸如 Pinata 之類的 Pin 服務,可將檔案 Pin 在其IPFS節點上。這樣,網站將始終可用。
在 Pinata 中,如果內容已經上傳到 IPFS,則可以上傳檔案或僅提供其雜湊值。這是我 Pin 我們上面上傳的示例網站的方式。
提示:最好使用多種 Pin 服務固定您的站點,以實現冗餘。
自動化部署
您可能已經注意到,使用 IPFS 非常容易。我要說的是,這比處理我們使用的傳統網路要容易。但是,每次您要更改檔案時都必須重複此過程,這不是很理想。有像 Fleek 這樣的工具,可以幫助自動完成上面列出的所有步驟。
Fleek 就像 Travis 或 CircleCi 一樣用於 IPFS 部署。您可以將其 Github 帳戶與其關聯,並使用 Github 掛鉤,Fleek 將在每次推送至 Github 儲存庫時觸發部署。他們還 Pin 部署的所有內容。
因此,我使用 Hexo 生成了此部落格,並且能夠在 Fleek 儀表板本身中新增一個構建步驟,因此無需生成 HTML 並將其推送到我的儲存庫。這是我使用的構建命令:
是的,我需要自己安裝子模組。預設情況下,他們還沒有這樣做。檢查一下,這非常容易。
連結到域
因此,現在我們可以啟動並執行我們的網站,但是IPFS上的內容不像傳統網路上那樣容易查詢。我的網站可以在https://tarunbatra.com上找到。
但是在IPFS上,可以透過https://ipfs.io/ipfs/QmTPTa1ddoSkuakaW56SaL9dicbC71BbwfjRbVjasshCXs/訪問當前版本。您看到問題了。這不是人類可讀的。每次更新後,CID都會更改。有兩種解決方案:
DNSLink
使用 DNSLink,您可以將一個普通域指向 IPFS 內容。它可以很容易地設定在 Fleek 上。我已經將 IPFS .tarunbatra.com 指向了使用 Fleek 的 IPFS 版本,您將能夠開啟這個站點。
IPNS(星際命名服務)也存在,它類似於 DNSLink,但現在要慢得多。
以太坊名稱服務
ENS 是一個以太坊區塊鏈上的命名服務,它使用智慧合約購買域名併為其設定解析器記錄。由於涉及以太坊,因此您需要使用 MetaMask 來使用它。
我購買了該域,tbking.eth 並將其指向該站點的 IPFS 內容。每當我更改網站內容時,仍需要對其進行更新。我不確定是否有任何自動化的方法。但是,截至目前,Fleek 正在致力於 ENS 域整合。
IPFS 非常適合作為的儲存層 Web 3.0。