当前位置:网站首页>PM2之自动部署
PM2之自动部署
2022-08-11 11:32:00 【choukin】
人生是一个漫长的过程,每个人的生命中都会发生很多的事情,在数不清的变数之中,一个不变的主题是:日子还要继续过。
———《我的二本学生》
部署应用
PM2 具有一个简单但是功能强大的部署功能。可以在生产环境中部署和更新应用。当你想要一次性在服务器上部署一个或多个应用时非常有用。
> pm2 deploy <configuration_file> <evironment> <command>
Commands:
setup 执行远程安装命令
update 更新部署最新版本
revert [n] 回滚到最近第n次/上一次
curr[ent] 输出当前版本的提交信息
prev[ious] 输出上一八佰伴的提交信息
exec|run <cmd> 执行指定的命令
list 列出上一版本的的部署提交
ref】 部署配置的分支或者最新的tag
部署文件配置
在应用配置文件中添加deplay 属性来配置部署功能:
# ecosystem.config.js
module.exports = {
apps:[{
script:'api.js'
},{
script:'worker.js'
}],
deploy:{
production:{
user:"root",
host:[],
ref:"origin/master",
repo:"[email protected]:Username/repository.git",
path:"/var/www/my-repository",
"post-deploy" : "npm install",
}
}
}
注意:建议本地目录的应用配置文件夹也叫 ecosystem.config 或 pm2.config.js 这样就不用在每个命令后面指定配置文件名称。
配置安装到远程服务器
操作前请在服务器上确认:
服务器上已经安装了 pm2 服务器有权限拉取配置git仓库的权限
配置好后可以在本机通过命令在服务器端对应用进行配置:
pm2 deploy production setup
部署应用
服务器端配置好应用后就可以进行部署了:
pm2 deploy production
回滚到上一个版本
可以使用 revert 回滚到之前的版本
pm2 deploy production revert 1
新功能上线更新部署应用
使用 update 来更新应用
pm2 deploy production update
在每个服务器上执行命令
可以使用 exec 选项在服务器端执行一次性的命令
pm2 deploy production exec "pm2 reload all"
详情
部署的生命周期
使用PM2 进行部署时,可以设置安装和部署前后的命令:
"pre-setup":"echo '安装进程开始前的命令或脚本路径'",
"post-setup":"echo '拉取代码后的命令或脚本路径'",
"pre-deploy":"pm2 startOrRestart ecosystem.json --env production ",
"post-deploy":"pm2 startOrRestart ecosystem.json --env production",
"pre-deploy-local":"echo '这是在本地电脑执行的命令'"
多个服务器部署
要同时部署到多个服务器上,只需要在host中配置host的数组
"host" : ["212.83.163.1", "212.83.163.2", "212.83.163.3"],
指定 SSH keys
添加key属性来指定 public key 的路径,例如:
production:{
"key":"/path/to/some.pem" // 验权公钥路径
"user" : "node", // 登录的用户名
"host" : "212.83.163.1", // host
"ref" : "origin/master",
"repo" : "[email protected]:repo.git",
"path" : "/var/www/production",
"post-deploy" : "pm2 startOrRestart ecosystem.json --env production"
}
故障排除
ssh 拉取代码异常
多数情况是因为pm2没有拉取仓库代码的权限。你需要在每一步验证密钥是否可用;
第一步:如果确定密钥正确,尝试在服务器上执行 git clone your_repo.git.如果成功,进入第二步,如果失败,请确认git账户和服务器的密钥是正确的。
第二步:使用ssh-copy-id 复制默认的身份key,默认名称是id_ras ,如果不是默认名称,使用下列命令:
ssh-copy-id -i path/to/my/key [email protected]
这个操作会把你的公钥复制到服务器的 ~/.ssh/authorized_keys 文件中
第三步: 如果是下面的错误信息
--> Deploying to production environment
--> on host mysite.com
○ hook pre-setup
○ running setup
○ cloning [email protected]:user/repo.git
Cloning into '/var/www/app/source'...
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and that the repository exists.
**Failed to clone**
Deploy failed
你需要新建一个ssh配置文件,来确保每个仓库使用对应的ssh密钥:
# ~/.ssh/config
Host alias
HostName myserver.com
User username
IdentityFile ~/.ssh/mykey
# Usage: `ssh alias`
# Alternative: `ssh -i ~/.ssh/mykey [email protected]`
Host deployment
HostName github.com
User username
IdentityFile ~/.ssh/github_rsa
# Usage:
# [email protected]:username/anyrepo.git
# This is for cloning any repo that uses that IdentityFile. This is a good way to make sure that your remote cloning commands use the appropriate key
边栏推荐
猜你喜欢
随机推荐
【2022】【论文笔记】基于激光直写氧化石墨烯纸的超薄THz偏转——
Small target stunt | Complete the small target detection upgrade of Yolov5 in the easiest way!
什么是架构基本概念和架构本质
通过热透镜聚焦不同类型的高斯模式
MySQL之JDBC编程增删改查
七、一起学习Lua 函数
参与openEuler社区不到1年,我成为了Maintainer……
图像识别(八)| 还对全连接层迷迷糊糊?背会一首诗就行了
黑马瑞吉外卖之分类信息的分页查询
Typora表格中常用操作
在这个数字化的时代,如何做好用户体验与应用性能管理
【黑马早报】抖音否认与头部主播签对赌协议;阿迪达斯CEO承认在中国犯了错;网易云社交App心遇被指涉黄;联通董事长称5G资费比点外卖还便宜
PL4807-ADJ线性锂电池可调充电芯片
BAT "exclusive" Internet giant Android senior engineer interview questions: 174 questions allow you to do the interview
Flutter 教程之 Flutter 中的 HMS 定位工具包
Web3 Entrepreneur's Guide: How to Build a Decentralized Community for Your Product?
MySQL --- 存储引擎
巧用自定义函数,文本控件秒变高速缓存
【医学统计学】二项分布
小目标绝技 | 用最简单的方式完成Yolov5的小目标检测升级!









