一、应用场景
在 node.js 我的项目部署公布时,常常用 SSH 别离连贯多台服务器,对每一台服务器都要执行 git pull 最新代码,编译启动利用的操作,操作琐碎且容易遗记其中某些操作。pm2 能够很好解决这个问题,只需一个命令就能够主动实现,还能实时监控、查看 node.js 利用的运行状况。
二、解决方案
第一步:服务器环境配置
- 装置 node.js:不会,看这里!
- 装置 pm2:
npm install pm2@latest -g
或yarn global add pm2
- 装置 git:不会,看这里
- 配置 SSH,使得服务器能够免密运行
git clone
,不会,看这里!
第二步:开发机器环境配置
- 装置 node.js:不会,看这里!
- 装置 pm2:
npm install pm2@latest -g
或yarn global add pm2
- 配置 SSH,免密登录服务器,不会,看这里!
第三步:node.js 我的项目操作步骤配置
-
关上终端,切换到 node.js 我的项目根目录,执行
pm2 ecosystem
,生成配置文件,如下:// ecosystem.config.js module.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':'' } } }
- 批改下面配置文件,为正确服务器、git 相干信息;
-
在
ecosystem.config.js
所在目录执行上面命令,初始化 node.js 我的项目 到服务器pm2 deploy production setup // pm2 连贯服务器,告诉其 git clone 代码等初始化工作。
-
启动 或 更新 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_production
和 env_development
,就能够在执行命令时调用,把环境变量传递给 node.js 我的项目:pm2 deploy production --force;
// ecosystem.config.js
module.exports = {
apps: [{
script: 'index.js',
watch: '.',
env_production: {NODE_ENV: "production"},
env_development: {NODE_ENV: "development"}
}],
}
4、command
setup run remote setup commands
update update deploy to the latest release
revert[n] revert to[n]th last deployment or 1
curr[ent] output current release commit
prev[ious] output previous release commit
exec | 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 found
post-deploy hook failed
Deploy failed
2、解决方案
pm2 部署时,呈现下面谬误,但运行 npm -v
都是失常的,起因是 pm2 的配置文件,依照上面步骤即可解决。
# 1、关上终端
$ cd ~
$ nano .bashrc
# 2、把上面内容正文掉
#If not running interactively, don 't do anything
case $ - in
*
i * );;
*) return;;
esac
# 3、更新环境变量
$ source .bashrc
六、参考文档
- PM2 一键搞定,多台服务器同时部署公布 Node.js 我的项目!