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