PM2 + Nginx + Cloudflared:树莓派 Homelab 服务管理心得

树莓派上跑的服务越来越多,博客前后端、爬虫、搜索、隧道……不做点管理迟早乱成一锅粥。记录一下我现在的方案。 进程管理:pm2 所有 Node 服务统一用 pm2 托管,连 Python 服务也可以: 几个日常高频命令: pm2 save 一定要记得执行,不然重启树莓派之后进程列表是空的——别问我怎么知道的。 反向代理:nginx 每个服务一个 site 文件,放在 /etc/nginx/sites-available/,软链到 sites-enabled/。好处是下线某个服务时直接删软链,不影响其他站点。 对外暴露:cloudflared tunnel 以前用过 frp,现在主力是 Cloud

树莓派上跑的服务越来越多,博客前后端、爬虫、搜索、隧道……不做点管理迟早乱成一锅粥。记录一下我现在的方案。

进程管理: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 看看端口占用,避免打架