今天是大扫除的日子。博客迁走之后,树莓派上下线了一批服务:旧的博客前后端、一个不再维护的项目、以及整套 frp 穿透。删东西比装东西更需要章法——记录一下我的下线 checklist。
下线前:确认与备份
- 确认没有隐性依赖。
ss -ltnp看端口,翻 nginx 配置和隧道路由,确认没有别的服务在引用它。我就发现过一个共享隧道,差点把还活着的服务一起带走。 - 代码推远端。工作目录里往往有未提交的改动,先
git status检查,把最终状态推一个pi-final-state分支再删本地。删除是不可逆的,多推一个分支是免费的。 - 数据库要么导出要么明确放弃。这一步一定要显式决策,不要"先删了再说"。
下线:按依赖顺序拆
顺序很重要,从外到内:
域名/隧道路由 → 反向代理配置 → 进程 → 定时任务/watchdog → 项目目录 → 数据库
具体到我这次:
# 1. 隧道配置里删掉对应路由
# 2. nginx
sudo rm /etc/nginx/sites-enabled/xxx && sudo nginx -s reload
# 3. pm2
pm2 delete xxx && pm2 save # save 不做等于没删
# 4. crontab -e 删 watchdog
# 5. rm -rf 项目目录
# 6. DROP DATABASE
先删入口再删进程,公网流量不会打到一个正在拆除的服务上。
下线后:验证
pm2 list/ss -ltnp:进程和端口确实没了- 公网访问旧域名:应该是明确的错误页,而不是超时(超时说明哪里还挂着半截配置)
- 重启一次机器:确认没有开机自启的僵尸把服务又拉起来
最容易漏的三样
- pm2 save——删了进程不 save,重启全回来了
- watchdog / 定时任务——你写过的自动拉起脚本,比你想象中忠诚
- 散落的配置副本——我这次在三个不同目录找到了三份 frpc.ini,真正生效的是哪份,得看进程的启动参数而不是猜
服务下线和服务上线一样,是个工程问题。删得干净,机器和脑子都清爽。