一个人的全栈项目,部署该怎么搭
没有运维团队,就更要把部署这条路铺平:容器化、进程守护、反向代理、证书自动续期,四件事做到位就够用。
目标:让自己半夜不用爬起来
一个人做项目,最怕的是「服务挂了没人知道」。部署方案的设计目标很明确:出问题能自愈,出事能追溯。
四件事
1. 进程守护
进程一定要有人看着。pm2 是最省事的选择:崩溃自动重启、日志自动切分、开机自启。
一个经验:日志必须配 rotation。不然某个接口报错刷屏,磁盘几天就满。
2. 反向代理
nginx 负责三件事:TLS 终止、静态文件、请求转发。
路径规划上有个细节值得注意:静态资源和接口要分开走。静态交给 nginx 直接吐,接口才转发给 Node。这样 Node 进程不用扛静态文件的 IO。
3. 静态服务的越权风险
如果 Node 自己兼做静态服务,一定要配访问黑名单。否则源码、配置文件、.env、数据库凭据都可能被直接下载。
要拦的东西至少包括:源代码目录、依赖目录、日志目录、所有 .json、以及根目录的入口脚本文件。
4. 可回滚
上线前把要改的文件备份好,部署时只传改动的文件,不要整目录同步。线上代码和本地往往不一致,整目录覆盖等于埋雷。
上线顺序
有个容易被忽略的点:先停旧服务,再起新服务。
如果新服务里带了后台定时任务,而旧服务的定时任务还在跑,就会出现同一件事被做两遍——发消息的场景下,用户会收到重复通知。
正确的顺序是:
停旧后台任务 → 停旧 HTTP 服务 → 起新服务 → 验证 → 保存进程列表上一篇
Fun.js 产品说明