云原生集成开发环境——TitanIDE
通过网页在任何地方更安全、更高效地编码2023-02-28
570
原文作者:行云创新技术总监 邓冰寒
概述
上一期在使用官方容器镜像快速成功地在 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,真香!
总结
在选用如 WeTTY 这样的开源软件过程中,和使用其他开源软件一样,并不是无偿完全无偿使用的,为了价值的最大化,这就需要像 TitanIDE 这样的开发环境,在 TitanIDE 上面折腾的这些开源软件有个好处就是,我不需要为了某个开源软件去准备开发环境,因为 TitanIDE 提供了我要的开发环境模板,开箱即用。在这个基础之上,我们又可以创建属于自己的模版,本文展示了如何在 TitanIDE 快速解决开源软件的问题,然后定制一个 WeTTY 云端 Terminal 作为开发环境的完整过程,希望能帮到有需要的开发者。
本文是系列文章《在 TitanIDE 玩转云原生 Terminal 系列》,我将会在下一篇继续就这个话题展开探索,敬请期待!
最后,感谢阅读!