远程开发、远程游戏
〇、动机和背景
许多朋友们知道,特菈在学校里面有两台主要使用的电脑:一台是主力开发使用的 机械革命游戏本 放在办公室一直开着,还有一个 ThinkPad 轻薄本 用于外出和宿舍里使用。另外,我还能访问若干局域网内的测试用服务器,并且拥有若干公网服务器。
在上学期的某个时候,我把我的游戏本搬运到了某个办公室里面,之后那台电脑便 7*24h 开着(事实上在宿舍也差不多一直开着)
两台电脑都被重度使用,在两台设备之间同步工作进度就是一个很有意思的话题
一、远程办公经验、朴素的代码同步方法
1.1 老远控的修养
早在高中的时候,我就使用 Teamviewer
,在公用电脑远程控制家里的电脑 写论文和剪视频。对于简单的打文档、做 PPT 等等办公情况,Teamviewer
其实非常够用。如果网络条件好的话,延迟非常低,体验甚至和在本地电脑使用没有太大区别。
如果不是在公用电脑上工作,文档和 ppt 的同步有大量非常完善的方案。例如我和朋友们拼车上了 Office 365,我们就可以把东西存进 OneDrive 上同步,然后在自己任意一台机器上打开继续敲文档。除了微软,国内的各种在线文档也提供不同程度的同步服务(即使我不喜欢用,我的许多朋友们也用着也十分开心)
我从去年开始写代码,本来应该是可以也用远控软件,或者用 OneDrive 那样的同步盘。但是很多经验不再适用:
前端那堆
node_modules
不应当被同步,而一大堆零散的、经常被修改的小文件代码并不适合和文档那样处理日常我需要开几个屏幕,用来查文档和调试效果。如果写代码的窗口在一个全屏远控软件里,还是有很大割裂感
对于轻薄本来说,远控很耗电,毕竟算是联网播放着一个码率不低的直播。
我们知道,对于大量零散的,需要追踪修改的代码来说,使用 git
来控制版本、在不同设备间进行同步,是非常好的实践。我自建了一个 gitlab 站点, 用来托管一堆私有仓库,其实就是当成代码的 OneDrive 同步盘。
1.2 朴素的代码同步方法
因此,在我拥有这么多设备和事情的第一年,我的做法是:
在每台设备上配置好编辑器和开发环境,每次离开某个设备的时候,进行一次 commit 并且 push 到自建 git 的私有仓库,然后在另外一台电脑上 pull 一下,代码就同步了。
在初期、在那个我还是一个学徒、只是在写作业做玩具的时代,这样的方法并没有什么问题。每次 commit 的 message 我都会写 sync temp changes
,反正也没人看,一般这样的提交记录就只是为了同步代码。
但是时间又过了半年,我开始参与团队协作的、工程化的实际项目开发。如果 git 还只是被当成代码同步器使用的话,会产生很多问题。
用来同步代码的提交往往是不符合提交规范的。甚至,我们没做完东西就提交,会给别人带来问题。
我们的仓库有固定部署到生产环境的 CI。过多的提交会触发不必要的 CI,而且经常因为我们没做完,提交过后 CI 跑完,生产总有各种问题
没做完东西的提交很难通过代码质量审查。
解决方法也简单,不用 git 同步代码那就是了,我们回归远控的办法。但是对于写代码来说,有类似于 OneDrive 那样,你写的东西自动保存到云或者某个设备的魔法吗?
自然是有的,而且非常完善,比远控软件好用一万倍。
二、远程开发的 SaaS
许多公司当然为了远程开发做了许多 SaaS 的服务,很多甚至都不需要你有其他主机或者服务器,往往是只要一个浏览器,或者是他们家的 IDE 就可以了。
来说明一下这是怎么回事:我们把 IDE 做进了浏览器里面,我们只需要在任意一处地方,在网页上登录账号,就可以打开在线的 IDE,在线进行调试。如果你和我一样是 Web 开发者,一般这些服务都会带有聪明的端口转发。
*当然,你需要科学上网
2.1 Github Codespaces
https://github.com/features/codespaces
很遗憾,这个东西并没有向所有人公测。哪怕我拥有 Github Pro,我也不能直接用这玩意儿。
强依赖 Github。
2.2 Gitpod
需要打开你的 Github 仓库,甚至可以自选在线的 IDE。这玩意儿每个月只有 50h 的免费额度,如果我开发全用这玩意儿的话,我一周就可以把额度用完。在认证过 Github 学生账号之后,可以免费升级到 100h/m 的免费额度。对于在外开发来说应该是够用了。
目前特菈对于一些小项目已经放在 gitpod 上面写了。如果有一个好的梯子,延迟不算太难受
它除了 SaaS 模式之外也可以自托管,我暂时没有折腾。
2.3 CodeSandbox
前端同学应当对这个相当熟悉。它被大量用来演示 demo、复现 bug,当然它也可以作为远程开发的平台。
它对于 public repo 是免费的,对于 private repo 收费
2.4 Others
还有大量 在线 IDE,但是许多并不一定可以开发,有的只是在线文本编辑器而不能调试。
https://theia-ide.org/#features 似乎只能自托管
https://www.eclipse.org/che/?ref=stackshare 也是只能自托管
三、实际的远程开发
上述 SaaS 实际上还是依赖于 commits,或者一个 git 仓库
让我们考虑你有一台服务器或者一台一直开着的机器作为开发服务器。
你并不需要控制画面。理论上,编辑器这部分可以交给客户端,因为就是个编辑器(说的就是 VSCode),它不管你写什么东西,状态都不太改变。
其实你只需要能够操作远程机器的终端(如果你不写传统的客户端程序),因为大部分的开发和调试都可以在终端里面完成。另外,我要可以更方便地操作文件。
对应这两个需求,只需要配置好 ssh
和 sftp
服务端,你就可以用 VSCode 或者别的 IDE 进行远程开发。
现代的 IDE 或者编辑器,如 VSCode 和 jetbrains 的全家桶,都非常支持用 ssh 远程到另外一台机器开发。
3.1 组网
首先,你需要确保你的所有机器都在同一个局域网下面。当然,这个局域网可以是虚拟局域网。
例如我这种情况,几台机器天然就在同一个学校内网里面。由于机器的 IP 一直会改变,我还是使用 Zerotier 进行了一次穿透(穿透个寂寞)
如果你的机器不在同一个局域网下,你应当先尝试一下用 Zerotier, 等工具进行穿透。如果延迟能控制得比较理想(最好最好 50ms 以内),那远程开发会比较丝滑
3.2 配置 ssh 和 sftp
3.2.1 服务端 - 使用 Linux
一般不需要额外的操作。大部分情况下,服务器都自带 sshd 服务器。你只需要自己配置好 sftp 和 ssh 的公钥私钥登录。
由于 Linux 上配置 ssh 服务端、公钥登录 的教程非常非常多,特菈不再此处赘述。你也可以去啃官方文档,此处列出 Ubuntu 的
3.2.2 服务端 - 使用 Windows
高版本的 Windows 10 / 11 不仅自带了一个 OpenSSH Client,它还自带了一个 OpenSSH Server。也就是说,高版本 Windows 可以作为 ssh 、sftp 服务器被控制和远程开发。
微软对于 Windows 上的 OpenSSH 提供了极为详尽的文档,在 这里。
3.2.3 服务端 - 使用 Mac OS 作为服务端
你可以参考苹果的官方文档,它会打开 ssh 服务器。
之后,你应该参考这篇文章,它会指导你如何配置公钥私钥登录
3.3 客户端 - VSCode 和 Remote 插件
首先我们应当测试一下客户端能够正常用 ssh 控制服务端,也应该测试一下 sftp 的情况。