03.06 技術精選丨如何在IPFS上託管個人網站

您正在閱讀的網站可以完全使用,而無需在服務器上運行後端。這樣的網站被稱為靜態網站。


靜態網站向瀏覽器提供所有內容和邏輯(JavaScript)。所有交互(例如搜索或單擊內部鏈接)都是通過包含的JS腳本進行的。雖然這聽起來像是一個外行人所期望的,但這與互聯網的當前狀態相去甚遠。


在早期,許多網站僅由靜態HTML網站組成。如今,許多現代網站都依賴於運行中的集中式後端服務器。這不僅可以帶來動態體驗,而且還會導致鏈接失效,URL的使用壽命有限。許多人至少經歷過一次死鏈接的現象,並且隨著互聯網的老化,這個問題還會加劇。

技術精選丨如何在IPFS上託管個人網站


內容可尋址存儲


最近對互聯網進行分佈式存儲的努力,再次導致了諸如內容可尋址存儲之類的技術。


互聯網上的普通URL https://lpfann.me/是任意選擇的單詞,與實際內容無關。


內容尋址使用數學哈希函數將網站的內容壓縮為稱為hash的短字符串。哈希函數的妙處在於,它們很可能會產生唯一的輸出以及這樣的唯一地址。


這允許人們僅基於內容哈希即可使用和交換內容的用例。IPFS(星際文件系統)就是這種應用的一個例子 。


技術精選丨如何在IPFS上託管個人網站


IPFS引入了一種用於內容的尋址方案,並且它不使用中央服務器的傳輸網絡進行信息交換。當使用IPFS應用程序的人瞭解其他節點需要的信息時,它們會自動充當其他節點的服務器。


這樣就無需大型中央服務器或內容分發網絡,就可實現更強大和分佈式的互聯網,如果你要使用IPFS託管網站,需要它是靜態的。


將網站設為靜態


該網站是使用Hugo構建的 ,已經產生了靜態輸出。啟用relativeURL與IPFS尋址一起使用僅是重要的 。


我們還在為雨果使用學術主題。Academic使用多種外部字體和JavaScript資源來增強內容表示。雖然完全有可能託管引用非IPFS資源的IPFS網站,但它並未完全分散。


幸運的是,Academic主題還提供了一個下載工具,可將所有外部資產保存在網站文件夾中。


在撰寫本文時,主下載器尚不支持所有資產,但是一個開放的請求增加了對大多數缺失內容的支持。丟失的另一件事是字體,這些字體最初來自我們手動下載的Google字體CDN。


現在,我們有了一個運行在本地字體和JavaScript資產1上的完整網站。這樣,您可以下載網站文件並終止Internet連接,您將獲得相同的體驗。


託管IPFS網站


如果我們使用IPFS對網站進行哈希處理,則會得到如下內容哈希:


/ipfs/QmSPZuY3K1XieH7M9zh4qs9MEGFf4GZdBv3STaiJpBaC6o


現在,其他人可以直接使用自己的IPFS客戶端或使用可用的瀏覽器插件之一來檢索網站。

技術精選丨如何在IPFS上託管個人網站

此博客文章的草稿經過散列並固定到本地IPFS節點


為了使其他人能夠檢索網站的文件,我們必須保持IPFS節點運行或要求其他人對其進行緩存(固定)。


有所謂的固定服務(例如 Pinata)提供此服務。另一個項目是 Filecoin,它建立在IPFS之上。它使用一種區塊鏈來獎勵節點以保持IPFS文件固定,從而提供金錢激勵。


技術精選丨如何在IPFS上託管個人網站


在過去的幾天中,我們尋找了將新內容添加到git存儲庫時自動固定此網站的方法 。就在昨天, Textile宣佈了在IPFS之上工作的動態存儲桶。儘管不是博客文章的主要重點,但他們還介紹了新的GitHub Actions,它們將內容自動部署到其免費存儲桶託管中。我們在基於Gatsby的演示站點上擴展了 他們的腳本,以與Hugo一起使用。


技術精選丨如何在IPFS上託管個人網站

GitHub Action構建並將文件推送到Textile bucket


現在,在每個推送請求之後,GitHub Action都會編譯Hugo輸出並將其推送到也固定並與IPFS一起使用的Textile桶。


每次更改並推送到存儲庫後,我們的網站內容都會自動顯示在內容哈希下 。


域名解析


為了讓人們知道一個站點可以使用IPFS,可以使用 DNSLinks。這些是附加到DNS域的TXT記錄,它們提示可用的IPFS資源。IPFS瀏覽器擴展可以檢測到這些記錄,並在訪問此類站點時自動使用IPFS進行內容檢索。


來自Textile的腳本還包括用於DNS記錄的更新程序,該 更新程序將IPFS哈希值發佈到Cloudflare DNS服務。每次手動發行後,此腳本都會更新DNSLink。


技術精選丨如何在IPFS上託管個人網站


以太坊名稱服務(ENS)


要擁有一個完全分散的解決方案,可以使用ENS之類的技術來替代DNS系統。


我們的網站也可以在ENS域https://pfannschmidt.eth下訪問,也可以 通過過渡鏈接https://pfannschmidt.eth.link/訪問,該鏈接 使用該eth.link服務允許沒有ENS支持的瀏覽器訪問該網站。


目前,我們手動更新了存儲在ENS中的IPFS哈希,但是將來我們可以使其自動化。


向後兼容


IPFS仍處於初期階段。大多數流行的瀏覽器不支持大多數網絡用戶所必需的協議。


在此之前,還需要使用Web服務器和DNS以傳統方式託管網站。可以使用 Cloudflares IPFS網關和DNS解決方案通過普通HTTP自動提供IPFS內容。


目前,此博客由Netlify託管, 以支持未啟用IPFS的訪問者。


總的來說,這個過程仍然是一件複雜而艱鉅的事情。IPFS及其生態系統在穩步改善的同時,仍有許多工作要做。


幸運的是,出現了諸如Terminal.co之類的新服務 ,它們提供了端到端的分佈式託管解決方案。


分享到:


相關文章: