开发管理项目时多多少少会遇到服务器不够用、一个项目分成多个子项目的情况,故研究了一下如何在一台服务器部署多个 Tomcat。
具体操作:
1、在 /tomcat/ 下部署多个 tomcat。
2、修改 /etc/profile 文件末尾,加入如下内容:
##########first tomcat###########
CATALINA_BASE=/tomcat/apache-tomcat-9.0.1
CATALINA_HOME=/tomcat/apache-tomcat-9.0.1
TOMCAT_HOME=/tomcat/apache-tomcat-9.0.1
export CATALINA_BASE CATALINA_HOME TOMCAT_HOME
##########first tomcat###########
##########second tomcat##########
CATALINA2_BASE=/tomcat/apache-tomcat-9.0.1_2
CATALINA2_HOME=/tomcat/apache-tomcat-9.0.1_2
TOMCAT2_HOME=/tomcat/apache-tomcat-9.0.1_2
export CATALINA2_BASE CATALINA2_HOME TOMCAT2_HOME
##########second tomcat##########
##########third tomcat##########
CATALINA3_BASE=/tomcat/apache-tomcat-9.0.1_3
CATALINA3_HOME=/tomcat/apache-tomcat-9.0.1_3
TOMCAT3_HOME=/tomcat/apache-tomcat-9.0.1_3
export CATALINA3_BASE CATALINA3_HOME TOMCAT3_HOME
##########third tomcat##########
输入命令:source /etc/profile 使其生效。
3、进入第二、第三个 Tomcat 的 bin 目录修改 catalina.sh 文件。
第一个 Tomcat 无需更改,
第二个 Tomcat 将 catalina.sh 中的 CATALINA_BASE 和 CATALINA_HOME 批量替换成在 /etc/profile 中配置的第二个 tomcat 对应的信息,
即将 profile 中的 CATALINA_BASE 替换成 CATALINA2_BASE,CATALINA_HOME 替换成 CATALINA2_HOME;
vim catalina.sh
批量替换:
%s/CATALINA_BASE/CATALINA_2_BASE/g
%s/CATALINA_HOME/CATALINA_2_HOME/g
第三个 Tomcat 把 CATALINA_BASE 替换成 CATALINA3_BASE,CATALINA_HOME 替换成 CATALINA3_HOME;
4、进入第二、第三个 tomcat 在 conf 下的 server.xml 中修改其的端口号:
第二个 Tomcat 修改为:
修改关闭端口:<Server port="8006" shutdown="SHUTDOWN" >
修改访问端口:<Connector port="8088" URIEncoding="UTF-8" redirectPort="8443" connectionTimeout="20000" protocal="HTTP/1.1">
修改监听端口:<Connector port="8010" protocol="AJP/1.3" redirectPort="8443">
第三个 Tomcat 修改为:
修改关闭端口:<Server port="8007" shutdown="SHUTDOWN" >
修改访问端口:<Connector port="8090" URIEncoding="UTF-8" redirectPort="8443" connectionTimeout="20000" protocal="HTTP/1.1">
修改监听端口:<Connector port="8011" protocol="AJP/1.3" redirectPort="8443">
5、最后,依次启动这多个 tomcat,输入命令:ps -ef |grep tomcat 查看进程。
成功,如下:
=============
如果项目中需要使用session,但会发现session会快速失效,同一个浏览器打开多个项目,session会直接失效。
解决方法:修改服务器中每个Tomcat配置文件,在server.xm文件,加上Context标签,标签内容可以这样写:
<Context path="/webApp1(访问带项目名:https://.../webApp1)" docBase="/tomcat1/webApp1(项目存放绝对路径)" reloadable="true" sessionCookiePath="/如需要session共享则放同一目录" sessionCookieName="JSESSIONID_webApp1" />
<Context path="/(访问不带项目名,~:8082/api-controller)" docBase="/tomcat2/webApp2" reloadable="true" sessionCookiePath="/" sessionCookieName="JSESSIONID_webApp2" />
<Context path="/webApp3" docBase="webApp3" reloadable="true" sessionCookiePath="/" sessionCookieName="JSESSIONID_webApp3" />