一、应用场景

在 node.js 我的项目部署公布时,常常用 SSH 别离连贯多台服务器,对每一台服务器都要执行 git pull 最新代码,编译启动利用的操作,操作琐碎且容易遗记其中某些操作。pm2 能够很好解决这个问题,只需一个命令就能够主动实现,还能实时监控、查看 node.js 利用的运行状况。


二、解决方案
第一步:服务器环境配置
  • 装置 node.js :不会,看这里!
  • 装置 pm2 :npm install pm2@latest -gyarn global add pm2
  • 装置 git :不会,看这里
  • 配置 SSH,使得服务器能够免密运行 git clone,不会,看这里!
第二步:开发机器环境配置
  • 装置 node.js :不会,看这里!
  • 装置 pm2 :npm install pm2@latest -gyarn global add pm2
  • 配置SSH,免密登录服务器,不会,看这里!
第三步:node.js 我的项目操作步骤配置
  1. 关上终端,切换到 node.js 我的项目根目录,执行 pm2 ecosystem , 生成配置文件 ,如下:

    // ecosystem.config.jsmodule.exports = {    apps: [{        script: 'index.js',        watch: '.',        env_production: {            NODE_ENV: "production"        },        env_development: {            NODE_ENV: "development"        }    }],          // Deployment Configuration    deploy: {        production: {            user: 'SSH_USERNAME',            host: 'SSH_HOSTMACHINE',            ref: 'origin/master',            repo: 'GIT_REPOSITORY',            path: 'DESTINATION_PATH',            'pre-deploy-local': '',            'post-deploy': 'npm install && pm2 reload ecosystem.config.js --env production',            'pre-setup': ''        }    }}
  2. 批改下面配置文件,为正确服务器、git相干信息;
  3. ecosystem.config.js 所在目录执行上面命令,初始化 node.js 我的项目 到服务器

    pm2 deploy production setup// pm2 连贯服务器,告诉其 git clone 代码等初始化工作。
  4. 启动 或 更新 node.js 我的项目:

    pm2 deploy production --force;// 让服务器 git pull 代码,编译后启动利用// --force 的作用:如果服务器本地代码有改变,那么放弃改变,用git仓库最新代码更新我的项目。

三、deploy 命令详解
1、命令格局
pm2 deploy <configuration_file> <environment> <command>

2、configuration_file

如果配置文件名是:ecosystem.config.js 或者 pm2.config.js ,下面命令能够不必写 <configuration_file>

pm2 deploy production setup// 此命令就是默认寻找 ecosystem.config.js  或  pm2.config.js  配置文件执行

3、environment

在配置文件中设定 env_productionenv_development ,就能够在执行命令时调用,把环境变量传递给node.js 我的项目:pm2 deploy production --force;

// ecosystem.config.jsmodule.exports = {    apps: [{        script: 'index.js',        watch: '.',        env_production: {            NODE_ENV: "production"        },        env_development: {            NODE_ENV: "development"        }    }],}

4、command
setup                    run remote setup commandsupdate                   update deploy to the latest releaserevert[n]               revert to[n]th last deployment or 1curr[ent]                output current release commitprev[ious]               output previous release commitexec | run < cmd >         execute the given < cmd >list                     list previous deploy commits[ref]                    deploy to[ref], the "ref" setting, or latest tag

四、其余重要事项
1、exec能够让所有服务器执行一次命令
pm2 deploy production exec "pm2 reload all"
2、回滚到上一个部署版本
pm2 deploy production revert 1
3、部署的几个工夫点
"pre-setup"         : "在setup执行前 运行的 命令或脚本","post-setup"        : "在代码clone实现后 执行的命令或脚本","pre-deploy"        : "pm2 startOrRestart ecosystem.json --env production","post-deploy"       : "pm2 startOrRestart ecosystem.json --env production","pre-deploy-local"  : "echo 'This is a local executed command'"
4、操作多台服务器,只需批改host
"host" : ["212.83.163.1", "212.83.163.2", "212.83.163.3"],

五、报错
1、报错信息
npm: command not foundpost-deploy hook failedDeploy failed
2、解决方案

pm2 部署时,呈现下面谬误,但运行 npm -v 都是失常的,起因是 pm2 的配置文件,依照上面步骤即可解决。

# 1、关上终端$ cd ~$ nano .bashrc# 2、把上面内容正文掉#If not running interactively, don 't do anythingcase $ - in*i * );;*) return;;esac# 3、更新环境变量$ source .bashrc

六、参考文档
  • PM2一键搞定,多台服务器同时部署公布Node.js我的项目!