Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >前端部署相关知识导览

前端部署相关知识导览

原创
作者头像
永恒的财宝
修改于 2024-11-20 07:03:10
修改于 2024-11-20 07:03:10
1500
举报

文章开始之前,推荐一些别人写的很好的文章!感兴趣的也可以去读一下哦!

今日推荐:Electron以慢著称,为什么桌面QQ却选择它做架构升级?

文章链接:https://cloud.tencent.com/developer/article/2332111

最近在使用 electron 做本地资源管理器的时候,也在往优化方面思考,比如初始化加载页、多窗口的创建销毁、多窗口通信等。上文就给出了一些的优化思路。


基础部署

前端网页能被访问的前提,一个是网址对应的资源,一个是网络发现。

所以通常来讲,把 .html 等资源放到服务器上,然后使用 nginx 等工具做网络代理,即可将网址指向前端内容。

上传资源部分:
  • 在本地 npm run build,得到了 dist/* 等资源文件。
  • 若你买了个 windows 轻量服务器
  • 把资源文件 Ctrl+C 拷贝到服务器的 D://web/* 文件夹中。
  • 而若你买的其他服务器,没有可视化界面了。
  • 则需要一些 ssh 命令,比如 scp -r local_path username@ip:/usr/opt/web 等。
  • 或者 WinSCP 之类的可视化工具来进行上传。
网络发现部分:
  • 此时访问 [ip]/index.html 是访问不到的资源。
  • 你可以进行 nginx.conf 配置比如 location / { root D://web; } 后,即可访问网址则能看到内容了。
  • 也有其他方式,比如 windowsIIS 配置或 route add 命令等。

当然,你也可以不用自己的服务器,而是第三方的服务器:

  • 比如 COS 文件服务器,用管理后台或相应 SDK 去上传即可。
  • 比如托管服务,像 github pagesvercelnetlify 等也相当方便。

至于不想只是 IP 地址来访问,而是域名,则需要域名 DNS 解析即可,就是另个小课题了。


自动化上传

显然,多半情况下,网络发现配置仅配置一次即可,更需要频繁更新的是上传资源,那么自动化上传提上日程。

那么就需要两个考虑,一个是自动化程序,一个是上传时机。

上传时机方面:

上传时机主要靠的是 git hooks,比如 post-merge 之类的。

当然你说本地运行些 npm run deploy 的命令也行,但多半其实监听的也是 pre-push 之类的时机,或者比较手动的。

  • 而像 github、工蜂 之类的代码托管的平台上,也多半有进行配置 git hooks 的地方,甚至有 tag push 等时机的拓展。
  • 如果你是自建部署平台,比如 jenkinsbamboo 等各式持续集成工具,同样可以配置。
  • 至于托管服务,比如 vercelnetlify 等,其实只是隐藏了上述内容,只需要更少的配置而已。
自动化程序方面:

程序就比较简单了,通常就是 NodeJs 脚本即可,只看你想在什么环境下去走这些流程,可见下一章。

另外,除了 buildupload 之外,这个阶段你还可以干很多事,比如加版本号、统计体积、自动化测试等。


自动化环境

如果是团队合作,一个用 mac 一个用 win,一个用 nodejs18 一个用 nodejs16,或者两人的 npm global 依赖版本不一致,

那么上述过程在本地运行,就会造成结果可能不一致,不同人部署的结果就不同。

所以,需要一个自动化环境,来保证打包结果的统一。

在上传时机板块就已经涉及到了,无论是第三方平台还是自建服务,都是比较独立的环境了。

使用第三方服务器

最简单的方式就是利用各种托管平台,

比如 github actions 能自己写脚本来触发 npm run deploynode 命令,

或者 vercelnetlify 的项目配置中有个启动脚本的输入框等。

使用自有服务器

而自建部署平台,无论你用的简单 jenkins 还是什么能私有化的流水线平台,就得买个服务器了。

平台搭建完成后,去配置 git 仓库地址、配登录权限、配 git hooks 等,再写点自定义脚本即可。

还有个方式可以不使用平台,而是搞个 web hooks,去接收代码托管平台时机被触发时发过来的消息,再进行自动化部署。


分布式部署

如果你的网站访问量够大,需要分流到多台服务器,那么你可能需要分布式部署了。

扯到分布式就要先了解 dockerk8s,就要了解下容器化技术。

  • 其中 docker 可以保证不管你的服务器无论是 win 还是 linux,始终是一样的 docker 中包含的环境。
  • k8s 可以保证当你新加服务器时能自动部署,减少服务器时不会让网络发现打空。
配置容器 & 构建容器

可以简单的把使用 docker 分为两个阶段,一个 build,一个 run

比较推荐在 docker build 阶段你只放入 dist/* 打包结果文件,而非源码,这样可以让镜像更小,部署更快。

比如放的是源码,那么容器中还得有 NodeJs 软件被安装,运行容器时还有 npm install 的时间花销和 node_modules 的内存花销。

但如果是一套代码分渠道的场景,可能会使用不同的环境变量,那还是放入源码吧,在 run 阶段时就能响应一些变量的变化了。

这牵扯到 Dockerfile 的编写,按你的需求进行编写即可。

运行容器 & 调度容器

docker build 构建容器完成后,就是在集群中使用了

  • 你可以 docker push 将容器推到镜像仓库去等待被拉取,前提是需要 docker login
  • 也可以 docker save 将容器转为 tar 压缩包,去上传到 COS 等待被拉取,或上传到 k8s 集群。
  • 待集群使用时,去 docker pull,或下载然后 docker load,然后 docker run 即可。

版本

当出现线上问题又难以短期内解决时,你可能需要回滚版本,

而回退代码再重新部署还是繁琐了点,所以部署也需要版本管理。

使用了容器化技术

当然,如果是按上面的流程搭下来,你只需要处理最后 k8s 的部分即可,拉取或下载旧版本容器然后运行即可。

未使用容器化技术

但如果你的部署架构没搞容器化,那么你就需要冗余一批旧版本的打包结果了。

比如在服务器上有着 D://web-v1D://web-v2 两个目录,只需改动 nginx 等的网络发现指向即可。

至于冗余多少冗余多久,就看你的需求了,或者等到服务器内存爆了再清理也不是不行。


缓存

其实部署后的内容,大概率在短期内不会变,所以加上缓存还是蛮有必要的。

咱们分两端来看,云端和客户端:

云端缓存

云端可以搞 CDN 缓存或自建网关服务,对指向的资源进行一定的缓存和分配。

客户端缓存

而客户端主要是,一个 HTTP 缓存,一个浏览器缓存。

关于 HTTP 缓存,主要要修改的是各种 request headers

  • 比如 ExpiresCache-Control 可以去设定过期时间。也即强缓存,后续两条为协商缓存
  • 比如 Last-ModifiedIf-Modified-Since 可以对比变更时间来判断缓存是否更新。
  • 比如 EtagIf-None-Match 可以对比变更文件的 md5 值来判断缓存是否更新。

关于浏览器缓存,主要就 service worker api,毕竟浏览器对资源处理的能力有限。


其他

单页面应用的注意事项

当打包结果为 SPA 应用且路由方式为 history 模式时,通常 / 能正常访问但 /xx 去刷新就会 404 了。

那是因为 /xx 所指向的东西没有资源,所以 nginx 中需要 try_files $uri $uri/ /index.html 的配置。

Node 服务的部署

比如你还搞了前端网关或 BFF 服务,你可以使用以上相同的逻辑去部署,

只是除了资源和网络发现外,又多了一个接口或路由的概念,但实质也可认为是资源,只是路由或接口是业务决定的,比如 koaexpress 来做。

Node 服务的进程管理

另外,当部署 node 服务时,你可以用 pm2forever 等来做进程管理,

提高单个服务器中对批量网络发现的并发能力,压榨一点服务器性能。


邀请人:一起重学前端

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前端容器化部署:解决重启容器时的静态资源丢失问题
在现代Web开发中,前端应用的容器化部署已经成为一种流行趋势。通过容器化,我们可以在不同的环境中一致地运行前端应用,提升部署的效率和可靠性。然而,在容器化过程中,我们可能会遇到一个常见的问题:当容器重启时,静态资源可能会丢失。这篇文章将深入探讨这个问题的原因,并介绍几种解决方案,帮助你在前端容器化部署中顺利应对这一挑战。
IT_陈寒
2025/06/01
290
前端容器化部署:解决重启容器时的静态资源丢失问题
前端工程化:保姆级教学 Jenkins 部署前端项目
◆ DevOps 提到 Jenkins,想到的第一个概念就是 CI/CD 在这之前应该再了解一个概念。 DevOps Development 和 Operations 的组合,是一种方法论,并不特指某种技术或者工具。DevOps 是一种重视 Dev 开发人员和 Ops 运维人员之间沟通、协作的流程。通过自动化的软件交付,使软件的构建,测试,发布更加的快捷、稳定、可靠。 ◆ CI CI 的英文名称是Continuous Integration,中文翻译为:持续集成。 试想软件在开发过程中,需要不断的提交,合并
IT大咖说
2022/06/27
1.4K0
前端工程化:保姆级教学 Jenkins 部署前端项目
前端应用部署工具
持续集成过程,在 ci 过程中,可以实现命令行可以操作的一切东西,通常用来做代码测试,代码检查,产物包大小对比,(npm包、docker镜像、静态资源)的构建与推送等。
PY
2022/07/12
6.4K1
前端应用部署工具
前端部署演化史
前端一说起刀耕火种,那肯定紧随着前端工程化这一话题。随着 react/vue/angular,es6+,webpack,babel,typescript 以及 node 的发展,前端已经在逐渐替代过去 script 引 cdn 开发的方式了,掀起了工程化这一大浪潮。得益于工程化的发展与开源社区的良好生态,前端应用的可用性与效率得到了很大提高。
前端劝退师
2019/11/28
1.4K0
前端部署演化史
Next.js 真有那么好用吗?Netlify 谈他们遇到的六个现实问题
Netlify 部署了数十万个 Next.js 网站,真正的挑战也随之而来。本文最初发表于 Netlify 的博客网站,由 InfoQ 中文站翻译分享。
深度学习与Python
2025/05/08
1600
Next.js 真有那么好用吗?Netlify 谈他们遇到的六个现实问题
Gitea 与 Drone 实践
之前搭建过 Gitlab,但是就只是搭建而已,并未实际使用,因为我大部分的代码还是存放在 Github 上。
愧怍
2022/12/27
1.8K0
Gitea 与 Drone 实践
【前端部署第六篇】使用 docker 部署单页应用,并通过对象存储服务将静态资源上传至 OSS/CDN
大家好,我是山月,这是我最近新开的专栏:「前端部署系列」。包括 Docker、CICD 等内容,大纲图示如下:
山月
2022/05/23
2.5K0
【前端部署第六篇】使用 docker 部署单页应用,并通过对象存储服务将静态资源上传至 OSS/CDN
什么,没有服务器也能部署自己的博客?!
我前几天写了一篇文章,如果你想搭建一个博客,其中提到了使用 netlify 做博客托管服务。
山月
2020/06/18
2.3K0
什么,没有服务器也能部署自己的博客?!
全栈容器化部署篇
截止昨天已经完成了前后端应用的基础开发,那么传统的部署相信大家都是知道的。我们这里还是来说说一般一个vue的项目该如何部署,有那些部署方式:
希里安
2023/10/30
4130
全栈容器化部署篇
前端工程化:保姆级教学 Jenkins 部署前端项目
提到 Jenkins,想到的第一个概念就是 CI/CD 在这之前应该再了解一个概念。
zz_jesse
2022/10/27
1.4K0
使用 Netlify 免费托管前端项目
本系列的第一篇文章 如何使用免费服务搭建一个博客 (opens new window)[1],其中提到了使用 netlify 做博客托管服务,本篇文章对其做简单介绍。
山月
2020/12/16
3.3K0
使用 Netlify 免费托管前端项目
dokploy
GitHub - Dokploy/dokploy: Open Source Alternative to Vercel, Netlify and Heroku.
阿超
2025/01/22
6210
前端开发需要掌握的 Docker 知识
学习一门技术,我们不仅仅要看到它的 API,还要站在更高的角度去看待它的发展,它的整个生命周期。
拿我格子衫来
2022/01/24
1K0
前端开发需要掌握的 Docker 知识
一天一夜,山月写完了这份高效组织 npm script 最佳实践
众所周知,一个 Javasript 项目的脚本类工具,可以使用 package.json 中的 scripts 字段来组织,简单来说,这就是 npm script。
前端劝退师
2021/04/07
2.1K0
一天一夜,山月写完了这份高效组织 npm script 最佳实践
【前端部署十一篇】通过 CICD 实践 Lint、Test、Performance 等前端质量保障工程
大家好,我是山月,这是我最近新开的专栏:「前端部署系列」。包括 Docker、CICD 等内容,大纲图示如下:
山月
2022/05/23
1.4K0
【前端部署十一篇】通过 CICD 实践 Lint、Test、Performance 等前端质量保障工程
应用自动化部署篇
截止昨天已经将应用容器化并部署到k8s平台上,但是每次都要手动部署肯定不现实,所以有一个可自动部署的平台或功能是很重要的,这样就能实现随时开发随时部署了。那么有什么办法可以实现自动部署呢?
希里安
2023/10/30
4890
应用自动化部署篇
【前端部署第一篇】:从写一个最简前端部署服务器,初识前端部署
大家好,我是山月,这是我最近新开的专栏:「前端部署系列」。包括 Docker、CICD 等内容,大纲图示如下:
山月
2022/05/23
2.3K0
【前端部署第一篇】:从写一个最简前端部署服务器,初识前端部署
Docker 与 Kubernetes在前端开发的应用
Docker是开发人员和系统管理员使用容器开发、部署和运行应用程序的平台,使用Linux容器来部署应用程序称为集装箱化,使用Docker可以轻松部署应用程序。Docker 和传统部署方式最大的不同在于,它将不会限制我们使用任何工具,任何语言,任何版本的 runtime,Docker 将我们的应用看成一个只提供网络服务的盒子(也即容器),Kubernetes 则是对这些盒子进行更多自动化的操作,自动创建,自动重启,自动扩容,自动调度,这个过程称之为容器编排。
xiangzhihong
2022/11/30
8240
一步步学会用docker部署应用(nodejs版)
docker是一种虚拟化技术,可以在内核层隔离资源。因此对于上层应用而言,采用docker技术可以达到类似于虚拟机的沙盒环境。这大大简化了应用部署,让运维人员无需陷入无止境繁琐的依赖环境及系统配置中;另一方面,容器技术也可以充分利用硬件资源,做到资源共享。
欲休
2019/03/11
2.3K0
使用 Docker 实现前端应用的标准化构建、部署和运行
Docker 容器化技术是当今最重要的基础设施之一,或者说它已经成为服务程序 的标准化运行环境。
_sx_
2023/10/23
2.9K0
使用 Docker 实现前端应用的标准化构建、部署和运行
推荐阅读
相关推荐
前端容器化部署:解决重启容器时的静态资源丢失问题
更多 >
LV.1
腾讯云前端开发
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档