关于独立部署
最后更新于:2022-04-01 23:47:28
槽点:
Eova工程必须部署在/webapps/ROOT 目录中
可能带来的问题:
1.ROOT目录已经被其它项目占领,比如被主站使用.
2.服务器资源紧张,没有额外资源来单独部署.
3.没有权限,比如有关部门牛逼轰轰需求方的运维只给一个子目录权限.
4.还在使用传统IDC的Java虚拟主机,只有一个子目录
可能存在问题的场景/人群:
1.有关部门内部项目,因为是边缘项目不受重视,所以随便给个资源,开发者很被动没有话语权.
2.自学练习项目,因为老师上课演示的都是图方便,直接一个子目录一个项目,已经思维固化,对于新事物都是拒绝的,总觉得自己习惯的那种方式就是最好的.
3.其它传统开发者,因为历史习惯和历史原因以及其它各种不为人知的原因就想在子目录里部署.
部署目录问题的本质:
~~~
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
~~~
如上是我们曾经都写过的获取basePath的代码,在每个获取URL的地方都需要手工加上basePath,应该有很多人都因为忘记加或者写错加错的情况出现.
JFinal的理念->极速开发
Eova的理念->简单开发
JFinal默认提供的Demo访问的URL都是 http://127.0.0.1
同理Eova也推荐采用同样的方案.
不知不觉就没有了上面需要手工关注basePath的情况.
其它开发者怎么看?下面是CSDN某开发者发表的博文:
> 一个tomcat部署一个应用,我自己体会到的好处是在html中一些静态文件获取的时候不需要考虑相对路径或者绝对路径都以/开头就行。
实例独立部署除了能简化basePath的问题,还有什么好处?
项目隔离
多项目之间会互相影响,比如其中某工程出现了内存溢出会直接导致整个容器JVM被占满,而宕机,一损俱损.
负载均衡
敢把一堆项目部署在一个容器中,这些项目几乎都是边缘项目没什么流量,也没什么人关注.
例:tomcat默认不优化情况并发大约200+,均摊到每个项目可能就几十个,一般的项目也不做动静分离,服务+静态,每个项目都有10来个人就可能把系统点挂.
日志分离
多个项目在一个容器中,各项目的日志会互相刷屏,不方便进行线上问题追踪和排查.
在互联网+的时代,在微服务流行的今天,大家都在想办法拆分项目,拆分业务,拆分服务.
如果你还在因为部署多个实例而烦恼,是不是有点跟不上前进的节奏了.
你什么时候才能体验到持续集成 持续发布 Docker 这些技术.
当然,凡是没有绝对,如果有机智的人能想到不依赖第三方库,并且在不侵入现有代码的情况下可以一次性解决basepath的问题,那也是喜闻乐见的事.
好吧,如果你遇到了非人的待遇,急需解决这个问题,可参考:
https://www.oschina.net/question/1174006_137158
* * * * *
原始需求如下:
先有3个项目,分别为 PC站,手机站,后台
最简单的方式就是将这个3个项目部署到一个Tomcat下,然后通过子目录分别访问.
本地访问方式
~~~
http://localhost/web
http://localhost/wap
http://localhost/oss
~~~
外网访问方式,假设域名是`qq.com` 且tomcat(端口为:80)
~~~
http://qq.com/web
http://qq.com/wap
http://qq.com/oss
~~~
> 假如腾讯的应用都让你这么访问你咋想?
> 显然这种方式极不靠谱.
> 项目本身是3个独立的项目
那么我们换一种部署方式,3个项目分别部署到3个tomcat中
~~~
http://qq.com:8001
http://qq.com:8002
http://qq.com:8003
~~~
> 然而还是很奇葩,用户还得去记你的端口号,显然也不靠谱.
> 所以只有如下方式才是大家常用且体验良好的.
~~~
http://www.qq.com
http://m.qq.com
http://oss.qq.com
~~~
通过Nginx的反向代理我们可以做到这样的效果:
~~~
www.qq.com -> localhost:8001
m.qq.com -> localhost:8002
oss.qq.com -> localhost:8003
~~~
核心主要配置如下:(仅供参考,安装使用和配置请自行系统学习)
~~~
upstream web {
server localhost:8001;
}
upstream wap {
server localhost:8002;
}
upstream oss {
server localhost:8003;
}
server {
listen 80;
server_name www.qq.com qq.com;
location / {
proxy_pass http://web;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name m.qq.com;
location / {
proxy_pass http://wap;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name oss.qq.com;
location / {
proxy_pass http://oss;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
~~~
> 将上述配置保存为 vhost.conf
> 然后在nginx.conf 最后 include vhost.conf;
**相关资料**
[Nginx中文文档](http://www.nginx.cn/doc/index.html)
[安装Nginx](http://www.nginx.cn/install)
[Nginx基本配置与参数说明](http://www.nginx.cn/76.html)
[反向代理](http://www.nginx.cn/927.html)
';