nodejs 如何实现自动化部署?

news2024/11/29 22:32:02

什么是自动化部署

我接触到的自动化部署概念最早是在 Vercel 上提供的,Vercel 可以提供和 github 联动的功能,通过和你自己的 github 上的某个库建立‘链接’,当你 commitgithub 远程库时就可以自动部署,Vercel 会帮你完成以下操作(例子为一个 Webpack 项目,仅限 Web 前端,如有遗漏望补充)

1.Webpack 打包(默认是项目 package.json 的打包命令)
2.打包文件迁移到 Vercel 的服务器上(dist 目录下的文件)
3.部署网站(Vercel 使用的 Nginx 还是 Apache 我就不知道了,应该是用的 Nginx

另一个自动化部署概念是在实习时接触的,公司称之为流水线,它的作用和 Vercel 差不多,不过会多了两个步骤

1.ESLint 校验代码
2.重新安装依赖
3.Webpack 打包(默认是项目 package.json 的打包命令)
4.打包文件迁移到 Vercel 的服务器上(dist 目录下的文件)
5.部署网站(Vercel 使用的 Nginx 还是 Apache 我就不知道了,应该是用的 Nginx

现在自动化部署的概念炒的火热,主要是它通常还可以和 Serverless 绑定在一起,Serverless 意思是无服务器,其实就是托管应用程序到 Serverless 服务提供商的服务器上,像一些小微公司可以直接托管网站、小程序,完全不用买服务器(为啥不买服务器,因为 Serverless 便宜呀)

Serverless、自动化部署和它们的可视化界面就不多介绍了,但我要说腾讯云在这方面做的很烂,相反 AzureVercel 做的就很好

普通部署

说完了自动化部署那么我们平常的普通部署是怎么做的呢?以一个 nodejs 的普通接口为例(基于 express-generator 生成的项目)

# npm v5.2.0 以上版本
npx express --no-view --git
git init
npm install 

执行上面的命令后得到下面的目录结构

├── .git/
├── bin/
├── node_modules/
├── public/
├── routes/
├── .gitignore
├── app.js
├── package-lock.json
└── package.json 

1.第一步,在宝塔安装 pm2 如果你没有的话(pm2 会自动安装 nodejsnpm

2.第二步,在服务器找到一个地方放你的文件,这里项目比较小,我就直接丢上去了(一般使用 zip 压缩文件,或者在服务器上重新执行 npm install

3.第三步,在你的 PM2 面板里面添加项目

4.第四步,提交查看效果,是否符合本地运行预期

后续重新更新部署怎么办?很简单,将更新的文件覆盖掉原文件,在 PM2 重启一下就行了

但是如果我想本地 git 提交代码到远程库的时候能够顺便部署行不行呢?看下面的操作

自动化部署

本篇文章实现的自动化部署是基于 githubWebhooks 和宝塔的 WebHook 实现

那如何将上面的普通部署改成这个自动化部署呢?

1.第一步,在 github 上创建对应的库(反正又不要钱,随便创)

库链接 - pandoralink/auto-deploy

2.第二步,在服务器拉取项目并在在 PM2 添加项目(同普通部署)并查看 id 信息

cd /www/temp
git clone git@github.com:pandoralink/auto-deploy.git
cd auto-deploy
npm install 
# 查看 Linux 的 PM2 项目 id 信息
pm2 list 

id 信息如下图

Linux 操作 git 添加公钥私钥到远程仓库(github/gitee)可以参考 服务器上的 Git - 生成 SSH 公钥 和 远程仓库 - 远程仓库

3.第三步,安装宝塔 WebHook 插件

4.第四步,添加宝塔 WebHook 规则

5.第五步,获取宝塔 WebHook URL

6.第六步,配置 githubWebHooks

注意content-type 需要选择 application/json,否则 github 请求此 URL 时,宝塔会返回 403 错误

配置结果如图

测试修改一下 public/index.html 的内容,并 pushgithub 远程仓库

成功修改并部署成功,结果如下

总结

相比于 Vercel 还是我实习公司的流水线,文章中实现的自动化部署还是过于简陋,成熟的自动化部署拥有可视化界面,完善的日志,部署进度条,这些都是需要很多努力和经验去实现的,最后给出自动化部署的流程图

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾龙健康冲刺A股上市:计划募资10亿元,彭学文家族色彩浓厚

近日,广州腾龙健康实业股份有限公司(下称“腾龙健康”)预披露招股书,准备在深圳证券交易所主板上市。 本次冲刺上市,腾龙健康计划募资10.13亿元,其中4.09亿元用于水疗按摩池配件生产基地升级项目&#xff0…

数据可视化做出的个人年终总结报告,高颜值更高更具说服力

年终总结与个人业绩、晋升、加薪、离职或留任密切相关。聪明人利用年终报告来总结自己的成就和获得资源,领导者也可以从年终报告看出员工的成长和变化。例如我用可视化互动平台,智能分析做出的公司年终总结报告,高颜值高说服力,领…

Java异常的分类和注意点

异常体系结构 Error与Exception Error是程序无法处理的错误,它是由JVM产生和抛出的,比如OutOfMemoryError、ThreadDeath等。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。 Exception是程序本身可以处理的异常…

国内外BI数据分析工具做报表有多大区别?

有什么样的土壤就会早就什么样的产品。国内外企业对报表的不同需求导致了国内外BI数据分析工具做表格时的巨大差异,这也是很多时候国外BI数据分析工具在中国水土不服,遭遇口碑体验两极化的一大原因。下面就来简单看看国内外BI数据分析工具做表格时的不同…

【前端】Vue项目:旅游App-(10)city:以indexBar的形式显示数据

文章目录目标过程与代码分析数据并展示封装到一个组件添加indexBar样式修改优化tab栏的切换效果总代码修改或新增的文件common.csscity.vuecurrentGroupCity.vuemain.js目标 上一篇显示了服务器中的数据:【前端】Vue项目:旅游App-(9&#xf…

(九)devops持续集成开发——jenkins流水线发布一个docker版的前端vue项目

前言 本节内容主要介绍如何使用jenkins的流水线发布一个docker版的前端项目。关于本节内容中使用到的jenkins的组件,请参考往期博客内容,自行安装。我们使用NodeJS完成前端项目的编译安装,使用ssh组件完成编译后工程的传输,以及d…

Allegro如何快速复制铜皮到其它层面的两种方法详细操作指导

Allegro如何快速复制铜皮到其它层面的两种方法详细操作指导 在做PCB设计的时候,通常需要复制一个做好的铜皮到其它层面,如下图 需要把L3层的铜皮复制到其它的内层 Allegro支持快速将铜皮拷贝到其它层,下面介绍两种方法,具体操作如下 方法一 选择Edit

快速生成100万条数据并存入mysql数据库(1):游戏人物数据

最近正在一直苦恼如果去获取更多的数据以用来进行后期的查询和进行测试,发现了Navicat这个不错的宝藏,他可以一下子根据你数据库里面创建的各种各样的字段和约束创建出各种各样你自己想要的大量数据,当然这些数据非真实数据而是虚拟数据&…

Swin Transformer原理详解篇

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊往期回顾:CV攻城狮入门VIT(vision transformer)之旅——近年超火的Transformer你再不了解就晚了! CV攻城狮入门VIT(vision transformer)之旅——VIT原…

Nacos多级服务存储模型, NacosRule负载均衡规则入门

👳我亲爱的各位大佬们好😘😘😘 ♨️本篇文章记录的为 NacosRule负载均衡规则 相关内容,适合在学Java的小白,帮助新手快速上手,也适合复习中,面试中的大佬🙉🙉🙉。 ♨️如…

【毕设必备】Python制作GUI学生管理系统,这把直接稳赢

前言 最近有个朋友说,能不能让我搞个学术上管理系统出来,想自己用用,好朋友嘛,那就搞个给他用用咯 之前还有个小朋友说,想弄个出来发给老师,让老师表扬一下自己哈哈哈 话说,这个还是可以做毕…

基于微信小程序的高校毕业论文管理系统小程序

文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器…

深入剖析B端产品权限设计-功能权限设计篇

权限设计是B端产品永远绕不开的一个课题,良好的产品权限设计架构是支撑企业复杂业务的基础与关键。接下来会分两篇文章剖析产品权限管理,一篇分享功能权限管理,一篇分享数据权限管理。一、什么是权限管理权限管理,一般指根据系统设…

1.9第三周星期一

LAMP环境搭建 1. 下载 yum install gcc gcc-c cmake ncurses ncurses-devel bison wget openssl-devel -y rpm -qa | grep mysql rpm -qa| grep mariadb yum install gcc gcc-c cmake ncurses ncurses-devel bison wget openssl-devel -y 2.建立mysql 组&#xff0c;<--新…

Linux常用命令与常见操作:重启服务器

Linux系统运维经验 Xshell prompt与Linux 【Linux】【CentOS】xshell连接Linux虚拟机 Linux linux常用命令 常见操作 升级补丁后重启服务器 cd /opt/zc/ nohup ./startup-linux.sh &有36、37两台服务器&#xff0c;37直接执行上面2条语句即可重启成功。 36这台服务器…

【计算机网络】网络基础

目录前言一、计算机网络发展二、初识“协议”1. 协议的概念2. 协议分层三、OSI七层模型四、TCP/IP五层(四层)模型五、网络传输基本流程1. 网络传输流程图2.数据包封装和分用六、网络中的地址管理1. IP地址2. MAC地址前言 本文是博主首次学习网络知识后进行的总结&#xff0c;文…

毫米波雷达「战火」升级

车载毫米波雷达市场的「战火」&#xff0c;也在快速蔓延到行业上游。 比如&#xff0c;雷达SoC&#xff08;新一代RF CMOS&#xff09;集成化趋势。这意味着&#xff0c;毫米波雷达芯片方案商一次性集成射频前端、雷达信号处理基带和微处理器以及其他元器件&#xff08;包括电源…

文件IO操作开发笔记(二):使用Cpp的ofstream对磁盘文件存储进行性能测试以及测试工具

文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/128626548 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

Docker | 深度学习中的docker看这一篇就够啦

目录 1.了解Docker 1.1.为什么要用docker? 1.2.可以用docker做什么? 1.3.docker 框架 2.Docker 的基本使用 3.实例 :VS code远程连接服务器上的docker环境 3-1:环境框架可视化及ssh连接&#xff0c;搭建pytorch深度学习环境 3-2:搭建一个新的容器pytorch深度学习环境…

北大硕士LeetCode算法专题课-数组相关问题

算法专题&#xff1a; 北大硕士LeetCode算法专题课---算法复杂度介绍_骨灰级收藏家的博客-CSDN博客 北大硕士LeetCode算法专题课-基础算法之排序_骨灰级收藏家的博客-CSDN博客 北大硕士LeetCode算法专题课-基础算法查找_骨灰级收藏家的博客-CSDN博客 数组相关问题 双指针 …