9.1 KiB
category, tag
category | tag | |||
---|---|---|---|---|
灵机一动 |
|
自组服务:让老机器“物尽其用”
这问题最初还真是为了分担《原神》这种重负载。毕竟 2.8 版本的海岛成功把我的轻薄本干烧了。虽然轻薄本拿去直播《原神》讲真也挺抽象的。 然后次年下旬,我折腾 Hyper-V 时发现它似乎是通过远程提供的虚拟机界面,于是便走上了“自组服务”的不归路。
说白了,“把重负载分摊出去”的做法,某种意义上也顺应如今的各种“云”服务——把重活脏活甩给有能力负担的机器(对于绝大多数用户而言当然就是企业的云服务器),并提供轻量的终端接口给用户。何尝不是一种 C/S 模式呢?
话虽如此,自组服务也并非是自己买台服务器——那功耗和噪音注定不是家庭可承受的。所以让老机器“物尽其用”,也就成了我的首选。
Important
- 量力而行。这里的“力”指老机器的配置、性能。你毕竟不能强求赛扬 CPU 去跑《原神》PC 客户端。
- 下面无论何种部署方式,均要求在能够建立远程连接之前,首先有块屏幕。
- 本文只提供大概流程(或者说思路),恕不详述具体操作流程。信息检索能力很重要喔,哪怕是问 AI 呢?
前置准备
首先,需要固定机器在内网的 IP。你可以在路由器或是在 Windows 的控制面板或者设置里操作。具体的教程还请百度,恕不展开。
::: details Linux 如何固定
必应了一下,有介绍/etc/sysconfig/network-scripts
的,有介绍最新版 Ubuntu 使用的netplan
工具的,五花八门。
Arch Linux 安装时可以用systemd-networkd
配置。
首先ip link
(有的教程用ip a
)查看网络设备号,然后编辑/etc/systemd/network/网络设备号.network
,之后重启systemd-networkd
服务。
:::
然后有条件的话可以尝试异地互联,比如出门可以用手机连回家里的老主机,用 Emby 看电影之类的。家里有公网 IP 最好,但建议认真配置防火墙;没有公网的也可以尝试 Zerotier 等工具组虚拟内网。
:::: details 配置 Zerotier One
首先当然得有那么个内网。在 Zerotier 上注册/登录账号(可能比较卡,毕竟国外平台),Create A Network
创建虚拟内网。免费版(截至目前)至多允许同一网络 25 个设备,但对于我来说足够了。
接下来图省事的朋友点进新建的网络,记一下Network ID
就可以直接安装 Zerotier 客户端了。
Windows 有挂在任务栏里的 GUI 客户端,右键图标直接Join Network
,粘贴刚刚的Network ID
回车,进账号里同意加入、给它分配固定 IP 即可;
Linux 可以通过 Docker、官网提供的命令行、部分包管理器等方式安装 Zerotier One。
::: details 或者,进一步配置虚拟内网 主要关注以下项:
Basics
网络基础设置
然后在设备加入虚拟内网之后,可以在Members
里找到这个设备,手工给它分配个静态 IP。
:::
安装之后记得确认一下 Zerotier 服务是否开启,Docker 容器还请额外注意端口映射。
sudo systemctl status zerotier-one.service
如systemctl
显示该服务disabled
、inactive (dead)
,说明没有启动,启用并立即启动它:
sudo systemctl enable --now zerotier-one.service
于是就可以使用 Zerotier CLI 了。我的场景比较简单,不考虑自建 moon 的情况下直接sudo zerotier-cli join Network_ID
,然后也是在账号上给它放行、分配固定 IP 就可以了。
::::
Windows——远程、串流、文件共享
Windows 想必大家都很熟。但既然把老主机当作“服务”来看待,便没有必要守在它旁边操作。也就是说,我们可以通过远程、串流等方式连上这台电脑,就好像云原神一样:游戏是在电脑上跑的,玩家是在手机上玩的。
Windows 开启 RDP 远程可以通过“高级系统设置”的“远程”选项卡(Win7、8.1 可在控制面板—系统信息页跳转)、设置—系统—远程桌面(Win10、11)启用。
而如需像云原神般串流,则需要 Sunshine(被控服务端)和 Moonlight(控制终端)两个软件。当然也有别的串流方案,但 Moonlight 我折腾成了。 由于间隔比较久远,相关的教程可以去 B 站搜索“自制云原神”词条,或者搜“阿西西”这个 UP 主,我也就不多展开了。
至于文件共享,最简单的方式是 Samba,也就是右键文件(夹)属性里的“共享”选项卡。记得遵照指引去“网络和共享中心”先“启用文件和打印机共享”喵。
可部署的服务
我个人倒是有过这些实践:
- 开着 BiliBili 直播姬做推流机,从内网接收 OBS 流,并推上 B 站;
- 挂着各种网盘(尤其百度网盘)下载;
- RDP 玩剑三(Moonlight 实测会屏蔽键盘输入)、串流玩崩原铁;
- 远程过去 P 图,开 After Effect 2018 做视频;
- ……
总的来说,你平时怎么用那台牢机器的?那就怎么对待它就是了。3 代 i3?老老实实办公、文件共享,玩些老游戏差不多就得了。10 代 i5?那可以试试串流玩点新游戏,After Effects 2020 做点视频特效,之类的。要是还有 AMD/NVIDIA 显卡,嚯,那甚至可以试试大模型。
还是那句话,有什么样的性能办什么样的事,不要学我一下子把负载全都倒到老 ASUS 上,VSCode Remote+WSL+网易云+百度云+……,一下子给 7 代 i5、4GB 物理内存、32GB 虚拟内存(甚至才吃了 14GB)整不会了。
常驻开机
作为自组服务器,肯定不兴像平日的 Windows 那般被自动更新、启动修复等扰得无法远程。
自动更新可以在组策略gpedit.msc
—计算机配置—管理模板—Windows 组件—Windows 更新—配置自动更新一项中配置“已禁用”;若需禁止进 WinRE 启动修复,可以考虑以下两行批处理:
bcdedit /set {default} bootstatuspolicy ignoreallfailures
bcdedit /set {current} recoveryenabled No
当然我已经换用 Ubuntu Server 了,这两行有没有用我也没有底(
Linux——开发、常驻服务、文件存取
不得不说,Linux 能作为日用的服务确实不多(特别是无图形界面的服务器端),绝大多数部署起来可能还并不轻松。但部署好了之后是真好用啊(
那么既然不需要日用,为了节省图形资源,干脆就把老主机当作服务器,装个无图形界面的 Linux 吧。可以百度“Ubuntu Server 家庭云服务器”,有不少教程。
Linux 的主要远程手段是 SSH。在此之前需要安装openssh
,并启用(和启动)sshd
服务。
控制端则可以装一些便捷的工具去维护 SSH 连接,比如 Xshell 和 Xftp。
可部署的服务
- 代理服务器(不光是服务器本机,在内网范围内其他电脑都可以过这台机的代理)
为什么是代理优先呢?因为像
docker
、npm
等很多服务都需要代理。这或许也是一种“分层结构”吧。
-
docker
容器服务(这种就基本上是服务器在跑,也是作为下层服务去提供别的服务) -
aria2
下载服务(BT/PT,乃至直链1 ),配合ariaNg
等 WebUI
-
emby
jellyfin
影音服务(但总的来说和国内的手机 APP 一样,资源管理比较单一,莫得音、视、图同时管理,可能大多数人对这些资源分类比较门清吧) -
跨平台前、后端开发(
nodejs
python
...,搭配 VSCode Remote-SSH) -
文件存取服务(Xftp)
-
其他定时服务、脚本……
后记
通篇看下来,我的服务场景也挺简单的,不是吗?说实话……我并不熟悉寄网(哪怕为了跨考自学过 408),平时也没有太多 Web 编程的实践和需求。能简单搭这么一个自用的服务便已经方便我不少了。若是真正的大佬,或许还会利用反代、软路由等种种轮子实现更加 NB 的东西吧。
不过反正我这人也没什么水平,笔记也不过抛砖引玉。菜逼有菜逼的天马行空,简单点写,懂的都懂。
-
有些浏览器下载比较慢的,借助
aria2
和代理或许能明显改善速度。!!比如已似的 Pandownload。!! ↩︎