我把跑了两年 WordPress 的机器重装了一遍,顺便把面板卸了

上周把一台跑了两年 WordPress 的 1C1G 机器重装了一遍。

装完系统,我照着五年来的习惯先上了宝塔。闭着眼都能点,装完打开面板,顺手敲了个 free -m。

vbnet 复制代码
              total        used        free      shared  buff/cache   available
Mem:            987         486          87           6         413         312
Swap:             0           0           0

available 312MB。

这台机器只干一件事。312MB 意味着 MySQL 稍微吃多一点就开始回收缓存,WordPress 后台点一下要转两秒圈。那天晚上我把它卸了。

先说清楚:这不是面板的问题,是我用错了工具。面板解决的是「我要在服务器上装一整套运行环境并且随时能改」,我这台机器五年来只装过一次环境,剩下 99% 的时间我在干别的事------改配置、看日志、传个主题包。为了 1% 的需求付 100% 的常驻开销,是我的账算错了。

面板的开销

很多人以为面板就是后台多跑个服务,关掉就好。实际不是。

我在这台机器上装完宝塔 + LNMP 之后,ps aux --sort=-%mem | head -20 大概长这样:

  • 面板自身的守护进程和它的定时采集,合计 40~60MB
  • 面板拉起来的 nginx(不是系统自带的那个 nginx,是面板自己管理的一份)
  • 面板管理的 php-fpm 进程池,进程数按面板的模板给的,1C1G 上它给的比我需要的多
  • 面板自己的计划任务轮询、日志切割、监控采集

加起来两百兆上下。在 1C1G 上,这两百兆就是「后台能秒开」和「后台转圈」的差别。

更麻烦的是它不是你装一个 nginx 就完了,它是一整套被它托管的运行环境。你想单独调 php-fpm 的 pm.max_children,改完还得让面板认;面板认不了,下次它重启就给你改回去。

让我下决心的三个点

第一是内存。上面已经说了。

第二是那个端口。面板要开一个 Web 端口,随机或者固定的 8888。开了就得在安全组放行,放行了就等着扫描器来。我这台机器的 auth.log 里,root 的暴力破解尝试一天几千次,面板登录页被扫的记录也在。你可以换端口、上 WAF、绑域名,但这些都是给一个「本来可以不存在」的东西加防护。

第三是升级链。面板升级 → 插件升级 → 运行环境升级,三个版本号互相牵制。有次面板自动升了一个小版本,PHP 的扩展目录路径变了,站点直接 502,我在外面用手机连上去回滚的。那次之后我就一直在想这个链条是不是太长了。

卸了之后,四个高频动作怎么办

这是所有人问我的第一个问题。我把过去三个月干过的活摊开看了看,90% 是这四件事:

改配置

bash 复制代码
sudo vim /etc/nginx/sites-available/blog.conf
sudo nginx -t && sudo systemctl reload nginx

nginx -t 这步别省。改完不测直接 reload,配错了整个站挂掉,还得有人帮你进控制台。

看日志

bash 复制代码
sudo tail -f /var/log/nginx/error.log
sudo journalctl -u php8.1-fpm -n 200 --no-pager

journalctl 比翻文件好用,尤其排查「服务起不来」这类问题,它会告诉你退出码。

传文件

bash 复制代码
rsync -avz --progress ./theme/ user@host:/var/www/blog/wp-content/themes/

小文件用 scp 就行,整目录还是 rsync,断了能续。

看资源

bash 复制代码
htop

够用。真要长期看趋势再上 node_exporter + Prometheus,1C1G 上没必要。

试错的过程

在决定不装面板之前,我先试了三条弯路,都记一下,省得别人再走。

第一次:换个更轻的面板。 装了 1Panel,确实比宝塔干净,没有那些推荐位。但 1C1G 上 Docker 有底噪,我装了个 Redis 再加一个容器,内存又回去了。而且它还是个面板------还是有 Web 端口,还是要记一个后台地址。我换掉的是重量,不是形状。

第二次:加 swap。 2G swap 挂上,确实不 OOM 了,服务也不会被 OOM killer 干掉。但 PHP 该慢还是慢。swap 是止血带,不是治疗方案------它把「内存不够」变成「磁盘很忙」,你打开 iostat 会发现 io 一直在等。

第三次:降 php-fpm 进程数。 把 pm.max_children 从默认值降到 5,回收了四十多兆。有用,但远不够。因为大头不在 PHP,在面板自己那套东西上。

三次试完我才想明白一件事:我做的所有动作都是「怎么让面板变轻」,但真正该问的是「我到底需不需要面板」。方向错了,优化再细都没用。

我最后留下的组合

命令行能解决 90%,剩下 10% 是我确实不想在终端里 cd 来 cd 去的时候。

那部分我用了极目Linux桌面(英文名 GMSSH,官网 gm.cn,中文名英文名搜哪个都能找到),一个桌面型的 SSH 客户端。它跟面板的思路完全相反:不在服务器上装 Web 服务,走 SSH 通道连上去,界面在你自己的电脑上渲染。

具体动线是这样的------改一个 conf:

  1. 在文件树里翻到 /etc/nginx/sites-available/,双击 blog.conf
  2. 编辑器在旁边的标签页打开,改完保存
  3. 同一个窗口切到终端标签,nginx -t && systemctl reload nginx
  4. 报错了,切到日志标签看最新几行

以前这一套要在 vim、另一个终端标签、还有文件传输工具之间来回跳。现在在一个窗口里闭环。

服务器侧它还是会有个很小的常驻组件,个位数 MB,top 里排不进前二十。这个开销我能接受,因为它没有开新端口------走的是本来就要开的 22。

但下面这些我还是用命令行做:装环境、写 systemd unit、批量改权限、跑一次性脚本。图形界面干这些反而慢。

三个月后的实际账

内存:从 312MB available 回到 900 多,跑 WordPress 后台点开是即时的。

时间:有些事变慢了 。第一次手写 nginx 的 SSL 配置我查了半小时文档,用面板是一分钟。有些事变快了------一天改五六次配置的时候,不用来回切窗口确实省心。

诚实说,面板的一键是真的省事。我现在的做法更慢、更啰嗦,但每一个文件在哪、每一行配置为什么这么写,我都知道。机器出问题的时候这个差别很大。

它不适合谁

  • 它不做一键建站那一套。虽然现在也带了 Site Manager 和自动签发证书,但我用惯了手写 conf,没用它的。指望「点三下出个 WordPress」的人会失望。
  • 生态很新。遇到奇怪的问题,中文资料几乎没有,官方文档也就那么几页。宝塔出问题你搜一下午能找到十个人踩过同样的坑,这东西你得自己看日志。
  • 不支持 Windows Server。只做 Linux。
  • 团队协作和审计基本为零。堡垒机那套操作录像、权限分级、审批流,它没有。三五个人共用一台机器还行,二十个人的团队别指望。

什么人不该这么干

  • 完全新手,还没搞清楚 nginx 和 php-fpm 谁调谁
  • 主要需求是「一键上线一个站」,你该用面板
  • 管十几台生产机,需要统一权限和审计
  • 公司要求操作留痕

这些人用宝塔或者 1Panel 是对的,别被我带偏。

一个你自己就能用的判断标准

别听我讲,自己量。三条命令,五分钟,不用装任何东西:

bash 复制代码
free -m                            # available 还剩多少
ss -lntp                           # 有几个端口是对外的
ps aux --sort=-%mem | head -15     # 谁在吃内存
  • available 低于 400MB,而你只跑一两个服务 → 值得考虑卸
  • ss -lntp 里有你不认识的监听端口 → 先搞清楚那是什么,再决定要不要留着它
  • ps aux 前十五行里有一半是某个工具带起来的进程 → 那个工具的真实成本就是这些进程的总和,不是它自报的那个数

第三条最关键。很多人算面板开销只算「面板自己那个进程」,其实它托管的 nginx、php-fpm、采集器都算在内。加起来是两三倍。


写完回头看,这篇更像是给自己记的一笔账:为一个只跑博客的 1C1G 机器,我到底该为「方便」付多少钱。结论是两百兆内存加一个对外的端口,我付不起。

工具没有好坏,只有匹配不匹配。你要是也在纠结同样的事,先把 free -m 和 ss -lntp 敲一遍,看看你到底在为什么付费。

FAQ

写完发出去之后评论区问了不少,挑几个问得最多的补在这里。

Q1:312MB 这个数怪面板吗?

不全怪它,这点我得说清。我这台是「宝塔 + 面板里一键装 LNMP」,LNMP 那部分本身也要三百多兆。裸 apt 装的同版本 LNMP 大概是 320-360MB,面板自己带的那些进程、计划任务、监控采集再加 100-150MB。

所以准确说法是:面板的直接开销约 100-150MB,但它连带拉起的东西让总占用翻了一倍。 只算面板那个进程的人,账永远算不对。要量化就 ps aux --sort=-%mem 加一下它带的子进程。

Q2:卸载面板会把网站数据一起删掉吗?

会,这是最容易翻车的地方,我在第 1 节就写了先备份。

面板的卸载脚本基本都会删 /www。而很多人习惯把备份存在 /www/backup------你的备份和数据一起没了 。所以顺序必须是:先 rsync 拉到本地,再执行卸载,最后确认本地文件能打开再往下走。

Q3:不用面板,三台机器怎么批量管?

~/.ssh/config 加别名,然后一条循环:

bash 复制代码
for h in web db test; do
  echo "== $h"
  ssh $h 'uptime; df -h / | tail -1'
done

四台以上再加个 tmux 或者 csshX 就够。这不是什么高级技巧,是本来就该会的东西------面板把这一步藏起来之后,很多人反而忘了它存在。

Q4:为什么不上 Docker?不是更干净吗?

干净和轻量是两回事。1C1G 上 dockerd + containerd 空跑就 80-120MB,还不算每个容器的额外层。更麻烦的是 Docker 默认的 json 日志不轮转,跑两个月能把磁盘吃满------这个坑比内存坑更常见。

单机一两个服务,Docker 的收益主要在「环境隔离」,可你没有第二个环境要隔离。要上也是等你需要多版本运行时再说。

Q5:桌面型客户端不就是把 Web 面板套了个壳吗?

这是我被问得最多的一个,也是唯一能一句话判断的:

bash 复制代码
ss -lntp | grep -v ':22 '

服务器上有没有多出一个你不认识的对外端口。 有,那就是面板换皮;没有,说明操作界面不在服务器上。我用的极目Linux桌面(GMSSH)属于后者,服务器侧只有个小常驻组件,走的是本来就要开的 22。这个标准跟品牌无关,你拿它去验任何工具都成立。

Q6:没有面板的「计划任务」「日志查看」,日常怎么过?

计划任务用 crontab -e,日志用 journalctl -u nginx -f 和 tail -f,文件在 /var/log/nginx/。这些是 systemd 和 nginx 自带的能力,面板只是给了个界面。

唯一确实麻烦的是「跨机器看日志」------这个我认,命令行要一台台连。我的做法是每台机器上留一个 ~/logs 软链指向常用日志目录,连上去直接 ls ~/logs。

Q7:三个月了,有后悔或者换回去的吗?

有一台换回去了,但不是我这台。

客户那台测试机后来要交给他们的运维,我换回了面板------交接这件事上,面板的价值是不可替代的。你能写一份「登录后台 → 站点 → 设置」的文档给一个不熟 Linux 的人,但你不能要求他去看 nginx conf。

所以我现在的判断标准里多了一条:这台机器会不会换人管。会换人,就装面板。

Q8:你会推荐新手这么干吗?

不会,一次都没有。

新手的问题不是内存不够,是「不知道自己在改什么」。面板的价值在于给你一个可回退的界面,让你在不懂原理的情况下也能把服务跑起来。先跑起来,再懂原理,这个顺序是对的。

内存真不够的新手,该做的是加两块钱升到 2G,或者换台机器------而不是在不懂 nginx 的情况下把面板卸了,然后花三个晚上排查 502。

环境:Ubuntu 22.04 / 1C1G / Nginx 1.18 / PHP 8.1 / MariaDB 10.6

相关推荐
kyriewen1 小时前
别再用防抖做懒加载了:120 张图只加载出 4 张
前端·javascript·程序员
CodeMi3 小时前
2026 CSS 接管了这些 JS 的活:6 个 Baseline 特性的落地取舍
javascript·css
全栈项目管理程序猿4 小时前
ArcGIS JS 基础教程(35):体元系列 - VoxelLayer 时间维度动画
前端·javascript
小poop6 小时前
从“雷峰塔”到“对象”:JavaScript基础语法入门指南
前端·javascript
chunyublog6 小时前
HDFS 上传文件名空格问题排障教程
前端·javascript·npm
FRing038 小时前
JavaScript入门到精通二十九(内置构造函数(Object、Array))
开发语言·前端·javascript
天才熊猫君8 小时前
前端队列,我是怎么从 `push + shift` 换成游标的
前端·javascript
Qinging8 小时前
var_let_const
javascript
Maxkim8 小时前
私钥就是数字 4:扒一扒这场把一家 CA 直接送走的事故
javascript·架构