在1核1G1M带宽的香港服务器上建站的思路
白嫖了一台学生机:
- CPU:1核(Intel Xeon E5-2696 v2 @ 2.50GHz,古董级)
- 内存:960MB(连1G都没给满)
- 带宽:1M(没错,就是那个1M)
- 硬盘:20G系统盘 + 20G数据盘
运行的是 Debian 12 (bookworm),内核 6.1.0
现状检查:这台机器能干什么?
root@cvm-3k2fzhq25i225:~# free -h
total used free shared buff/cache available
Mem: 960Mi 279Mi 472Mi 2.1Mi 348Mi 681Mi
Swap: 2.0Gi 2.3Mi 2.0Gi
root@cvm-3k2fzhq25i225:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 462M 0 462M 0% /dev
tmpfs 97M 588K 96M 1% /run
/dev/vda1 20G 4.4G 15G 24% /
/dev/vdb1 20G 24K 19G 1% /data
root@cvm-3k2fzhq25i225:~# top
top - 12:08:52 up 20 days, 13:18, 1 user, load average: 0.01, 0.01, 0.00
Tasks: 83 total, 2 running, 81 sleeping, 0 stopped, 0 zombie
%Cpu(s):100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 960.7 total, 66.0 free, 277.1 used, 765.8 buff/cache
MiB Swap: 2048.0 total, 2045.7 free, 2.3 used. 683.6 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
213 root 20 0 201096 151096 145996 S 0.0 15.4 5:00.79 systemd-journal
428 root 20 0 28744 18452 10552 S 0.0 1.9 3:53.83 unattended-upgr
已经跑着 Nginx 1.28.2,还开了 BBR 加速(tcp_congestion_control = bbr),这点倒是挺良心。
问题来了:就这配置,想做个网站,怎么搞?
常规路线
WordPress?
想都别想。PHP + MySQL + WordPress 这套组合拳下来,1G内存连启动都费劲。就算强行装上,随便来几个请求就能把机器卡死。
其他动态框架?
Django、Rails、Laravel……任何一个都是"内存杀手"。跑起来是可以,但并发?不存在的。
数据库?
MySQL 默认配置就要占几百兆,MariaDB 好一点但也够呛。SQLite 倒是个选择,但在 Web 场景下并发写入是硬伤。
我的思路:本地预处理 + 线上纯静态
既然服务器跑不动动态内容,那就把"动态"的部分挪到本地。
核心思想:在本地完成所有消耗资源的工作,上传到服务器的只有原生 HTML。
具体怎么做?
1. 本地搭建开发环境
- 本地跑 MySQL
- 本地跑 Python(或者其他你顺手的脚本语言)
- 本地完成所有数据处理、模板渲染、内容生成
2. 组件化思维管理
把网站拆成组件:
- 头部导航(header)
- 底部版权(footer)
- 侧边栏(sidebar)
- 文章列表
- 评论模块
每个组件单独维护,修改时只改一处。
3. 构建脚本做三件事
写一个本地构建脚本(Python/Shell/Node 都行),每次更新时:
① 内联化
把所有组件塞进最终的 HTML 文件里,不依赖任何外部文件。CSS 内联、JS 内联,甚至字体图标都转成 DataURI。
② 图片优化
- 转 WebP 格式(比 PNG/JPG 小30%以上)
- 压缩质量(80% 通常够用)
- 调整分辨率(移动端不需要4K大图)
- 能转 CSS 绘制的就不要用图片
③ 资源压缩
- HTML 去空格、去注释
- CSS/JS 压缩
- 能合并的请求尽量合并
4. 增量上传
每次更新只上传被修改的文件,不需要重复上传整个站点。
用 rsync 或者写个简单的同步脚本:
rsync -avz --delete ./public/ root@your-server:/www/wwwroot/
这套方案的优势
| 维度 | 传统动态网站 | 本地方案 |
|---|---|---|
| 服务器内存占用 | 几百兆起步 | 几十兆 |
| CPU消耗 | 每次请求都要渲染 | 只读静态文件 |
| 带宽占用 | 动态生成+多次请求 | 单次请求,极致压缩 |
| 并发能力 | 受限于后端 | 受限于Nginx,轻松10倍 |
| 更新方式 | 在线修改 | 本地构建+同步 |
实际效果
我的站点目前就是这么跑的:
- Nginx 只负责 serve 静态文件
- 内存占用:9.1M(Nginx进程)
- CPU:几乎为0
- 1M带宽跑起来也够用,因为我的首页才不到500kb
待优化
- 评论/搜索等需要后端的场景:可以用第三方服务(如 GitHub Issues 做评论、Algolia 做搜索),或者本地生成时就把搜索索引做好
- 不适合频繁更新的站点:每次更新都需要重新构建,如果一天改几十次内容会有点烦
- 动态内容怎么办:如果真的需要动态数据,可以留一个小接口(比如用 Flask 写一个轻量 API),但绝大多数场景其实不需要
这个方法就是"用时间换空间"——用本地构建的时间,换服务器有限的资源。
对于个人博客、作品集、小型项目来说,够用、省心、还省钱。
代码暂时不贴了,目前写得很混乱(自己用嘛,能跑就行)。等有空整理一下,再单独写一篇把构建脚本放出来。
配置不够,脑子来凑。共勉。
*当前服务器已稳定运行至今,Nginx + BBR + 纯静态,稳如老狗。*