使用 Hippo 進(jìn)入 WebAssembly
介紹
WebAssembly是一項非常有前途的新技術(shù),微軟的云原生計算團(tuán)隊對其 Deis Labs 子公司和 Azure 都非常感興趣。隨著新的 WebAssembly 工具迅速出現(xiàn),您需要一個可以試用它們的環(huán)境。
這就是為什么 Deis Labs 發(fā)布其 新的 Hippo WebAssembly 平臺 如此重要的原因。就像 Deis 的許多工具一樣,它是一種快速安裝、管理和運(yùn)行WebAssembly(WASM) 代碼的方式,無論是瀏覽器托管還是獨(dú)立的 WebAssembly 系統(tǒng)接口 (WASI)。將其內(nèi)置通道與 Git 服務(wù)器結(jié)合使用,您可以在一個環(huán)境中制作和部署不同的版本,將生產(chǎn)、暫存和開發(fā)構(gòu)建分開,同時仍然只需要一臺 Hippo 服務(wù)器。
您可以在 Hippo 中托管多個應(yīng)用程序。WebAssembly 意味著默認(rèn)情況下它們是沙盒的,需要明確的權(quán)限才能訪問主機(jī)系統(tǒng)或外部設(shè)備。您的代碼也是可移植的。一旦為 WebAssembly 編譯,它將在任何 WebAssembly 系統(tǒng)上運(yùn)行,無論是 Windows、Linux 或 macOS,還是 Intel、RISC-V 或 ARM。Hippo 為您提供了一種構(gòu)建一次、測試一次并在任何地方運(yùn)行代碼的方法。
在開發(fā) PC 上設(shè)置 Hippo
盡管像 Hippo 這樣的工具非常適合云原生操作,但當(dāng)前的開發(fā)人員版本僅在桌面系統(tǒng)上進(jìn)行了測試。我決定在運(yùn)行最新版本的 WSL2 并托管 Ubuntu 的 Windows PC 上試用它。Deis 提供了在本地運(yùn)行 Hippo 的說明,以及macOS 和 Linux 系統(tǒng)的詳細(xì)信息。
在 WSL2 Ubuntu 20.04 LTS 系統(tǒng)上獲得運(yùn)行 Hippo 的先決條件存在一些問題。首先,我需要安裝 WAGI,即 WebAssembly 應(yīng)用程序網(wǎng)關(guān)接口。這很容易安裝,在其 GitHub 存儲庫中托管的可下載 tarfile 中有一個二進(jìn)制文件。一旦下載、解壓并移動到用戶二進(jìn)制目錄,它就可以輕松運(yùn)行。我借此機(jī)會安裝了 Rust,因為如果我必須重新編譯任何 Deis 工具,我可能需要它。
這一步可能是 WSL2 上最困難的,因為它需要一份 build-essential 工具包的副本。Ubuntu 20.04 沒有正確的依賴集,所以我需要一個替代的包安裝程序,它允許我將某些關(guān)鍵庫降級到適當(dāng)?shù)陌姹尽?/span>Stack Overflow 的回答向我指出 aptitude,這是 apt 的替代品,它允許您為安裝選擇適當(dāng)?shù)囊蕾図棽⒃试S它替換兩個低級 C 庫。我終于使用它的安裝腳本安裝了 build-essential,為 Rust 做好準(zhǔn)備。
什么是綁定?
將 Rust 安裝為 Hippo 安裝的一部分的主要原因是為了Deis 的 WebAssembly 打包工具Bindle。Bindle 被描述為“聚合對象存儲”系統(tǒng)。它的文檔使用的比喻是“Binder 是數(shù)字銀器抽屜”。我們的銀器抽屜里可能都有一些不同的物品,但我們都使用抽屜來分類和存放銀器。Bindle 對構(gòu)成現(xiàn)代應(yīng)用程序的工件做了很多相同的事情,同時根據(jù)應(yīng)用程序的使用方式和使用位置,提供了對應(yīng)用程序如何組合的一定程度的理解。
推薦的白皮書
您可以擁有一個應(yīng)用程序的 Bindle 描述,其中包含在資源受限的邊緣主機(jī)(如 Raspberry Pi)上進(jìn)行稀疏安裝以及位于公共云核心的高性能服務(wù)器所需的元素。應(yīng)用程序主機(jī)中的 Bindle 客戶端可以獲取元素和依賴項并適當(dāng)?shù)夭渴鹚鼈?。結(jié)果是一個以應(yīng)用程序為中心的部署模型,它避免了使用存儲庫和智能描述將正確的代碼交付到正確的環(huán)境的多次構(gòu)建。
安裝 Bindle 后,您可以運(yùn)行它,使用默認(rèn)設(shè)置設(shè)置本地 Bindle 服務(wù)器以供 Hippo 使用。接下來,我安裝了Node.js的,使用由微軟提供的WSL說明。這需要使用 curl 下載 nvm,然后運(yùn)行它以安裝最新和長期支持的 node.js 版本。不要使用 Ubuntu 說明來安裝節(jié)點(diǎn);他們使用snap 來安裝它,并且在 WSL2 中并沒有很好地支持 snap。
您需要為任何 Hippo 托管的 Rust WebAssembly 應(yīng)用程序安裝 Rust 的 wasm32-wasi 支持,以及 yo-wasm Yeoman 應(yīng)用程序腳手架工具。這將允許您將 Rust 代碼編譯為 WASI 目標(biāo),準(zhǔn)備在 Hippo 中運(yùn)行。
有了這些,我現(xiàn)在可以安裝 .NET 5,在安裝 .NET 5 SDK 和運(yùn)行時之前,首先設(shè)置對 Microsoft 的 Debian 包存儲庫的支持。.NET 運(yùn)行時有 兩種選擇:一種支持 ASP.NET Core,另一種不支持。由于 Hippo 是一個模型-視圖-控制器 Web 應(yīng)用程序,您應(yīng)該使用 ASP.NET 版本的運(yùn)行時。
構(gòu)建和運(yùn)行 Hippo
一旦安裝了所有先決條件,您就可以構(gòu)建 Hippo。首先將 Hippo GitHub 存儲庫克隆到 WSL 系統(tǒng)的本地目錄中。安裝后,您可以構(gòu)建和運(yùn)行該應(yīng)用程序,通過添加 BINDLE_URL 環(huán)境變量將其指向您的本地 Bindle 服務(wù)器。此時最好安裝 Hippo 的 CLI,因為它是應(yīng)用程序開發(fā)和部署所必需的。
您現(xiàn)在可以連接到您的 Hippo 服務(wù)器以測試它是否正常工作。您應(yīng)該在 localhost 的 5001 端口上找到它。如果您正在運(yùn)行 WSL 2 的最新版本,您應(yīng)該能夠使用 localhost從 Windows 桌面瀏覽器連接到它,因為 Microsoft 終于修復(fù)了 WSL 2 的一個長期存在的問題網(wǎng)絡(luò)問題,通過 Windows 代理其虛擬機(jī)網(wǎng)絡(luò),同時仍保留其自己的 IP 地址和虛擬網(wǎng)絡(luò)交換機(jī)。不再需要腳本來提取和共享網(wǎng)絡(luò)地址。
在連接到服務(wù)器之前,您需要注冊一個帳戶。由于它在本地運(yùn)行,您可以選擇您喜歡的任何帳戶詳細(xì)信息;只要確保它們是您能記住的東西,因為您需要詳細(xì)信息來構(gòu)建您的第一個應(yīng)用程序。創(chuàng)建帳戶后,登錄。您將被帶到帶有“創(chuàng)建新應(yīng)用程序”按鈕的“您的應(yīng)用程序”頁面。
創(chuàng)建您的第一個 Hippo WebAssembly 應(yīng)用程序
雖然您可以從 Web UI 為 Hippo 構(gòu)建應(yīng)用程序,但現(xiàn)在使用命令行更容易。確保您已安裝 Hippo CLI,因為 Yeoman 將使用它為您構(gòu)建應(yīng)用程序腳手架。在開始之前,為您的 Hippo 帳戶和密碼及其端點(diǎn)設(shè)置環(huán)境變量。是的,這不是很好的安全實踐,但在這里我們只是使用尚未準(zhǔn)備好用于生產(chǎn)的軟件在隔離的 PC 上構(gòu)建和運(yùn)行測試代碼。
要構(gòu)建一個基本的 hello world 應(yīng)用程序,請使用 yo-wasm 工具構(gòu)建一個 WebAssembly Rust 應(yīng)用程序。如果您按照腳本操作并輸入適當(dāng)?shù)闹担@將構(gòu)建源代碼并將其加載到您的 Hippo 服務(wù)器中。接下來使用 Rust 貨物工具來編譯和測試您的 WASI 應(yīng)用程序。在命令行上運(yùn)行它后,您可以使用 Hippo 的 CLI 工具將其推送到 Bindle,在那里它將在Hippo 中可見。打開項目,選擇您構(gòu)建的開發(fā)環(huán)境,然后單擊鏈接以運(yùn)行您的代碼。
河馬有很多值得喜歡的地方。如果 WebAssembly 缺少一件事,它是一個有效的類似 Heroku 的游樂場,可以幫助您入門。Hippo 可能還不是那個游樂場,但它肯定是您現(xiàn)在可以將其用作您自己的開發(fā)工作流程的一部分,即使在其早期階段也是如此。能夠在開發(fā) PC 上運(yùn)行它是一個額外的優(yōu)勢,因為不需要依賴第三方系統(tǒng)。它的影響足夠低,可以作為 WSL 2 環(huán)境的一部分運(yùn)行,因此您可以利用 VisualStudio Code 等工具,使用其遠(yuǎn)程開發(fā)功能從 Windows 編輯 WSL 中的 Rust 代碼。
如果您對 WebAssembly 感興趣,Hippo 很可能是您入門所需的工具。它使使用 WebAssembly 代碼變得更簡單,將運(yùn)行開發(fā)所需的許多不同部分集中到一個地方。盡管它顯然仍然是一個早期版本,但這里有足夠的內(nèi)容讓您入門,使其成為任何使用WebAssembly的人的必備工具。