个人站长服务器迁移实战:从 Windows 转到 Linux,AI 帮我全搞定
三年前在阿里云续费三年的服务器又要到期了,面临续费的问题。这台服务器的配置是两核4G内存,硬盘容量80G,安装的操作系统是 Windows Server 2012,这台服务器运行着我在国内备案的网站(月光博客等网站)。除了这台服务器之外,我还在美国购买了一台一核512兆内存,10G硬盘的小服务器,上面装的是 CentOS 7.8 和宝塔面板 7.7,这个服务器运行着我在国外的网站以及一些第三方客户的网站。
由于国内网站备案必须要国内的服务器,因此购买服务器还是必要的。问题是继续用这个 Windows 服务器,还是换一个其他的系统。
反复权衡之后,我不打算继续续费目前这台 Windows 服务器,准备直接新购一台更低配置的 Linux 服务器。做出这个决定,很大一部分原因来自于之前在美国那台服务器上遇到的一件怪事。
一次奇怪的网站事件
我之前就遇到过这样一个问题:我的美国服务器经常出现一个奇怪的现象,就是 CPU 经常跑满 100%,资源消耗极大。我原先在服务器上安装的服务很多,有 PHP、MySQL 等等。由于我对Linux不熟悉,可以算是一窍不通,很多基础命令都不会,纯属于业余折腾服务器的普通管理员,靠自己排查根本无从下手,因此一直找不到解决方法,我一直以为是我购买的配置太低,或者是上面的网站被其他人攻击。于是我在 Cloudflare 防火墙上做了很多防护措施,但是收益并不是特别明显,问题还是没有很好地解决。
后来AI发展起来之后,我开始尝试通过AI来管理服务器。也就是使用本地AI软件+SSH MCP的方式,给 AI 赋予管理员权限,通过 SSH 远程连服务器,进行数据分析和错误排查。
首次排查过程的时候,AI登录进入我的服务器,几分钟时间吭哧吭哧跑了几十个脚本,然后得出结论,认为我的512M内存跑了宝塔+PHP+MySQL等等,内存几乎已经完全耗尽,要我优化 PHP/MySQL 的内存。并建议修复一个 cxAgent 第三方代理持续运行的问题。
这个美国的服务器主要运行的第三方客户的网站,网站用 WordPress 系统搭建,所以用到了 PHP 和 MySQL。经过了一番决策,我通过 AI 将这个 WordPress 网站转化为 Hugo 网站,整个界面几乎没有任何变化,变成了完全静态的网站,整个过程非常顺利,只用了一天就完成了,这样我就可以卸载删除卸载网站上的PHP和MYSQL了。
然而,我把 PHP 和 MySQL 都卸载了之后,发现 CPU 还是经常每分钟跑满 100%,这让我感到非常奇怪。于是我就给 AI 管理员权限,让它通过 SSH 登录服务器去查询一下原因。
AI 很快就找到了原因:它通过采样 90 秒内系统的运行情况,发现服务商每一分钟之内定时跑了一个程序,这个程序的进程名叫 cxAgent,会执行一条命令 rpm -qa | grep dmidecode(枚举全部已装包再查 dmidecode 是否存在),其目的是确认能不能用 dmidecode 去读这台机器的硬件身份信息(UUID / 是 KVM 虚拟化 / 序列号),这个命令写得很烂 —— 明明用 rpm -q dmidecode 一条快命令就能查,它却用 rpm -qa | grep 遍历整个数据库,还一次并行 3 个、每分钟来一遍,把单核 CPU 顶满约 3 秒。这个命令的唯一可见的作用就是毫无用处地消耗 CPU。
我让 AI 把服务商的cxAgent这个玩意儿停了之后,CPU 立刻恢复了正常。
我用AI查询,cxAgent 是服务商(cloudx/16clouds)预装的商业管理代理,包的厂商字段直接写着 cloudx,软件包名 cxagent-2.0.7-5.src.rpm 是官方发行物,16clouds(IT7 体系品牌)使用 CloudX 管理平台(cxAgent 就是这个平台装在系统里的代理),因此可以确认就是服务商提供的,每次用控制面板 "Install new OS" 安装系统,安装 centos-7-x86_64-bbr 这个镜像就会存在,紧跟系统部署,是主机镜像自带的托管代理。
这件事给我的感触很深。我并不熟悉 Linux,也不会使用 Linux 操作系统的各个命令,算是一个业余的 Linux 管理员,但是依靠 AI 配合 SSH 登录,照样解决了棘手的服务器故障。对比下来,就算我用得更熟 Windows Server,却没法通过AI来管理,什么事情都要我自己来操作,而且我对于Windows Server也不是特别的精通,这么看下来,反而使用Linux服务器进行管理更为省心一些。
为什么我决定放弃 Windows Server,转向 Linux
有了在Linux上使用AI管理服务器的成功经验,我就在考虑能不能在Windows Server上也实现AI管理,糟糕的是,我目前使用的Windows Server 2012还不能 SSH 远程登录让 AI 进行管理。尽管Windows Server 2019 及以上原生自带 OpenSSH Server,AI Agent / MCP 这类工具可以走 SSH 接入,但我估计通过 SSH 管理 Windows 还是并不会很成熟,不如 Linux 管理得更成熟可靠。
我从 Windows Server 转到 Linux 的另一个原因就是成本问题,Linux 的成本明显是低于 Windows 的。我购买的 Windows 整个操作系统就占了 20G 空间,而 Linux 只占 2G 空间。我几乎要花双倍的硬盘资源、双倍的内存资源,才能完成和 Linux 完全相同的工作,消耗实在太大。
综合种种因素,我计划在旧服务器到期的节点,直接完成服务器迁移,放弃 Windows 平台。新的服务器操作系统我选了 Debian 13,这套系统稳定性好,资源占用也很低。硬件方面,2核2G的40G空间就足够了,相比之前的 Windows Server,几乎只用了一半的资源量。
我打算花一周时间把我的网站服务器从 Windows Server 迁移到 Linux。原先服务器上的网站代码也需要重新开发,我争取在一周时间内能够成功切换。如果成功的话,我的服务器购买费用能省一半的价格。
历史的包袱:Z-blog
我之所以这么多年一直守着 Windows Server,说穿了就是懒得改动老网站代码。最早我的站点用的是 zblog,这套程序基于 ASP 开发,只能跑在 Windows Server 环境下。后续我又在它的基础上做了不少定制开发,时间越久,迁移到其他系统就变得很难,想到改代码就觉得麻烦,也懒得换了,索性就一直将就用下去。
现在 AI 出来了之后,我发现将原有程序迁移到新系统并不是一件很难的事情,工作可以交给 AI 去做。于是我经过一番调研,选中了 Hugo 这个静态网站系统。Hugo 的总体功能非常不错,可以完成我原先 zblog 系统的绝大多数工作。之前美国服务器上的那个 WordPress 网站,AI 只用了一天时间就将其转化为Hugo,网站界面几乎一模一样,看不出任何区别。
虽然我用 zblog 的这个网站远比美国托管的那个WordPress网站要庞大得多,但我相信用AI进行修改的话也不会花费太多的时间,我把这种网站切换工作交给了 AI,让它在一周时间内把我的 zblog 网站迁移到 Hugo 上。
整个工作还算顺利,我用 Trae 来修改网站,将 zblog 转换为 Hugo,干了几个小时,消耗了 633 积分,成功把 Trae 一个月免费的 500 积分消耗完了。
但是网站的大体框架已经搭建出来了,后面再需要一些调整就可以上线了。
其实代码调试用 AI 做还是比较简单的,比较麻烦的是我要把数据库的信息转换成 Markdown 格式,里面的数据兼容性问题还是挺多的,很多特殊情况需要手工去操作,挺麻烦的。
除了内容转换,还有很多问题,比如旧的 URL 链接兼容性问题,如果地址不做好重定向工作,访问弹出 404 页面会影响搜索引擎的收录,这些工作我都交给AI去做吧。此外,新旧服务器希望能够并行一段时间,尽可能降低网站中断时间,并且看看功能是否能够完全切换。同时部署了一个新的 Debian 服务器之后,服务器的安全配置也要好好看看,不能再出现以前那种被服务商安装后台定时程序的事情了。
写在最后:给个人站长的一点经验
如果这次迁移顺利完成,收益是显而易见的。硬件资源消耗大幅下降,服务器费用减半。而且 Hugo 作为静态网站,没有数据库,不用担心数据库被攻击,抗并发能力更强,后续的运维压力也会减轻。同时,一个静态网站很好找到便宜的托管服务器。即使国内这台服务器出了问题,我能在很短的时间内在美国的服务器上重新部署一套新系统,系统切换变得非常简单了。
同时我也有一些顾虑,我本身对 Linux 不大熟悉,现在完全依靠AI来管理服务器,万一碰到 AI 解决不了的突发故障,还可能会出现问题。再说一个阴谋论的问题,要是AI在管理服务器的时候使点坏,在服务器上装个木马什么的,我估计也发现不了,未来服务器被控制了,我也不会知道。后续我还要抽空补一补相关的 Linux 操作系统的知识。
这次折腾,也算是给和我一样的个人站长一点小小的经验。
过去我被老旧的程序代码所绑架,害怕迁移的成本,就一直守在旧平台。现在 AI 降低了代码改造的难度,我们选型服务器的时候,就可以优先考虑成本、性能,而不是被多年前的旧程序死死困住。
整体工作目前只走到一半,后续还要慢慢打磨细节,期待可以顺利完成整套服务器的切换。