有谁想过在 512MB 内存的 Raspberry Pi Zero 上跑一个完整网站?更疯狂的是——全部数据都放在内存里,不用 SD 卡?btxx.org 的站长做了一个有趣的实验,用 Raspberry Pi Zero + tmpfs + SQLite 运行了一个真实的个人网站。
项目背景
这个项目的目标很简单:在树莓派 Zero 的极限硬件条件下,搭建一个稳定运行的网站。核心约束是:
- Raspberry Pi Zero(第一代,512MB RAM,单核 ARM11)
- 所有数据放在 tmpfs(RAM 磁盘)中,不写入 SD 卡
- 使用 SQLite 作为数据库
- 用 Caddy 或 Nginx 作为反向代理
为什么要在内存里跑?
- 延长 SD 卡寿命:树莓派的 SD 卡频繁写入容易损坏
- 提升 I/O 性能:内存的读写速度远超 SD 卡
- 技术挑战:在极限条件下探索系统工程的边界
- 极简哲学:一个网站真的需要多少资源?
架构设计
系统层
操作系统安装在 SD 卡上(只读),网站数据全部在 tmpfs 中:
# 挂载 tmpfs
mount -t tmpfs -o size=400M tmpfs /srv/www
# 创建目录结构
mkdir -p /srv/www/html
mkdir -p /srv/www/db
mkdir -p /srv/www/logs
应用层
使用极简的 Web 框架(如 Go 或 C 编写的轻量级应用),配合 SQLite:
# Go 应用示例
go build -ldflags="-s -w" -o /srv/www/app main.go
# SQLite 数据库放在内存中
/app -db /srv/www/db/site.db
进程管理
使用 systemd 管理服务,确保重启后自动恢复:
[Unit]
Description=Web App
After=network.target
[Service]
ExecStartPre=/bin/mount -t tmpfs -o size=400M tmpfs /srv/www
ExecStart=/srv/www/app
Restart=always
[Install]
WantedBy=multi-user.target
数据持久化策略
既然是内存运行,断电数据就丢失了。解决方案:
- 定时同步:用 cron 每隔几分钟把数据库同步到 SD 卡
- 内容从 Git 拉取:静态内容存储在 Git 仓库中,启动时自动克隆
- 外部备份:定期备份到远程服务器或云存储
性能表现
在这个配置下,树莓派 Zero 可以轻松处理:
- 静态页面:每秒数百次请求
- 简单动态页面:每秒 50-100 次请求
- SQLite 查询:毫秒级响应
- 总内存使用:约 200-350MB(含操作系统)
适合谁
- 想了解底层系统运维的技术爱好者
- 需要极低成本部署个人博客/主页的站长
- 喜欢探索硬件极限的 Maker
- 教学用途:理解 Linux 内存管理、Web 服务器原理
局限性
- 不适合高流量网站(Pi Zero 的网络和 CPU 都很有限)
- 不适合需要大量存储的应用(400MB 很快就满了)
- 断电风险(需要完善的持久化策略)
- Pi Zero 的以太网需要 USB 适配器,带宽受限
这个项目最大的价值不在于实用性,而在于它回答了一个根本问题:一个网站到底需要多少资源?答案可能让你吃惊。
© 版权声明
THE END
















暂无评论内容