把家里的电脑用作远程服务器

- 1 min

背景

自从入职新公司以来,由于公司的项目比较消耗内存,单开一个 Web 服务跑起来就动辄几个 G,再加上各种队列、中间件轻轻松松吃掉大部分内存,所以笔记本跑起来比较烫手,开发体验非常糟糕。所以,笔者一直在研究怎样把项目放在云端,本地通过 ssh 连接到远程,达到本地良好的开发体验,又不影响项目的顺利运行。

我的目的是把项目在远程跑起来,同时又可以随时在有网的情况下就能在我的笔记本上连上,我研究了几种实现方式:

使用手机作为服务器

手机作为服务器的优点是:

  1. 携带方便,不需要背着一个电脑到处跑,无论是放进包里或者放进兜里都非常地方便;
  2. 连上网络也很方便,如果是跟笔记本在同一个局域网下,连接的问题很轻松就解决了;
  3. 能耗低,就算一天 24 小时手机连接着电源也用不了几度电,而且大部分手机的待机时间都可以撑一天,对于开发来说是绰绰有余了。

手机作为服务器,优点很明显,但是缺点也十分明显:

** 大部分手机的芯片架构都是 arrch,这种架构虽说也可以跑 linux,但是很多软件并不兼容,例如:mysql 得安装 mariadb 版本,而且大部分软件的旧版本并不兼容这种架构,这就导致搭建环境异常困难。**

在这个过程中,笔者尝试了 ubuntu-touchpostmarket oslineageos 这三种方案,前两种都是将手机变成 linux,第一个是 ubuntu,第二个是 alpine linux,第三个是在手机内安装 linux 终端 termux,结果都不太理想:虽然可以解决连接的问题,但是无法顺利地跑起项目来,只能作为一个 mysqlredis 服务来跑。

使用云服务器

趁着活动期间,笔者购买了一台较便宜的云服务器,装了个 ubuntu 20.04,项目顺利地跑起来了,通过 ssh 也顺利的连上服务器了,终于可以安安心心写代码了。开心不过半天却发现服务器及其容易死机,可能是项目较消耗内存,服务器本身配置比较低,再加上项目里面存在内存泄漏,所以很容易出现改了一行代码,重启服务的时候卡死了(内心相当崩溃)。

本着不折腾不舒服的原则,继续寻找下一个解决方案,终于在一次偶然的尝试中得到了最优解。

使用家里电脑作为服务器

说起来,家里的电脑是十年前买的,那时候还算是高端的配置,跑公司的项目性能上绰绰有余,作为开发机器来说那是再适合不过了,可是如何连上是一个问题,在局域网下是可以连,总不能到哪都扛着两台笔记本吧。正当以为又要无解的时候,刷到了一个微博,看到有个关于 zerotier 的微博,介绍了如何使用 zerotier 将远程的服务器与本地连接到同一个局域网内,正好解决掉了我的问题,于是马上尝试了一番,在家里的电脑以及我自己日常使用的电脑上安装了 zerotier,连接到同一个 network id,这样就将两台电脑连起来了,无论是在家还是在公司,只要有网连接的情况下就能连上。

不过还有一个问题,连上之后如果两台电脑不在一个局域网内延迟有点高,应该是因为 zerotier 的服务器在国外,zerotier 提供了两种解决方案:1. 自己架设服务器 2. 添加一台 moon 服务器作为中继分发。两种方案都需要一台有公网 ip 的机器,笔者选择了第二种,将购买的云服务器作为 moon 服务器,加入到同一个 network id 中,实现下来延迟基本控制在了 30 ms 以内,这个完全可以满足日常 ssh 连接的需求了。到这里,终于得到了一个相对完美的方案:家里的电脑可以不用吃灰了,手头的电脑开发体验也相当舒服!

笔者使用这个方案的日常场景是:通过 vscode ssh 远程连接到家里的电脑进行编码,所有的服务(mysql、redis、队列、web 后端进程、nginx)都是在家里的电脑上开的,然后再通过映射 host 的方式访问。体验下来跟本地开发没啥较大的区别,总的来说,还是值得尝试的!

circle

circle

Keep taking risks till you find your passion

rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora list2