使用PM2配置并部署项目上线。
发布于2023-10-17 15:43 阅读606次 无论我们使用VUE、REACT、NUXT等各种框架开发项目后,最终上线部署都会选择PM2,特别是对于需要Nodejs做Server支撑的项目,因pm2是基于nodejs开发的进程管理器,适用于后台常驻脚本管理,同时对node网络应用有自建负载均衡功能。
**一、pm2特点:说一些pm2有哪些优点好处呢?**
1. 支持进程行为配置 ,即可以通过配置,实现对pm2管理应用的一些基础属性更新修改,如应用名称,启动模式等;
2. 支持集群模式,支持负载均衡,但因采用nodejs的cluster模块实现,仅适用于nodejs进程;
3. 支持source map,此项针对js, source map文件是js源文件的信息文件,里面存储着源文件的位置信息;
4. 支持热重启;
5. 支持部署工作流,pm2可依据测试环境和线上环境自动部署到不同的服务器,同时运行在不同配置下;
6. 支持监听重启,在文件更新等情况下可实现进程自动重启;
7. 支持linux的startup进程启动,startup是指系统boot, 进程自启动,如centos的chkconfig;
8. 日志管理,两种日志,pm2系统日志与管理的进程日志,默认会把进程的控制台输出记录到日志中;
9. 命令自动补全功能,个人感觉这个功能意义不大,而且尝试了一下,没有原生的linux命令自动补全反应敏捷;
10. 监控功能,pm2 monit监控cpu和memory使用情况,keymetrics监控更为详细;
11. 支持开发调试模式,非后台运行,pm2-dev start <appName>;
12. 支持pm2模块开发,实现pm2的功能扩展;
13. keymetrics监控,比pm2 monit监控更为详细友好,通过web页面展示;
14. 最大内存重启,设置最大内存限制,超过限制自动重启;
15. 编程API,提供API供开发者通过编程方式灵活管理进程;
**二、pm2常用命 常用命令通常都是比较简单。下面列举一些pm2常用的管理命令**
1. pm2 start <script\_file|config\_file> [options] 启动指定应用,如pm2 start index.js --name httpServer;
2. pm2 stop <appName> [options] 停止指定应用,如pm2 stop httpServer;
3. pm2 reload|restart <appName> [options] 重启指定应用,如pm2 restart httpServer;
4. pm2 show <appName> [options] 显示指定应用详情,如pm2 show httpServer;
5. pm2 delete <appName> [options] 删除指定应用,如pm2 delete httpServer,如果修改应用配置行为,最好先删除应用后,重新启动方才生效,如修改脚本入口文件;
6. pm2 kill 杀掉pm2管理的所有进程;
7. pm2 logs <appName> 查看指定应用的日志,即标准输出和标准错误;
8. pm2 monit 监控各个应用进程cpu和memory使用情况;
**三、使用ecosystem.config.js文件配置**
```
module.exports = {//pm2下配置
apps: [
{
name: 'ProjectName',
port: 3000,
script: './server/index.mjs',
cwd: './',//项目运行基础目录 以ecosystem.config.js文件为相对路径
exec_mode: 'fork',//fork单实例 cluster集群
instances: 1,//实例数,默认为1,在cluster集群模式下可支持多个
watch: false,//监听文件变化 自动重启
max_memory_restart: '150M', //此应用超出指定内存便会自动重启
}
]
};
```
**四、更多ecosystem.config.js配置选项**
1. name 应用进程名称;
2. script 启动脚本路径;
3. cwd 应用启动的路径,关于script与cwd的区别举例说明:在/home/polo/目录下运行/data/release/node/index.js,此处script为/data/release/node/index.js,cwd为/home/polo/;
4. args 传递给脚本的参数;
5. interpreter 指定的脚本解释器;
6. interpreter\_args 传递给解释器的参数;
7. instances 应用启动实例个数,仅在cluster模式有效,默认为fork;
8. exec\_mode 应用启动模式,支持fork和cluster模式;
9. watch 监听重启,启用情况下,文件夹或子文件夹下变化应用自动重启;
10. ignore\_watch 忽略监听的文件夹,支持正则表达式;
11. max\_memory\_restart 最大内存限制数,超出自动重启;
12. env 环境变量,object类型,如{"NODE\_ENV":"production", "ID": "42"};
13. log\_date\_format 指定日志日期格式,如YYYY-MM-DD HH:mm:ss;
14. error\_file 记录标准错误流,\$HOME/.pm2/logs/XXXerr.log),代码错误可在此文件查找;
15. out\_file 记录标准输出流,\$HOME/.pm2/logs/XXXout.log),如应用打印大量的标准输出,会导致pm2日志过大;
16. min\_uptime 应用运行少于时间被认为是异常启动;
17. max\_restarts 最大异常重启次数,即小于min\_uptime运行时间重启次数;
18. autorestart 默认为true, 发生异常的情况下自动重启;
19. cron\_restart crontab时间格式重启应用,目前只支持cluster模式;
20. force 默认false,如果true,可以重复启动一个脚本。pm2不建议这么做;
21. restart\_delay 异常重启情况下,延时重启时间;