Linux 下如何部署 node 应用?

99人浏览   2024-04-06 13:34:46


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 进程,而不用担心服务挂掉了。


相关推荐