前言
之前有个需求,一个tomcat里面放置了多个项目,但是每次部署都得重启一个tomcat,导致多个项目都得重启。
怎么解决呢:
思路: 配置多个tomcat,每个tomcat里面放置一个项目就不会相互干扰了。
具体做法1: Linux上安装多个tomcat,但是这样得总修改tomat的配置文件,烦。
做法2(推荐): 基于docker,docker部署多个tomcat映射不同的端口就好了,不用每次都修改配置文件,然后tomcat向外映射logs,和webapps目录就可以了。
为啥使用nginx的80端口转发这几个tomcat呢?
因为做的微信项目,我的域名映射的是80的端口,必须使用80访问各个tomcat的项目,所以就有这个需求。
1.linux安装docker
略
2.docker安装nginx和映射外部文件
https://blog.csdn.net/baidu_21349635/article/details/102738972
3.docker 安装2个tomcat
拉取一个tomcat镜像:
docker pull tomcat
安装2个tomcat容器 : tomcat8081和tomat8082
安装tomat8081容器,配置外部目录
使用临时tomcat容器把初始日志和webapps,conf文件放入外部目录tomcat8081和tomcat8082下
建个临时的tomcat容器
docker run -d --name tmp-tomcat tomcat
现在将这临时容器的logs和webapps的文件拷贝到tomcat8081和tomcat8082目录下.
首先查看,容器中的logs和webapps的位置:
docker exec -it tmp-tomcat bash
拷贝到外部目录tomcat8081下:
docker cp tmp-tomcat:/usr/local/tomcat/logs /docker/tomcat8081/
docker cp tmp-tomcat:/usr/local/tomcat/webapps /docker/tomcat8081/
看下外部目录tomcat8081是否有文件了:
删除临时容器.
建立tomcat8081和tomcat8082 两个容器
docker run -d -p 8081:8080 --name tomcat8081 -v /docker/tomcat8081/logs:/usr/local/tomcat/logs -v /docker/tomcat8081/webapps:/usr/local/tomcat/webapps -e TZ="Asia/Shanghai" --privileged=true tomcat docker run -d -p 8082:8080 --name tomcat8082 -v /docker/tomcat8082/logs:/usr/local/tomcat/logs -v /docker/tomcat8082/webapps:/usr/local/tomcat/webapps -e TZ="Asia/Shanghai" --privileged=true tomcat
测试:
tomcat8081访问没问题:
tomcat8082访问没问题:
分别在tomcat8081和tomcat8082容器上建一个项目.
tomat8081上建立一个demo1的项目。里面只有一个index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>tomcat8081</title> </head> <body> 这是tomcat8081页面 </body> </html>
tomat8081上建立一个demo2的项目。里面只有一个index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>tomcat8082</title> </head> <body> 这是tomcat8082页面 </body> </html>
测试
重启项目,看下是否可以访问demo1和demo2项目;
在tomcat8081容器部署的demo1项目访问没问题:
在tomcat8082容器部署的demo2项目访问没问题:
4.nginx80端口转发
最关键的一步来了。
配置nginx.conf文件
访问80端下的demo1的url就转发到http://本地ip:8081/demo1,也就是tomcat8081下的demo1项目;
访问80端下的demo2的url就转发到http://本地ip:8082/demo2,也就是tomcat8082下的demo2项目;
从而实现了对外只暴露80端口,不暴露tomcat的真实端口。
测试80端口转发
tomcat8081的8081端口的demo1项目访问到了,成功。
tomcat8082的8082端口的demo2项目访问到了,成功。
至此,大功告成!!