Node.js应用一关SSH就挂?PM2让它24小时在线还能自动重启

npm start一关SSH进程就没了?PM2让你应用24小时在线还零停机更新
发布于
4

我第一次在服务器上跑Node.js应用的时候,npm start之后关了SSH窗口,进程跟着就没了。后来知道有个叫nohup的东西,nohup node app.js & 跑着跑着内存溢出挂了也没人知道。直到发现了PM2——这才是生产环境管理Node.js进程的正确方式。

PM2是什么

PM2是Node.js的生产进程管理器。它能做这几件事:应用挂了自动重启、服务器重启后自动启动应用、日志管理、负载均衡(多进程利用多核CPU)、零停机重载(更新代码不用中断服务)。

安装和基础使用

npm install -g pm2全局安装。然后启动应用:

pm2 start app.js --name "myapp"

pm2 list查看所有进程状态,pm2 logs myapp看日志,pm2 restart myapp重启,pm2 stop myapp停止。

关键命令pm2 save和pm2 startup。pm2 startup生成systemd启动脚本让PM2开机自启,pm2 save保存当前进程列表。做完这步之后服务器重启,你的Node.js应用会自动拉起来。

Nginx反代和部署

应用监听localhost:3000,用Nginx反代到443端口加SSL:

server {
    listen 443 ssl;
    server_name 你的域名;
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

代码更新的时候git pull拉最新代码,然后pm2 reload myapp实现零停机重载——服务不会中断,用户体验完全不受影响。

我在雨云(rain.jiyueip.com,优惠码admin01)上跑着三个Node.js应用,全部用PM2管理。小配置2核2G跑Node.js没问题,PM2内存占用几乎可以忽略。

常见问题(FAQ)

Node.js应用怎么保持24小时运行?
用PM2。pm2 start app.js --name myapp启动应用,pm2 save保存进程列表,pm2 startup生成开机自启脚本。之后服务器重启应用自动拉起来,应用挂了PM2也会自动重启。
怎么更新Node.js应用不影响用户?
git pull拉最新代码,pm2 reload myapp零停机重载。服务不会中断,正在处理的请求不会丢失。比pm2 restart强多了——restart有短暂中断。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 / 600
0 讨论
热门最新
总结
暂无总结

暂无数据