前言
是的,继重装系统后,我对我的天选5pro又越来越看不顺眼了。出于续航和便携的考虑,我决定将主力机换为MacBook Air。
可我隐约听见天选姬不甘吃灰的呐喊——所以,为什么不搞一个宿舍服务器呢?所以,我踏上了折腾之路。
以下是一个系统、运维、网络等各方面小白,服务器 & 运维首次实践的纪实。同时,我也会记录少量的技术细节(至于详细的内容,需要询问LLM & 参考网络上更完善的教程。就我而言,我的大部分问题都是LLM帮助解决的),力求清晰易懂、准确无误,希望帮助到一些初学者快速理解某些概念。
实践纪实
空间安排
为了省空间,我买了一个立式支架把笔记本立起来,笔记本盒盖(实际上是轻微开盖),线缆放在电脑后。
关于散热,本来我想把上总成拆掉干成无头骑士的。后来经过调研,发现C面没有出风口的情况下,烧屏风险很小,于是就没拆。
关于噪音,通过进BIOS或者使用命令行调整风扇曲线即可,这里我还没有实践。

系统
首先是win和Linux的选择,出于能耗、管理、学习等角度的考虑,果断选择Linux。至于发行版,最开始选择的是ubuntu,但是频繁崩溃(具体而言就是文件系统&终端都打不开),最后选择了Pop!_OS(Pop!_OS是一个基于ubuntu的发行版,对比ubuntu做了些开发、显卡、深度学习等方面的优化)。不过到最后还是没搞懂频繁崩溃的原因。按理说popos也得崩溃,但就是没有,后来也懒得管了。只能说,真是玄学……
关于系统安装,和win重装类似:准备一个8GB以上的U盘,提前下载好系统镜像,使用Rufus制作启动盘,在BIOS中设置好启动顺序,重启按照系统引导完成安装即可。注意要提前给系统分配足够的空间(我分了300G过去)。
禁用休眠
通过sudo nano /etc/systemd/logind.conf编辑电源配置参数,然后通过sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target禁用休眠相关的target,即可禁用休眠。此时,由于电脑是盒盖的,系统检测不到显示器(DISPLAY),就不会运行图形会话(桌面)。但是电脑没有休眠,所有进程和服务仍在运行(就像在“黑箱”里跑)。这时候,这台电脑其实就已经符合我们对服务器的认知了。
如果我想用桌面,我会连上显示器来用:我的HDMI线上接了个拓展坞(其实是mac没有HDMI口…),键盘接收器也插在拓展坞上,鼠标接收器直接插在天选上(mac端用蓝牙连接鼠标)。这样,我只需要把线拉过去插在天选的c口上,按一下鼠标切换设备的按钮,就能用同一套键鼠操控了(就不需要用笔记本的键盘和屏幕了,笔记本一直立在那里就行)。

中途遇到过一次系统疯狂写日志的的情况(硬盘写入干到20M,CPU温度干到80多度),实在是太离谱了……进logind.conf一看不知道是谁给我改了某个变量,导致两个变量疯狂打架(后续回想一下应该是我进桌面搞了一些休眠相关的设置,又回退了。但是会退后logind.conf里的变量并没妥善处理)。只能说,抽象。

SSH & VNC & 网络 & 服务器监控与管理
如何命令服务器?答案就是SSH(Secure Shell)。可以简单理解为在本机运行服务器的终端。通过ssh 用户名@服务器地址建立连接,默认是22端口。也可以通过ssh -p 端口号 用户名@服务器地址指定端口,然后输入密码(包括sudo,输密码的时候是不显示任何信息,可能会让人以为没输进去,但其实不是)。这样就能够用命令行在服务器上进行操作了!
VNC(Virtual Network Computing),就是本机运行服务器的图形界面。但实测下来时延很高。如果有什么GUI的需求,还是直接连显示器吧。当然可以只开应用窗口,具体可以参考 Ovideros 学长写的这篇文章。
由于校园网的神秘机制(定时踢人下线),这里选用BitSrunGo,直接在release中下载编译好的版本,解压运行即可。感谢伟大的开源精神!
关于魔法,我用的是 克莱士 派对 (克莱士系列),由于用命令行配置克莱士过于麻烦,直接用 克莱士 派对 的GUI,打开TUN(不是系统代理or全局模式)即可,这样SSH也能用代理流量了。具体原理是:系统代理只是给本机开了个代理端口,浏览器、部分 GUI 程序会读“系统代理”设置,去连这个端口,就可以使用魔法。但是SSH(包括本地终端)默认不知道有这个代理。而TUN通过在内核里创建一个虚拟网卡,让所有流量先走 克莱士,克莱士 判断是否走代理,更底层,所以也能跨会话使用。
关于服务器的管理,我用的是termius,保存服务器信息后可以一键建立 SSH / SFTP(传文件)连接。至于 tabby 还没试过。

关于服务器的监控,我用的是servercat,上文提到的异常写入就是用它发现的。我用trae也写了一个Linux控制台,可以监控服务器状态,包括硬件信息、进程信息等。

服务
首先捋一下用户、会话、终端、进程、服务都是什么。
一台机器上有多个用户,不同用户有不同权限(比如sudo权限)。当用户登录进来,系统给 TA 开一个会话(物理会话 or SSH 远程会话)。会话里挂着一个终端,终端里跑一个 shell 进程。终端/会话关闭,相关的进程也随之关闭。可以通过nohup/tmux/screen等工具( nohup 的原理是忽略挂起信号(SIGNUP), tmux / screen 的原理是虚拟终端),让程序在终端/会话关闭后还能跑。
也可以通过systemd启动服务:systemd拉起来的进程不属于某个会话,也不会因为你关 SSH / 退出桌面而被杀。具体而言,通过配置.service文件,让系统识别这个服务(sudo systemctl daemon-reload,其中systemctl是与系统说话的方式),启动/查看状态/设置开机自启,就可以上架一个服务了。更深入的,是关于systemd的内容,这里先略过。
1 | # 启动 / 停止 / 重启 / 状态 |
我将上文提到的BitSrunGo设置成开机自启的服务。同时,我也上了一个alist服务(有关此服务的具体信息请在BIT分享进步小组中查阅)。在 termius 中用sudo systemctl status myapp查看状态如下:


尾声
写这个的时候深感自己对相关概念理解的不到位,还望各位dalao指正!
前前后后折腾了一周,回过头看其实也没多少东西,可能对于熟练的人来说一上午就能搞定这些东西。不过,对于一个以前从来没接触过 Linux 的小白来说,还是收获满满的。
其实 VNC 是重装完系统后就在搞的,当时想着主要通过 VNC 来配置。但随着折腾到后期,感觉越来越能适应命令行,越来越能理解命令行了——有命令行就能操控一切,反而不想用GUI了,可能这就是这次最大的收获吧😋
感谢 yht、cjj 的耐心解答(不是我不想用网名,是这俩同学都是实名上网hhh)!感谢各大群聊(数了数我得在5个群问过相关问题)的耐心解答!感谢伟大的开源精神!
附桌搭如下:
