树莓派上跑的服务越来越多,博客前后端、爬虫、搜索、隧道……不做点管理迟早乱成一锅粥。记录一下我现在的方案。
进程管理:pm2
所有 Node 服务统一用 pm2 托管,连 Python 服务也可以:
pm2 start index.js --name limnov-search
pm2 start ./searxng-start.sh --name searxng --interpreter bash
pm2 save # 保存当前进程列表
pm2 startup # 生成开机自启脚本
几个日常高频命令:
pm2 list # 一眼看全部服务状态
pm2 logs xxx --lines 50 # 看日志
pm2 restart xxx # 重启
pm2 save 一定要记得执行,不然重启树莓派之后进程列表是空的——别问我怎么知道的。
反向代理:nginx
每个服务一个 site 文件,放在 /etc/nginx/sites-available/,软链到 sites-enabled/。好处是下线某个服务时直接删软链,不影响其他站点。
对外暴露:cloudflared tunnel
以前用过 frp,现在主力是 Cloudflare Tunnel。一个 tunnel 可以带多个域名路由:
ingress:
- hostname: crawl.example.com
service: http://localhost:3002
- hostname: search.example.com
service: http://localhost:3003
- service: http_status:404
不需要公网 IP,不需要开端口,家里断电重启后自动重连。
一点心得
- 服务名统一命名规范(项目名-功能),
pm2 list才能一眼看懂 - 日志盘写满是树莓派最常见的死法,记得配 logrotate
- 每次装新服务前,先
pm2 list+ss -ltnp看看端口占用,避免打架