企业里的前后端是怎么部署的呢?

2023-01-12 10:24:31 +08:00
 t298

各位大佬,我现在有两个前后端分离的 java 项目,如果我想模拟企业的实际部署,我是把他们各自打包扔到服务器启动后来访问,还是通过 nginx 来访问呢? A 项目是一个关于地图的项目,打包后会有大量的 js 和 geojson 文件,可能会有十几 M ,项目 B 就是普通的门户网站,两个项目访问量都不是很大,服务器是阿里云的一核 2G ,1M 带宽,从没有部署过项目,还是希望大佬们分享一下经验,感激不尽。

6462 次点击
所在节点    Java
40 条回复
hhjswf
2023-01-12 16:46:39 +08:00
@opengps 蛤?后端还要域名。。
bitmin
2023-01-12 16:46:46 +08:00
打包完前端代码直接上传到云服务的对象存储,简单设置下域名静态页面等参数可以直接访问

Java 打包 jar 包扔服务器运行,配置下 nginx 转发,服务器带宽可以设大点,设置成按量收费,流量不大更好用
opengps
2023-01-12 16:49:50 +08:00
@hhjswf #21 前端需要访问后端,后端的 webapi 也是用一个网站形式发布的
@vishun #19 你这里的方案要求前后端同机器部署,砍掉了自身可以分开部署的优势
huangdanyu
2023-01-12 16:53:29 +08:00
阿里云的云效试试 flow 流水线部署到 oss 上 后端编译发布到云主机上 后端接口配置域名 可使用云解析的 PrivateZone 实现前端调取后端服务 走内网调用 走公网的话带宽太小了
bl
2023-01-12 17:30:40 +08:00
通过 nginx 访问。java 直接通过 java -jar 启动, 如果想搞复杂点,可以用 docker 。
blankmiss
2023-01-12 19:51:56 +08:00
@yrzs .... 这不随便装
h0099
2023-01-12 20:29:24 +08:00
@opengps nginx 当然可以设置非 localhost 的其他局域网甚至公网 ip upstream server
http://nginx.org/en/docs/http/ngx_http_upstream_module.html
http://nginx.org/en/docs/http/ngx_http_proxy_module.html
因此 nginx 也可以跑在一个独立机器系统上,而前后端跟 nginx 可以有也可以没有物理上的关系(只要能通过网络访问就行)
那些 load balancer 不就是这种模式
biguokang
2023-01-12 21:02:47 +08:00
前端代码打包好后,丢阿里云 oos 上,然后配置一个域名就行了,用户就直接访问这个域名,还能加上 cdn ,这样前端加载速度就很快。

后端代码就部署在云服务器就行了,也配置个域名,前端页面通过这个后端域名访问后端 api 。

把前端代码也部署在后端不现实,你那个 1m 小水管,也就是理论速度 125kb/s 的出口速度,假设你前端页面加起来 1m 的大小,那用户访问你的页面就需要 8 秒才能加载完成,这还只是一个用户,要是两个用户同时访问那速度就更慢了。


当年我还是新手的时候,就是前后端都部署到我的云服务器上,也是 1m 的出口带宽,然后我的前端页面大概 2m 多大小,结果我访问的时候要等个半分钟网页在加载完。

后来把前端页面丢 oos 里了,几秒钟页面就加载好了,就是要按流量算费,也就几毛钱 1g 左右。
GreatAuk
2023-01-12 21:56:58 +08:00
@biguokang 想知道 oss 部署项目有什么局限,比如说并发
h0099
2023-01-12 22:08:06 +08:00
@GreatAuk 他的意思是前后端分离做好后前端就只是一大堆静态资源 htmljscss ,所以这些静态文件随便托管在哪儿都可以只要用户能在访问域名时下载到这些文件
那么前端静态资源的并发就是看您托管的地方的并发了,而这基本是不用担心的
因为 oss 和 cdn 服务端所做的不过是去缓存(当然可能 cache miss )里读取一些文件响应而已,也就是 nginx 等 webserver 最擅长的事
lm930129
2023-01-12 22:30:42 +08:00
这个在不同的公司,不同的情况下,有不同的部署方式,我这里介绍下。
1 、如果是老的项目,可能是打出来的 war 包,用 Tomcat 来部署,然后就不用 nginx 了,直接端口映射出去。
2 、像是前后端分离这种项目,前端有用 build 出来后,用 nginx 来对外的,不做容器。也有做成容器,容器里面集成一个 nginx 的,然后外面可能再套娃一个 nginx ;后端可能就直接 java -jar 后来启动了,当然也有打包成容器了,然后启动容器就完事了。
3 、全部打包成 docker 镜像后,用 k8s 部署的。
NoirStrike
2023-01-12 23:01:28 +08:00
@yrzs #13 小看 docker 了, 0.5g 小鸡 跑 docker 挺稳的
biguokang
2023-01-13 00:16:57 +08:00
@GreatAuk 局限就是要花钱,而且如果有人恶意刷流量的话可能会扣光你的钱。

至于别的东西就不用担心了,oos 其实就是相当于把你的前端网页托管给阿里云了(类似 github page ),别人加载你的网页是从阿里云加载的,在中间阿里云是怎么处理并发问题的不用你担心。

而且你可以在设置里勾上 cdn 选项,这样全国各地访问加载你的网页速度就都会很快,如果 cdn 设置里也加了海外 cdn 的话,那国外访问你的网页也很快,就是海外 cdn 流量稍微贵点。


其实 oss 本质上是可以看作为一个“按流量计费”的网盘,一般用来存贮些静态资源比如视频、图片啥的,然后一般作为图床使用,这样视频图片网页等静态资源都去阿里云请求,不用麻烦你自己的服务器。


当然这个仅限于前后端分离的项目,如果你用的是 ssr (服务端渲染),那就没法这么干。
S1ngleton
2023-01-13 03:09:12 +08:00
1. 直接物理机器部署
2. 容器化部署,一个服务部署 n 个 pods


对于两种部署肯定都是会写部署脚本,ci ,pipeline 自动执行。脚本里包括一些比如跑单测覆盖率,语法检测,部署在服务器上需要的命令(这里面可以包括下载 nginx )不过有些大公司自己就有大前端来做 nginx 的工作,不需要 nginx
xiang0818
2023-01-13 09:32:54 +08:00
@opengps 还必然,无语。用一个域名用 nginx 转发就好了。
opengps
2023-01-13 09:36:56 +08:00
@h0099 #27
@xiang0818 #35
知道,但这一台 nginx 不是大流量架构里的优选的方案,因为流量过于集中。能增加接入点就不会选择单点承载
xujinhui1
2023-01-13 18:05:46 +08:00
装个宝塔
dongci777
137 天前
@opengps 所以为什么要两个域名???
opengps
137 天前
@dongci777 前后端分离,意味着这就是两个独立发布的站点。
dongci777
136 天前
为什么一定是两个独立的站点?一台服务部署前后端不行?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/908342

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX