远程开发(瘦客户端开发)指北
Contents
为什么需要远程开发
首先需要明确,本篇文章说的远程开发,不是指“远程开发工作”,而是指“远程开发环境”,在网上通常也叫瘦客户端(机)开发。
是指开发环境不在本地,而是在一台远程服务器上。而这一台服务器可以是在云上,公司,家里,任何地方。 而本地机器,只充当一个编辑器或者终端,能够连接到远程服务器即可。
这样做有一些好处,例如:
- 通常这台服务器具有较高的性能,这样可以让开发者在开发过程中不受本地硬件性能的限制。
- 减少对环境的折腾。服务器的环境可以配置得更接近生产环境,减少一些不必要的问题。
- 更加稳定:本机总免不了要关机、重启,很多时候需要重新启动各种服务。而远程服务器则可以一直运行,时刻等着开发者灵感来袭,专注工作,一定程度上提高了开发效率。
- 随时随地都能开发,只要有网络,就能进行开发工作。甚至很多编码工作能通过浏览器进行。
- 本地机器无需运行如数据库、服务器,无需编译代码,可以减少资源占用。所以不用追求较高的性能(想想苹果的黄金内存和硬盘!),发热、续航 和 噪音等方面也能获得较好的表现,从而提升体验。
本文试图总结我在远程开发中的一些经验,希望能帮助到有需要的人。
编辑器(几乎)唯一的选择:vscode
vscode + 远程开发插件,体验十分之好,很多人也正是因为远程开发功能而选择了 vscode。通过ssh直接连接到服务器,和在本地开发可以说是没有什么区别,而且还有端口转发等实用功能,可谓有口皆碑。这方面教程已经非常多了,随便搜索就能找到,就不细说了。
为什么是几乎唯一的选择呢,因为 Jetbrains 家的远程功能太拉跨了(仅限于2024年6月)。 Jetbrains 家远程功能,可以分为2种,传统的是叫做 Deployment 功能,就是编辑都在本地,然后配置好远程服务器对应的目录,代码有变动就自动上传服务器。 所有操作都是在本地,算是半远程开发吧,也能用。
Jetbrains 另一种远程开发模式叫 Gateway, 是真正远程了,对标的也是 vscode + 远程插件。 但是较重,本地需要运行一个 Client 端,服务器也需要运行 server,Jetbrains 的产品什么量级大家都知道,毕竟是 IDE,本身就比 VScode 重多了。 、 但是完成度远远不及 vscode ,只能说是能用/及格,真正用来正经干活还是不推荐,各种小bug 非常干扰思路,影响专注度。 Gateway 的版本号也一直是 beta,至少 beta 一两年了吧, 每次发布更新就能看到修复一堆的bug列表,很难说 beta 到何时。 很多人就是因为远程开发功能,而从 Jetbrains 转而使用 vscode 了。
至于说其他选择,例如直接登陆服务器: tmux + vim / emacs ,也不是不行,对大多数人来说还是有点硬核了。 所以说 vscode 几乎是唯一选择了。
如何选择服务器
服务器选择可以分为几类:
- 本地服务器
- 国外服务器
- 国内服务器
- 开发环境服务,如:Github Codespace / Gitpod 这类提供了 vm ,按时长计费的
它们各有优缺点,以此来说一下:
本地环境:
优点: 大碗便宜,速度快,在局域网时 延时可以忽略不计。 缺点: - 需要内网穿透 或者 异地组网。因为总有时候服务器和本机不在同一局网内。 - 需要科学上网,当然这个本机开发也需要,给服务器代理对一些人来说麻烦一些
云服务器
优点,不用内网穿透 缺点:
- 贵。这一点可以通过:按需付费来优化,一些云服务商或许支持按秒计费,关机时只收取硬盘费用,能够降低成本。
- 如果是国内服务器,同样需要科学上网
- 如果是国外的服务器,速度就会慢,体验会有所下降
Github Codespaces 为代表的开发环境服务
优点,不用自己搭建服务器,进一步无需关注环境。而且可以将运行环境通过配置文件的方式指定好,可以非常方便的启动项目。 特别是和仓库绑定,很利于多人协作,配置好后,只需在浏览器上操作,环境就出来了,很方便调试或者尝鲜一些开源项目。 缺点:
- 还是网络慢一些
- 贵。 以 4c16g 为例,一个月用160小时,大约 57刀,和云服务器相比没有价格优势。
内网穿透 和 异地组网
推荐三个好用的工具:
- frp, 公认的内网穿透神器。 缺点是需要一台云服务器做中转, 需要一定成本。
- cloudflare tunnel 。可以把本地服务开放出去,这样在公网上直接就能访问到。 另外还可以代理 ssh 协议,在浏览器里直接能操作主机,十分方便。
- tailscale 异地组网工具,通过 NAT 穿透,可以让不同局域网的机器组成一个虚拟局域网,可以直接访问对方的服务。 但是效果并不一定很好,自建中继服务器的话,速度会快一些。
断电重启
如果是本地服务器,则可能会面临断电问题,虽然概率很小。可以在 bios 中设置来电自动启动,减少宕机的风险。 另外还可以结合智能插座,设置定时开关机,减少功耗。也可以在卡死时,通过智能插座断电重启。
我们真的需要远程开发吗?
之所以有这一节,是因我从远程开发转为本地开发了。 远程开发有很多好处,也引入一些问题。 对我个人来说,总是没有本地开发这么便利。
最近两年多,我都在远程工作(为了和本文区分开,这里指:Work from home),我是买了一台 mini 主机作为服务器放在家里。 而有段时间我不时外出工作,例如回老家、去图书馆、咖啡厅。 想到代码运行在另一台服务器上的,不在同一个局域网内,特别是网络有时候并不很好,想到可能的中断的情况,总是会有一些分心,需要额外做一些维护或者保障。
而更重要的是,Orbstack 的出现,让docker的体验提升了非常多,让我羸弱的 MacBook Air m1 16G 也能将将运行起10+的 docker 容器,还算流畅的开发。
之前在 v2ex 上看到有人评价远程开发,说是:线上没输过,线下没见过。
我想也许远程开发并不适用于每一个人的场景,我知道对很多人离不开远程开发,但现阶段对我来说本地开发是更舒适的选择。 或许正是苹果把内存和硬盘卖出了黄金价格,一定程度上助力了远程开发的兴起吧。
一些有用的链接:
Author JeelyWu
LastMod 2024-06-07