机器配置概览
| 项 | 值 |
|---|---|
| 云厂商 | 阿里云轻量应用服务器 |
| 公网 IP | 118.31.186.200 |
| 规格 | 2 vCPU / 2 GiB 内存 / 40 GiB ESSD |
| 带宽 | 200M 峰值(不限流量) |
| 价格 | 68 元/年(双11新客活动价) |
| 系统 | Ubuntu 22.04 LTS |
说实话,2核2G 不算大。一般博客跑 WordPress 这配置刚好。但我要跑 3 个项目:
- 文本笔记站(note.mccok.cn)—— 极简记事本,可图文混排
- OpenList 网盘管理(5244 端口)—— 聚合百度网盘 + 夸克
- 本博客(mccok.cn)—— 本文的 Hexo
策略的核心就 4 个字:能静不动态。
策略一:静态化一切能静态的
博客和笔记站,必须静态。
笔记站是我选的 minimalist-web-notepad 项目,本身纯 PHP + 文本文件读写(不装 MySQL,不装 Redis)。笔记保存为磁盘上的 .txt。博客更简单,Hexo 生成纯 HTML,跑博客 = 跑 Nginx 读文件,Nginx 自己就是静态文件服务器。
静态化之后,博客 + 笔记两个项目合计的常驻内存占用:
Nginx master+worker 合计 ~18 MB
PHP-FPM (笔记站) ~45 MB
----------------------------
合计 ~63 MB
而 2 GB 内存总共有约 1800 MB 可用(系统内核占去 200MB)。63 MB 跟没有一样。
策略二:Docker 资源硬限制
唯一需要吃资源的是 OpenList(原 AList),它是 Go 写的单体程序,但内存会随文件缓存涨到 300-500MB。我直接在 Docker Compose 上硬限制:
# /srv/www/AList网盘管理/docker-compose.yml
services:
openlist:
image: ghcr.io/openlist-org/openlist:latest
container_name: openlist
restart: unless-stopped
ports:
- "5244:5244"
volumes:
- ./data:/opt/alist/data
# ↓ 关键:限制死资源上限
deploy:
resources:
limits:
cpus: '0.60' # 最多用 60% 的单核(≈ 总 CPU 的 30%)
memory: 256M # 内存上限 256MB,超了就 OOMKill 自动重启
reservations:
cpus: '0.10'
memory: 64M
memswap_limit: 256M # 禁止 Swap 溢出到磁盘
这样 OpenList 就算内存泄漏(实际上没泄漏),最多占 256MB + 30% CPU,系统不会被拖死。
策略三:Nginx 反向代理 + 中文目录规范
三个项目都放在 /srv/www/ 下,文件夹必须中文命名(个人偏好,查找方便):
/srv/www/
├── 文本笔记/ → 目录名中文,Nginx root 路径记得加双引号
├── AList网盘管理/ → Docker Compose 跑在 5244,Nginx 反代到这里
└── 博客/ ← 我们的 Hexo 静态产物
Nginx 配置举例(关键点:中文路径用双引号包起来):
server {
listen 80;
server_name mccok.cn;
# ↓ 中文路径必须加双引号,否则 Nginx 解析失败
root "/srv/www/博客";
index index.html;
location / {
try_files $uri $uri/ $uri.html =404;
}
# 静态资源强缓存
location ~* \.(css|js|jpg|jpeg|png|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}
策略四:Swap 兜底 + Swappiness 调低
2GB 内存理论上够,但三个项目同时有访问峰值(比如网盘下载大文件)时,内存会突然飘到 1.6~1.8 GB。这个边缘情况下如果没有 Swap,Linux OOM Killer 会随机杀一个进程(通常是占内存最大的 OpenList),导致网盘服务掉线。
所以加 2GB Swap 文件,并调低可抢占性:
# 创建 2G swap
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
# swappiness = 10(默认 60,太高会过早用 swap 拖慢速度)
echo 'vm.swappiness=10' >> /etc/sysctl.conf
echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf
sysctl -p
这样内存紧张时先用 Swap,但不会太早用(避免性能下降)。
策略五:UFW 只开 3 个端口
防火墙别手软:
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp comment 'SSH'
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
ufw --force enable
其余全部拒绝。OpenList 的 5244 端口不对外开放,只允许本机 Nginx 反代访问(127.0.0.1:5244)。要访问网盘走 note.mccok.cn/dav/ 之类的路径,Nginx 内部转发——这样所有流量统一走 HTTPS 加密,也少暴露攻击面。
最终运行状态
# free -h
total used free shared buff/cache available
Mem: 1.9Gi 742Mi 430Mi 18Mi 850Mi 1.1Gi
Swap: 2.0Gi 0Ki 2.0Gi - -
# docker stats --no-stream
NAME CPU % MEM USAGE
openlist 2.15% 92.3MiB / 256MiB
# curl -s -o /dev/null -w "%{http_code}\n" https://mccok.cn
200
内存只用了 742MB(含系统 + Nginx + PHP-FPM + Docker + OpenList),Swap 完全没动。CPU 常年 <5%。
结论:68 块跑三个项目?绰绰有余。关键不是硬件,是把钱和资源都花在刀刃上。
(完)