各位大佬,我现在有两个前后端分离的 java 项目,如果我想模拟企业的实际部署,我是把他们各自打包扔到服务器启动后来访问,还是通过 nginx 来访问呢? A 项目是一个关于地图的项目,打包后会有大量的 js 和 geojson 文件,可能会有十几 M ,项目 B 就是普通的门户网站,两个项目访问量都不是很大,服务器是阿里云的一核 2G ,1M 带宽,从没有部署过项目,还是希望大佬们分享一下经验,感激不尽。
1
xuanbg 2023-01-12 10:26:45 +08:00
1c2g 的服务器,我就不建议容器化部署了。
|
2
anviod 2023-01-12 10:29:23 +08:00
Java 内存大户 2G 部署两个项目勉强够用 单机写 docker-compose 编排即可
|
4
vdrapb 2023-01-12 10:45:02 +08:00
前端打包丢到 nginx ,后端正常启动服务,2G 应该勉强够用
|
5
wanguorui123 2023-01-12 10:47:00 +08:00
npm 打包到 java 到 static 目录映射出去
|
6
RedBeanIce 2023-01-12 10:56:09 +08:00
1 ,简单的,直接 jar 包部署,古老方案,但是现在依旧有很多公司是这么做的,一般情况学这个足够
这里面有前置知识,java -jar 启动服务的 jvm 知识,npm 启动前端项目 2 ,复杂的,将两个打包到 docker 直接访问,这里面前置知识是 docker 于 Linux ,(理论上刚入门的话用不到 docker-compose ) 对于楼主来说,我觉得方案 1 ,应该是够用的 |
7
opengps 2023-01-12 10:58:24 +08:00
首先来说,前后端必然两个域名(往往是同顶级域名的两个二级域名)
那就必然部署位为两个 web 项目,其中前端完全是独立资源,这时候可以直接用对象存储发布,因为可以用到更高的带宽,服务器带宽低的场景,速度优化效果很明显 |
8
dwlovelife 2023-01-12 11:06:26 +08:00
@opengps 补充一下楼上的,正常情况是楼上说的,但是如果有 cdn ,cdn 的静态资源也要单独部署,这时候就是三个独立资源部署了
|
9
mmmfj 2023-01-12 11:35:13 +08:00
云服务,docker ,k8s 那套
|
10
duan602728596 2023-01-12 11:46:05 +08:00
静态资源上 CDN ,部署用的 docker ,k8s 那套,前端服务用 node
|
11
cryboy007 2023-01-12 12:02:38 +08:00
同一时间打成 docker 镜像 k8s 容器化部署
|
12
SACKJJKLL 2023-01-12 12:33:28 +08:00
docker
|
13
yrzs 2023-01-12 14:17:14 +08:00
一核 2G docker 都装不上吧
|
14
MaxFang 2023-01-12 14:34:42 +08:00 1
拿门户网站来讲,nginx 先配置一个 server1 来访问前端项目,前端对于 api 的访问转发到 server2 上。
nginx 配置 server2 来接收 api 请求,并转发到你 java 后端项目服务上。 至于项目的具体部署,考虑到模拟企业实际部署情况,我推荐两种。 1.都不用 docker ,直接实体机安装环境启动服务; 2.要使用 docker 的话,标准的做法是先把项目打包到镜像里面,推送镜像,然后服务器上拉取镜像启动。 在 2 的基础上可以考虑上 k8s ,一些构建工具等。 |
15
kiddingU 2023-01-12 14:35:09 +08:00
就这点资源还上 k8s ,别扯淡了,传统方式运维就行了
|
16
ytmsdy 2023-01-12 14:42:26 +08:00
用 Github 上的 Action 功能,只要有代码合并到 main 分支,就自动触发 action ,然后自动部署。
这样编译的压力都在 Github 上了 |
17
luomao 2023-01-12 16:01:53 +08:00
觉得楼上有些回答挺扯得,op 说了 1c2g ,这还能上 k8s 么。模拟企业的实际部署,首先需要确定要模拟那种企业,模拟腾讯阿里这种就别考虑了,1c2g 属实是有点逗。
1 、仅按目前的描述来看,nginx 作为对外的入口,前端页面和后端服务都走 nginx 转发即可,nginx 在配置上 ssl 证书 2 、稍微改造版,1M 带宽如果要跑 A 项目恐怕太难了,可以把前端扔到 OSS 上,再加点 CDN ,接口 1M 带宽服务几十并发还是可以 |
18
licoycn 2023-01-12 16:09:34 +08:00
gitea+drone 还是可以实现自动化部署的,对于 1c2g 的环境
|
19
vishun 2023-01-12 16:36:12 +08:00
@opengps #7 并不需要两个域名,只前端一个域名就行,部署 nginx ,后端的 api 请求都通过 nginx 反向代理到后端接口上去。这是前后端分离最常用的部署方法。
|
20
helloriver952 2023-01-12 16:43:51 +08:00
可以试试 coding 阿里的 devops 都有免费额度流水线可以使用
|
22
bitmin 2023-01-12 16:46:46 +08:00
打包完前端代码直接上传到云服务的对象存储,简单设置下域名静态页面等参数可以直接访问
Java 打包 jar 包扔服务器运行,配置下 nginx 转发,服务器带宽可以设大点,设置成按量收费,流量不大更好用 |
23
opengps 2023-01-12 16:49:50 +08:00
|
24
huangdanyu 2023-01-12 16:53:29 +08:00
阿里云的云效试试 flow 流水线部署到 oss 上 后端编译发布到云主机上 后端接口配置域名 可使用云解析的 PrivateZone 实现前端调取后端服务 走内网调用 走公网的话带宽太小了
|
25
bl 2023-01-12 17:30:40 +08:00
通过 nginx 访问。java 直接通过 java -jar 启动, 如果想搞复杂点,可以用 docker 。
|
27
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 不就是这种模式 |
28
biguokang 2023-01-12 21:02:47 +08:00
前端代码打包好后,丢阿里云 oos 上,然后配置一个域名就行了,用户就直接访问这个域名,还能加上 cdn ,这样前端加载速度就很快。
后端代码就部署在云服务器就行了,也配置个域名,前端页面通过这个后端域名访问后端 api 。 把前端代码也部署在后端不现实,你那个 1m 小水管,也就是理论速度 125kb/s 的出口速度,假设你前端页面加起来 1m 的大小,那用户访问你的页面就需要 8 秒才能加载完成,这还只是一个用户,要是两个用户同时访问那速度就更慢了。 当年我还是新手的时候,就是前后端都部署到我的云服务器上,也是 1m 的出口带宽,然后我的前端页面大概 2m 多大小,结果我访问的时候要等个半分钟网页在加载完。 后来把前端页面丢 oos 里了,几秒钟页面就加载好了,就是要按流量算费,也就几毛钱 1g 左右。 |
30
h0099 2023-01-12 22:08:06 +08:00
@GreatAuk 他的意思是前后端分离做好后前端就只是一大堆静态资源 htmljscss ,所以这些静态文件随便托管在哪儿都可以只要用户能在访问域名时下载到这些文件
那么前端静态资源的并发就是看您托管的地方的并发了,而这基本是不用担心的 因为 oss 和 cdn 服务端所做的不过是去缓存(当然可能 cache miss )里读取一些文件响应而已,也就是 nginx 等 webserver 最擅长的事 |
31
lm930129 2023-01-12 22:30:42 +08:00
这个在不同的公司,不同的情况下,有不同的部署方式,我这里介绍下。
1 、如果是老的项目,可能是打出来的 war 包,用 Tomcat 来部署,然后就不用 nginx 了,直接端口映射出去。 2 、像是前后端分离这种项目,前端有用 build 出来后,用 nginx 来对外的,不做容器。也有做成容器,容器里面集成一个 nginx 的,然后外面可能再套娃一个 nginx ;后端可能就直接 java -jar 后来启动了,当然也有打包成容器了,然后启动容器就完事了。 3 、全部打包成 docker 镜像后,用 k8s 部署的。 |
32
NoirStrike 2023-01-12 23:01:28 +08:00
@yrzs #13 小看 docker 了, 0.5g 小鸡 跑 docker 挺稳的
|
33
biguokang 2023-01-13 00:16:57 +08:00 1
@GreatAuk 局限就是要花钱,而且如果有人恶意刷流量的话可能会扣光你的钱。
至于别的东西就不用担心了,oos 其实就是相当于把你的前端网页托管给阿里云了(类似 github page ),别人加载你的网页是从阿里云加载的,在中间阿里云是怎么处理并发问题的不用你担心。 而且你可以在设置里勾上 cdn 选项,这样全国各地访问加载你的网页速度就都会很快,如果 cdn 设置里也加了海外 cdn 的话,那国外访问你的网页也很快,就是海外 cdn 流量稍微贵点。 其实 oss 本质上是可以看作为一个“按流量计费”的网盘,一般用来存贮些静态资源比如视频、图片啥的,然后一般作为图床使用,这样视频图片网页等静态资源都去阿里云请求,不用麻烦你自己的服务器。 当然这个仅限于前后端分离的项目,如果你用的是 ssr (服务端渲染),那就没法这么干。 |
34
S1ngleton 2023-01-13 03:09:12 +08:00 via iPhone
1. 直接物理机器部署
2. 容器化部署,一个服务部署 n 个 pods 对于两种部署肯定都是会写部署脚本,ci ,pipeline 自动执行。脚本里包括一些比如跑单测覆盖率,语法检测,部署在服务器上需要的命令(这里面可以包括下载 nginx )不过有些大公司自己就有大前端来做 nginx 的工作,不需要 nginx |
36
opengps 2023-01-13 09:36:56 +08:00
|
37
47d7tEUBp521E8fJ 2023-01-13 18:05:46 +08:00
装个宝塔
|
40
dongci777 355 天前
为什么一定是两个独立的站点?一台服务部署前后端不行?
|