PM2 使用入门

PM2 使用入门

说明

PM2 是 node 进程管理工具,包括守护进程、监控、日志等一套完整的功能

安装

npm install pm2 -g

命令

首先要有一个可以启动的 node 文件

const http = require('http');

http
.createServer(function(req, res) {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('this is test vi');
})
.listen(8081);

console.log('server runing on http://47.xx.139.xx:8081');

1. 启动

# 简单启动 默认会生成一个 名为 app 的应用运行在对应端口8081
pm2 start app.js

# 启动的同时监听文件变化,发生改变后自动重启 (--watch)
pm2 start app.js --watch

# 负载均衡启动多个实例 (-i num) num 可以是指定数字或者是 max 表示根据当前机器内核数确定
pm2 start app.js -i max --watch 

# 自定义应用名称 (-n xxx)
pm2 start app.js -i max --watch -n app-2 # 开启 App Name 为 app-2 的应用

# 定义标准输出日志路径和错误日志输出路径
pm2 start app.js -o ./logs/out.log -e ./logs/error.log

2. 停止

# appName 和 appId 可以通过 pm2 list 查看
pm2 stop appName|appId

# 停止所有应用
pm2 stop all

3. 重启

pm2 restart app.js # 

4. 删除

# 停止后可以通过 restart 重启,删除后不能重启 
pm2 delete appName|appId

5. 查看当前进程状态

pm2 list

6. 查看进程详细信息

pm2 show appName|appId

7. 查看日志

pm2 logs appName|appId

8. 进入性能面板查看 CPU 内存等占用

pm2 monit

配置进程文件

# 根目录下编写配置文件
module.exports = {
    apps: [ // apps 中可以配置多个应用
        {
            name: 'express-demo', // 应用名称
            script: 'app.js', // 启动脚本
            cwd: './', // 当前工作路径
            watch: true, // 监控变化的目录
            exec_mode: 'cluster', // 集群模式
            instances: 'max', // 实例数量
            max_memory_restart: '40M', // 如果超过指定内存就重启
            ignore_watch: [ // 从监控目录中排除
                'node_modules',
                'logs'
            ],
            error_file: './logs/app-err.log', // 错误日志路径
            out_fileL: './logs/app-out.log', // 普通日志路径
            env: { // 默认环境变量
                NODE_ENV: 'production' // 环境变量
            },
            env_dev: { // 命令行可以指定当前环境变量为dev
                NODE_ENV: 'development'
            },
            env_prod: {
                NODE_ENV: 'production'
            }
        }
    ],
    // deploy: {} 部署配置
}
# 命令行启动即可
pm2 start ecosystem.config.js --env dev

更多配置官网查看

pm2 实现 node 线上部署

步骤:通过本地 pm2 工具在本地命令行登录服务器,然后通知服务器从 git 仓库将代码clone 到服务器部署到相应文件夹,然后等待进一步操作

1. 本地环境配置

  1. 确保本地安装 git、node、pm2
  2. 去报本地有一个可以运行的 nodeJs 应用(本例是一个 express 服务)
  3. 有一个第三方 git 平台托管代码 地址: [email protected]:mjzhang/node-website.git

2. 服务器生成 ssh 公钥并加入 git 平台

# server
# 依次执行
ssh-keygen -t rsa -b 4096 -C "[email protected]" 一路回车

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/id_rsa

cat ~/.ssh/id_rsa.pub # 显示公钥

# 将公钥复制到第三方 git 平台

3. nodeJs 项目根目录编写 pm2 配置文件 ecosystem.config.js

// local
module.exports = {
    apps: [
        {
            name: 'express-demo', // 应用名称
            script: 'app.js', // 启动脚本
            cwd: './', // 当前工作路径
            watch: true, // 监控变化的目录
            exec_mode: 'cluster', // 集群模式
            instances: 'max', // 实例数量
            max_memory_restart: '40M', // 如果超过指定内存就重启
            ignore_watch: [ // 从监控目录中排除
                'node_modules',
                'logs'
            ],
            error_file: './logs/app-err.log', // 错误日志路径
            out_fileL: './logs/app-out.log', // 普通日志路径
            env: { // 默认环境变量
                NODE_ENV: 'production' // 环境变量
            },
            env_dev: { // 命令行可以指定当前环境变量为dev
                NODE_ENV: 'development'
            },
            env_prod: {
                NODE_ENV: 'production'
            }
        }
    ],
    deploy: { // 部署配置
        prod: { // 对应环境名称
            user: 'mjz',
            host: ['47.94.139.47'], // 要部署的服务器IP
            port: '39999', // 端口号
            path: '/www/website', // 克隆到服务器上的路径
            repo: '[email protected]:mjzhang/node-website.git', // 仓库地址
            ref: 'origin/master', // 代码仓库的分支
            ssh_options: 'StrictHostKeyChecking=no', // 取消 key 校验
            'post-deploy': 'npm install && pm2 startOrRestart ecosystem.config.js --env prod'
            env: {
                NODE_ENV: 'production'
            }
        }
    }
}

4. 提交项目到 git 平台

# local
git add .
git commit -m 'xxx'
git push origin master

5. 服务器中创建接收项目文件的文件夹

# server
# 创建 /www/website
cd /www
sudo chmod 777 website # 修改文件夹权限为可读可写,否则下一步会报错--没有修改权限

6. 本地运行命令实现部署

pm2 deploy ecosystem.config.js prod setup 

部署成功后 /www/website 多了一下三个文件夹

  • current 文件夹,当前运行文件夹
  • source 源代码
  • shared 日志文件

配置文件 ecosystem.config.js 中的 'post-deploy': 'npm install && pm2 startOrRestart ecosystem.config.js --env prod' 可以使得代码克隆到服务器后就运行

7. 日常维护流程

  1. 更改代码
  2. 提交到 git 版本库 git add . && git commit -m 'xxx' && git push origin master
  3. pm2 重新发布 pm2 deploy ecosystem.config.js prod
  4. 服务器实时查看日志 pm2 monit

你可能感兴趣的:(服务器部署上线,Node)