我第一次在服务器上跑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内存占用几乎可以忽略。






