Words etch cherished moments.
OG

使用 PM2 管理 node 服务

3,194 words, 8 min read
2020/01/17 PM
231 views

#使用 PM2 管理 node 服务

#安装

          
  • 1
  • 2
  • 3
npm i pm2 -g # or yarn global add pm2

#安装koa脚手架

这里以koa为例, 安装koa脚手架

          
  • 1
npm install -g koa-generator

#创建项目

          
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
# 创建项目 koa2 project-name # 进入项目目录 cd project-name # 安装依赖 npm install

#启动一个应用

          
  • 1
  • 2
  • 3
  • 4
  • 5
pm2 start app.js # app.js 为入口文件 # 也可以通过 --name 重新定义name pm2 start app.js --name app

一个应用就启动了,怎么样,是不是很简单,你没有看错,就是这么简单,接下来我们了解下图中各字段表示什么

pm2 start app.js
pm2 start app.js
选项 解释
id 启动应用的序号
name 启动的应用命名(默认为入口文件的名字)
namespace 命名空间
version 版本号(为 package.json 中的版本号)
mode fork 模式(默认),cluster 模式
pid 进程的唯一标识号
uptime 更新实现
status 状态
cpu 该进程占用的 CPU 使用率
mem 该进程占用的物理内存和总内存的百分比
user 运行此进程的用户
watching 代码修改自动重启

#PM2 常用命令

          
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
# 查看所有pm2管理的程序 pm2 ls # 停止指定 name 的程序 pm2 stop app # 停止所有程序 pm2 stop all # 删除程序 pm2 delete app # 重启程序(会有一瞬间服务断掉) pm2 restart app # 重新加载程序(不会断掉) pm2 reload app # 查看PM2的日志 pm2 logs

#在项目中 package.json 增加脚本命令

          
  • 1
  • 2
  • 3
"script": { "pm2": "pm2 start app.js" }
          
  • 1
  • 2
  • 3
npm run pm2 # or yarn pm2

这时服务就启动了,但这样不是很友好,我们来看看修改代码或是安装npm包后的操作

  1. 本地添加 git add .
  2. 本地提交 git commit -m commit
  3. 本地推送到代码仓库 git push origin master
  4. 服务器拉取代码 git pull origin master
  5. 服务器安装 npmyarn or npm install
  6. 服务器重新启动 yarn or npm run pm2

这步骤有点多了啊,大兄弟,你需要一个使用PM2实现自动化部署

#通过配置文件配置 pm2

在项目根目录新建配置文件,有 2 种方法

          
  • 1
  • 2
  • 3
  • 4
# 第一种 通过手动创建文件 pm2 init # 第二种. 通过pm2创建,创建的文件为 ecosystem.config.js
          
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
# processes.json { "apps": [ { "name": "app", // 应用程序名称 "script": "./app.js", // 应用程序的脚本路径 "autorestart": true, // 启用/禁用应用程序崩溃或退出时自动重启 "watch": false, // 启用监控模式 "max_memory_restart": "500M", // 超出了指定的内存量重新启动。 // "instances": 1, // 应用启动实例个数,仅在cluster模式有效 "exec_mode": "fork", // 模式来启动您的应用程序,可以是 集群 或 分支,默认为fork "log_date_format": "YYYY-MM-DD HH:mm Z", // 日志文件名输出日期格式 "error_file": "./logs/app-err.log", // 自定义应用程序的错误日志文件 "out_file": "./logs/app-out.log", // 自定义应用程序日志文件 "ignore_watch": ["node_modules", "logs"], // 不用监听的文件 "env": { "NODE_ENV": "development", "PM2_SERVE_PATH": "./public" }, "env_production": { "NODE_ENV": "production" } } ], "deploy": { "production": { "user": "your hostname", "host": "your server", "ref": "origin/master", "repo": "git@github.com:name/project.git", "path": "your server project path", "post-deploy": "yarn && yarn pm2" } } }

PM2 官网文档参考

Creative Commons BY-NC 4.0
https://zhangwurui.cn/article/70
0/0comments
Guest
Start the discussion...
Be the first to comment