PM2一键搞定,多台服务器同时部署发布Node.js项目!

一、使用场景

在 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 项目操作步骤配置
1.打开终端,切换到 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': ''
        }
    }
}

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_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项目!
deployment - 官方文档

作者:LearnAnything
链接:https://www.jianshu.com/p/2e32bb16e289
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值