nodejs 如何实现自动化部署?

简介: 什么是自动化部署 我接触到的自动化部署概念最早是在 Vercel 上提供的,Vercel 可以提供和 github 上的某个库建立‘链接’,当你 commit 到 github 远程库时就可以自动部署,Vercel 会帮你完成操作

什么是自动化部署

我接触到的自动化部署概念最早是在 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

IMG

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

IMG

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

IMG

IMG

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

IMG

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

IMG

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

自动化部署

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

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

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

库链接 - pandoralink/auto-deploy

IMG

  1. 第二步,在服务器拉取项目并在在 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 信息如下图

IMG

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

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

IMG

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

IMG

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

IMG

  1. 第六步,配置 githubWebHooks

IMG

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

配置结果如图

IMG

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

IMG

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

IMG

总结

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

IMG

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
9月前
|
机器学习/深度学习 Kubernetes 监控
Kubernetes 节点故障自愈方案:结合 Node Problem Detector 与自动化脚本
本文深入探讨了Kubernetes节点故障自愈方案,结合Node Problem Detector(NPD)与自动化脚本,提供技术细节、完整代码示例及实战验证。文章分析了硬件、系统和内核层面的典型故障场景,指出现有监控体系的局限性,并提出基于NPD的实时事件捕获与自动化诊断树的改进方案。通过深度集成NPD、设计自动化修复引擎以及展示内核死锁恢复的实战案例,文章详细说明了自愈流程的实现步骤与性能优势。此外,还提供了生产环境部署指南、高可用架构设计及安全防护措施,并展望了机器学习增强故障预测和混沌工程验证的进阶优化方向。全文约1.2万字,适合希望提升Kubernetes集群稳定性的技术人员阅读。
623 1
|
数据采集 存储 监控
实现自动化数据抓取:使用Node.js操控鼠标点击与位置坐标
本文介绍了如何使用Node.js和Puppeteer实现自动化数据抓取,特别是针对新闻网站“澎湃新闻”。通过设置代理IP、User-Agent和Cookie,提高爬虫的效率和隐蔽性,避免被网站封锁。代码示例展示了如何模拟鼠标点击、键盘输入等操作,抓取并整理新闻数据,适用于需要规避IP限制和突破频率限制的场景。
675 10
|
运维 JavaScript 安全
自动化运维:使用Ansible简化日常任务深入理解Node.js事件循环和异步编程
【8月更文挑战第27天】在快节奏的技术环境中,自动化不再是奢侈品,而是必需品。本文将引导你通过Ansible实现自动化运维,从基础到高级应用,解锁高效管理服务器群的秘诀,让你的IT操作更加流畅和高效。
|
前端开发 jenkins 持续交付
不是Jenkins玩不起,而是脚本更有性价比,在1Panel中使用Node搭建前端自动化
不是Jenkins玩不起,而是脚本更有性价比,在1Panel中使用Node搭建前端自动化
1311 2
|
数据采集 存储 JavaScript
深入Node.js:实现网易云音乐数据自动化抓取
深入Node.js:实现网易云音乐数据自动化抓取
|
JavaScript 持续交付 开发工具
Git自动化利器:使用Node.js脚本定制化提交消息处理
Git自动化利器:使用Node.js脚本定制化提交消息处理
336 0
|
数据采集 JavaScript 前端开发
前端工程师用Node.js + Appium实现APP自动化
网上全是python + Appium的教程,Appium也支持Node.js开发,使用Node.js + Appium实现了自动化爬虫功能。
591 0
前端工程师用Node.js + Appium实现APP自动化
|
数据采集 Web App开发 JavaScript
Node.js躬行记(25)——Web自动化测试
Node.js躬行记(25)——Web自动化测试
Node.js躬行记(25)——Web自动化测试
|
存储 Web App开发 JavaScript
Node.js躬行记(28)——Cypress自动化测试实践
Node.js躬行记(28)——Cypress自动化测试实践