云原生集成開發(fā)環(huán)境——TitanIDE
通過網(wǎng)頁在任何地方更安全、更高效地編碼2023-02-28
581
原文作者:kaiyun開云創(chuàng)新技術(shù)總監(jiān) 鄧冰寒
概述
上一期在使用官方容器鏡像快速成功地在 TitanIDE 運行起來了 WeTTY,但是不適合開發(fā)人員使用,而我自己編譯構(gòu)建出來的容器鏡像無法直接運行指定的應(yīng)用(/bin/bash 或 /bin/zsh),本來在 WeTTY的開源項目下面提了 issue,但貌似沒有得到響應(yīng),如果能在一個小時左右快速解決問題,折騰 WeTTY 這個開源軟件對我來說是有價值的。
折騰經(jīng)歷
在經(jīng)過權(quán)衡利弊(內(nèi)心掙扎)之后,為了給開發(fā)者提供最好的使用體驗,我決定花一個小時左右的時間在 TitanIDE 上看看是什么原因?qū)е?WeTTY 不理會我傳遞的參數(shù) --command。
首先在 TitanIDE 創(chuàng)建一個 NodeJS 的項目,這里我采用了 VS Code for Node.js 作為 WeTTY 的開發(fā)環(huán)境。
創(chuàng)建好項目之后,緊接著就是來執(zhí)行使用開源項目的三把斧,fork,clone,run。
分析問題
如上一期文章所提到的,既然--command在官方提供的鏡像可以正常工作的,沒有理由我自己運行的不行,肯定是有環(huán)境的差異性。經(jīng)過一番順藤摸瓜式的盤查,在我預(yù)期的時間內(nèi)找到了問題的根本原因。
首先,WeTTY 在啟動的時候會先獲取 cmmand,如下代碼所示:
localhost 的判斷函數(shù)又有一行代碼判斷 uid 是否為 0, 即 root 用戶才能在 localhost 啟動自定義命令,這邏輯很怪,不知道設(shè)計者是怎么考慮的. TitanIDE 使用了 Ubuntu 作為操作系統(tǒng),默認(rèn)用戶為非 root,因此在 Ubuntu 沒法正常運行。
解決問題
經(jīng)過以上分析,問題已經(jīng)得到解決,我傳遞的參數(shù) --command /bin/zsh 已經(jīng)起作用了,以下命令是完整的命令行:
yarn start --port=8080 --base / --command /bin/zsh
如下圖所示,我將 process.getuid() === 0 這行代碼去掉后,WeTTY 運行一切正常:
制作鏡像
和上期所介紹的一樣,我們也是在 TitanIDE 使用 TepmlateMaker 創(chuàng)建一個 WeTTY 的項目,用于制作 WeTTY for Ubuntu 的模板鏡像。
創(chuàng)建好 template-wetty 之后,先編輯 WeTTY 的啟動腳本以在 Dockerfile 備用:
然后編輯 Dockerfile 以實現(xiàn) WeTTY 在 Ubuntu 下面作為一個開發(fā)環(huán)境。這里使用了 TitanIDE 的基礎(chǔ)鏡像 template-core:v20230119-1cfbd2e,該基礎(chǔ)鏡像基于 Ubuntu 20.04,包含了開發(fā)者常用的工具,如 kubectl, helm,git 等 。以下是完整的 Dockerfile:
在 TitanIDE 的工作區(qū)直接執(zhí)行 make 命令構(gòu)建出 WeTTY 的模版鏡像:
驗證效果
然后使用 WeTTY 模板鏡像 titan.hub:5000/demo/template-wetty:v20230131-1b25d1b 創(chuàng)建 WeTTY 模版:
最后,使用 WeTTY 模版來創(chuàng)建 WeTTY 項目。驗證最終效果,如下圖所示。
在云端使用 Vim,真香!
href="/"
總結(jié)
在選用如 WeTTY 這樣的開源軟件過程中,和使用其他開源軟件一樣,并不是無償完全無償使用的,為了價值的最大化,這就需要像 TitanIDE 這樣的開發(fā)環(huán)境,在 TitanIDE 上面折騰的這些開源軟件有個好處就是,我不需要為了某個開源軟件去準(zhǔn)備開發(fā)環(huán)境,因為 TitanIDE 提供了我要的開發(fā)環(huán)境模板,開箱即用。在這個基礎(chǔ)之上,我們又可以創(chuàng)建屬于自己的模版,本文展示了如何在 TitanIDE 快速解決開源軟件的問題,然后定制一個 WeTTY 云端 Terminal 作為開發(fā)環(huán)境的完整過程,希望能幫到有需要的開發(fā)者。
本文是系列文章《在 TitanIDE 玩轉(zhuǎn)云原生 Terminal 系列》,我將會在下一篇繼續(xù)就這個話題展開探索,敬請期待!
最后,感謝閱讀!