原创
使用 PM2 管理 node 服务
使用 PM2 管理 node 服务
安装
bash
123
npm i pm2 -g
# or
yarn global add pm2
安装koa脚手架
这里以koa为例, 安装koa脚手架
bash
1
npm install -g koa-generator
创建项目
bash
123456
# 创建项目
koa2 project-name
# 进入项目目录
cd project-name
# 安装依赖
npm install
启动一个应用
bash
12345
pm2 start app.js
# app.js 为入口文件
# 也可以通过 --name 重新定义name
pm2 start app.js --name app
一个应用就启动了,怎么样,是不是很简单,你没有看错,就是这么简单,接下来我们了解下图中各字段表示什么
| 选项 | 解释 |
|---|---|
| id | 启动应用的序号 |
| name | 启动的应用命名(默认为入口文件的名字) |
| namespace | 命名空间 |
| version | 版本号(为 package.json 中的版本号) |
| mode | fork 模式(默认),cluster 模式 |
| pid | 进程的唯一标识号 |
| uptime | 更新实现 |
| status | 状态 |
| cpu | 该进程占用的 CPU 使用率 |
| mem | 该进程占用的物理内存和总内存的百分比 |
| user | 运行此进程的用户 |
| watching | 代码修改自动重启 |
PM2 常用命令
bash
1234567891011121314151617181920
# 查看所有pm2管理的程序
pm2 ls
# 停止指定 name 的程序
pm2 stop app
# 停止所有程序
pm2 stop all
# 删除程序
pm2 delete app
# 重启程序(会有一瞬间服务断掉)
pm2 restart app
# 重新加载程序(不会断掉)
pm2 reload app
# 查看PM2的日志
pm2 logs
在项目中 package.json 增加脚本命令
JSON
123
"script": {
"pm2": "pm2 start app.js"
}
bash
123
npm run pm2
# or
yarn pm2
这时服务就启动了,但这样不是很友好,我们来看看修改代码或是安装
npm包后的操作
- 本地添加
git add . - 本地提交
git commit -m commit - 本地推送到代码仓库
git push origin master - 服务器拉取代码
git pull origin master - 服务器安装
npm包yarn or npm install - 服务器重新启动
yarn or npm run pm2
这步骤有点多了啊,大兄弟,你需要一个使用PM2实现自动化部署
通过配置文件配置 pm2
在项目根目录新建配置文件,有 2 种方法
bash
1234
# 第一种 通过手动创建文件
pm2 init
# 第二种. 通过pm2创建,创建的文件为 ecosystem.config.js
bash
12345678910111213141516171819202122232425262728293031323334353637383940414243444546
# 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"
}
}
}
期待你的捷足先登

