PM2 管理后端(设置项目自启动)
查看pm2管理
pm2 list
┌────┬──────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├────┼──────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ app │ default │ N/A │ fork │ N/A │ 8h │ 0 │ online │ 0% │ 0b │ root │ disabled │
│ 1 │ steak-api │ default │ N/A │ fork │ N/A │ 8h │ 0 │ online │ 0% │ 0b │ root │ disabled │
1.进入后端路径
cd /usr/share/nginx/html/server
2.使用 PM2 启动应用
pm2 start app.js --name "NewsSystem-api"
此项目的 Express 应用需要使用
bin/www
文件来启动,而不是app.js
pm2 start ./bin/www --name NewsSystem-api
pm2 start ./bin/www --name NewsSystem-api
[PM2] Starting /usr/share/nginx/html/server/bin/www in fork_mode (1 instance)
[PM2] Done.
┌────┬───────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├────┼───────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 4 │ NewsSystem-api │ default │ 0.0.0 │ fork │ 113151 │ 0s │ 0 │ online │ 0% │ 0b │ root │ disabled │
│ 0 │ app │ default │ N/A │ fork │ N/A │ 8h │ 0 │ online │ 0% │ 0b │ root │ disabled │
│ 1 │ steak-api │ default │ N/A │ fork │ N/A │ 8h │ 0 │ online │ 0% │ 0b │ root │ disabled │
3.让 PM2 开机自启
1.pm2 startup
pm2 startup systemd
2.pm2 save
[root@VM-4-8-centos server]# pm2 save
[PM2] Saving current process list...
[PM2] Successfully saved in /root/.pm2/dump.pm2
4.验证整个流程是否成功
1. 重启整个服务器
sudo reboot
2.让 PM2 恢复所有保存的应用
pm2 resurrect
这个命令模拟了系统启动时
pm2-root.service
所做的工作。执行后,检查你的应用my-api
的状态是否从stopped
变成了online
,并且网站接口也恢复了。如果
resurrect
命令成功,那就证明你的开机自启配置完全正确。
总结:以后更新代码后的完整工作流
现在的生产环境部署流程应该是这样的:
部署新代码 (例如通过
git pull
)安装新增依赖 (如果有的话)
重启 PM2 进程以使新代码生效
pm2 restart my-api
(可选) 再次保存进程列表 (通常不需要,除非你新增或删除了进程)
pm2 save
至此,已经拥有了一个完全体的生产环境 Node.js 服务,它具备了:
后台运行
崩溃自动重启
服务器开机自动启动
便捷的日志查看 (
pm2 logs
)便捷的状态管理 (
pm2 status
)
以后再也不需要手动输入 npm start
了。
应用生命周期管理
# 启动一个应用并为其命名(推荐)
pm2 start app.js --name "my-api"# 启动应用并监听文件变化(用于开发环境,文件修改后自动重启)
pm2 start app.js --name "my-api" --watch# 启动应用并传递环境变量(NODE_ENV=production)
pm2 start app.js --name "my-api" --env production# 重启指定应用(代码更新后常用)
pm2 restart my-api# 优雅地重载应用(集群模式时逐个重启,实现零停机更新)
pm2 reload my-api# 停止指定应用(停止但不从PM2列表中移除)
pm2 stop my-api# 删除指定应用(从PM2列表中完全移除)
pm2 delete my-api# 停止并删除所有应用
pm2 delete all
监控与信息查看
# 查看所有被PM2管理的应用状态(最常用)
pm2 status
# 或者
pm2 list# 实时监控所有应用的CPU和内存使用情况(类似top命令)
pm2 monit# 查看指定应用的实时日志(-f 表示follow,持续输出)
pm2 logs my-api
pm2 logs my-api --lines 100 # 查看最后100行日志# 查看所有应用的实时日志
pm2 logs# 清空指定应用的日志文件
pm2 flush my-api# 显示指定应用的详细信息(包括路径、环境变量等)
pm2 show my-api# 显示所有应用的详细信息
pm2 show all
集群模式与性能
# 以集群模式启动应用,自动利用所有CPU核心(用于提升性能)
pm2 start app.js -i max --name "my-api-cluster"# 启动指定数量的实例(例如4个实例)
pm2 start app.js -i 4 --name "my-api-cluster"
启动配置与持久化
# 生成一个示例的PM2配置文件(ecosystem.config.js)
pm2 init# 使用配置文件启动应用(推荐用于复杂配置)
pm2 start ecosystem.config.js# 保存当前进程列表到磁盘,用于开机自启(非常重要!)
pm2 save# 恢复上次保存的进程列表(模拟开机自启过程)
pm2 resurrect
系统服务与自启
# 配置PM2为系统服务,实现开机自启(针对当前用户)
pm2 startup# 移除开机自启配置
pm2 unstartup# 如果pm2 startup提示需要以sudo运行,请使用:
pm2 startup systemd -u your_username --hp /home/your_username
维护与实用命令
# 平滑重启PM2自身(不中断当前管理的进程)
pm2 gracefulReload# 生成当前环境的启动脚本(用于调试)
pm2 startup [platform] --help# 查看PM2的版本信息
pm2 --version# 强制PM2触发一个快照并发送到PM2 Plus(如果使用的话)
pm2 update
配置文件示例 (ecosystem.config.js
)
对于生产环境,强烈推荐使用配置文件:
module.exports = {apps: [{name: "my-api", // 应用名称script: "./app.js", // 入口文件instances: "max", // 集群实例数,max表示按CPU核心数exec_mode: "cluster", // 集群模式env: {NODE_ENV: "development", // 开发环境变量},env_production: {NODE_ENV: "production", // 生产环境变量(使用--env production启用)},watch: false, // 是否监听文件变化(生产环境应为false)max_memory_restart: "1G", // 内存超过1G自动重启log_file: "logs/combined.log", // 合并日志文件out_file: "logs/out.log", // 标准输出日志error_file: "logs/err.log", // 错误日志time: true // 日志中显示时间戳}]
};
使用配置文件:
# 启动所有在配置文件中定义的应用
pm2 start ecosystem.config.js# 使用生产环境变量启动
pm2 start ecosystem.config.js --env production# 重启配置文件中定义的应用
pm2 restart ecosystem.config.js
作为日常开发的速查手册。pm2 status
、pm2 logs
、pm2 restart
这几个是最常用的。