在 node.js 项目部署发布时,经常用 SSH 分别连接多台服务器,对每一台服务器都要执行 git pull 最新代码,编译启动应用的操作,操作琐碎且容易忘记其中某些操作。pm2 可以很好解决这个问题,只需一个命令就可以自动完成,还能实时监控、查看 node.js 应用的运行情况。
npm install pm2@latest -g
或 yarn global add pm2
git clone
,不会,看这里!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': ''
}
}
}
ecosystem.config.js
所在目录执行下面命令,初始化 node.js 项目 到服务器pm2 deploy production setup
// pm2 连接服务器,通知其 git clone 代码等初始化工作。
pm2 deploy production --force;
// 让服务器 git pull 代码,编译后启动应用
// --force 的作用:如果服务器本地代码有改动,那么放弃改动,用git仓库最新代码更新项目。
pm2 deploy <configuration_file> <environment> <command>
如果配置文件名是:ecosystem.config.js
或者 pm2.config.js
,上面命令可以不用写 <configuration_file>
。
pm2 deploy production setup
// 此命令就是默认寻找 ecosystem.config.js 或 pm2.config.js 配置文件执行
在配置文件中设定 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"
}
}],
}
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
pm2 deploy production exec "pm2 reload all"
pm2 deploy production revert 1
"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'"
"host" : ["212.83.163.1", "212.83.163.2", "212.83.163.3"],
npm: command not found
post-deploy hook failed
Deploy failed
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
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。