在 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 项目根目录,执行 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
2、configuration_file
如果配置文件名是:ecosystem.config.js 或者 pm2.config.js ,上面命令可以不用写
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 13、部署的几个时间点
"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 failed2、解决方案
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项目!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)