Linux 下如何部署 node 应用?
Node 是一个可以在服务器端运行 JavaScript 的环境,作为一个由前端开发步入后端开发,转变为全栈开发的首选后端语言,相信大家都已经非常的熟悉了。现在有很多项目都会选择 Node 来作为后端开发,初出茅庐的兄弟们都想撸起袖子加油干,其中的坑不少,弯弯也不少,但是最终也还是都能解决。在这些问题当中,也许大家都会遇到这么个问题。开发中,可以直接在终端里运行服务器,然后一直挂着。开发完了,再闭关服务器即可。而项目上线的话,一般是部署在 Linux 系统上,并且是一直都能访问的,如果依旧采用开发环境的方式运行项目,就不能关闭终端,或者闭关自己的电脑,不然服务器就不能访问了,很显然不可能一直开机挂着终端吧。
其实作为后端出身的一看就知道是怎么回事了,这就是一个进程守护的问题。Node 的解决方案可以使用 Forever 模块来守护进程、监听程序的运行,而今天给大家介绍另一个更加强大的进程管理工具 pm2,该工具除了可以管理 Node 进程外,还能进行性能监控、自动重启和负载均衡,关键是使用上还非常的简单。
安装
进入系统后,直接全局下安装该工具(前提是已经安装过 Node了):
npm i -g pm2
常用命令
信息展示
# 列出所有pm2运行的所有程序
pm2 list
# 显示所有应用程序的 CPU 和内存占用情况(ctrl +c 退出)
pm2 monit
# 显示当前应用程序所有信息
pm2 show appName
启动程序
# 进入项目目录后
# 如果是 express 项目,实际启动文件是 `./bin/www`
# 启动2个进程,两个进程之间会自动进行负载均衡,并且监听文件变化
pm2 start ./bin/www --watch -i 2
参数说明:
- --watch 监听文件变化,有变化就会自动重启
- -i 启用多少个实例,用于负载均衡的,可设置为 -i 0 或者 -i max 来根据设备的核数开启实例数目
- -x 用 fork 模式启动
- -n 设置应用名称,方便查看该应用
- -o 设置标准日志文件输出路径
- -e 错误日志文件输出路径
重启程序
# 重启所有程序
pm2 restart all
# 重启当前的程序
pm2 restart app.js
停止程序
# 通过 pm2 list 查看appName 或者 appId
pm2 stop appName | appId
# 停止所有
pm2 stop all
删除程序
# 删除所有程序
pm2 delete all
# 删除当前的程序
pm2 delete appName | appId
查看日志
# 查看所有日志
pm2 logs
# 查看当前程序日志
pm2 logs appName
pm2 配置文件
上面提到了多种方式来启动程序,以及 pm2 的各种配置命令,但是 pm2 也支持以配置文件的方式来启动程序,这也是我比较推荐的方法。
在项目根目录新建一个 processes.json 文件:
{
"apps": [
{
"name": "api-fay", // 名称
"cwd": "./", // 根目录
"script": "./bin/www", // 启动文件
"log_date_format": "YYYY-MM-DD HH:mm Z", // 日期格式
"error_file": "./logs/node-app.stderr.log", // 错误输出日志
"out_file": "./logs/node-app.stdout.log", // 日志
"pid_file": "pids/node-geo-api.pid", // 自定义应用程序的 pid 文件
"instances": 4, // 进程数量
"min_uptime": "200s", // 最小运行时间,如果程序在200s内退出,则认为程序异常退出,此时触发重启max_restarts设置数量
"max_restarts": 10, // 设置应用程序异常退出重启的次数,默认15次
"max_memory_restart": "10M", // 指定超过使用内存上限后自动重启
"cron_restart": "1 0 * * *", // 定时重启,仅在 cluster 模式有效, [minute] [hour] [day] [month] [day of week]
//"watch": true, // 是否启用监控模式,默认是 false。如果为 true,当程序变动时,自动重载,也可以设置为要监控的文件
"watch":[ // 需要监控的目录
"bin",
"util",
"configs",
"public",
"routes",
"views"
],
"merge_logs": true,
"exec_interpreter": "node", // 应用程序的脚本类型,默认是 Node
"exec_mode": "cluster", // 应用程序启动模式,这里设置的是 cluster(集群),默认是 fork
"autorestart": true, // 启用/禁用应用程序崩溃或退出时自动重启
"vizion": false // 启用/禁用 vizion 特性(版本控制)
}
]
}
然后在 package.json 的 script 中增加一个命令:
"pm2": "pm2 start processes.json"
最后执行以下命令启动程序即可:
npm run pm2
然后放心大胆的关闭你的终端,pm2 会自动帮你守护 Node 进程,而不用担心服务挂掉了。
相关推荐
-
PHP8种变量类型的详细讲解2025-02-22 00:32:24
-
php+apache 和 php+nginx的区别2025-02-22 00:21:27
-
PHP:与workerman结合实现定时任务2025-02-22 00:15:57
-
Nginx的Rewrite规则与实例2025-02-22 00:15:39
-
MySql中身份证字段的简单脱敏介绍2025-02-22 00:15:36