上周把一台跑了两年 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:
- 在文件树里翻到
/etc/nginx/sites-available/,双击blog.conf - 编辑器在旁边的标签页打开,改完保存
- 同一个窗口切到终端标签,
nginx -t && systemctl reload nginx - 报错了,切到日志标签看最新几行
以前这一套要在 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