一、安装Java环境
首先确保你的Linux环境中已经正确地安装了JDK(Java Development Kit)。这是因为Apache Tomcat是基于Java开发的应用服务器,因此需要预先搭建好Java环境。
bash
# 下载对应版本jdk到指定目录,并解压(以Oracle JDK 8为例)
wget --no-cookies --no-check-certificate \
--header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" \
http://download.oracle.com/otn-pub/java/jdk/8uXXX-bXX/ojdbc7.jar -O jdk-8uXXX-linux-x64.tar.gz
tar zxf jdk-1.8.*_linux-x64.tar.gz -C /usr/local/
# 配置JAVA_HOME及PATH变量,在/etc/profile文件末尾添加以下内容:
echo 'export JAVA_HOME=/usr/local/jdk1.8.0_xxx' >> /etc/profile
echo 'export JRE_HOME=${JAVA_HOME}/jre' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH' >> /etc/profile
source /etc/profile # 刷新profile使设置生效
二、下载与配置多个Tomcat实例
从官方源或者其他可信渠道获取不同版本或同一版本但分别存放的两份Tomcat压缩包,例如apache-tomcat-X.Y.Z.zip或者 apache-tomcat-X.Y.Z.tar.gz。假设我们将其存放在/usr/local/tomcats路径下,分别为tomcat_instance1和tomcat_instance2:
bash
cd /usr/local/
mkdir tomcats && cd tomcats
wget https://downloads.apache.org/tomcat/TOMCAT_VERSION/apache-tomcat-TOMCAT_VERSION.tar.gz
tar xvfz apache*.tar.gz -C . --strip-components=1 # 解压至当前目录作为第一个实例的基础结构
mv apache* tomcat_instance1 # 命名首个实例为tomcat_instance1
cp -r tomcat_instance1 tomcat_instance2 # 复制一份创建第二个实例
# 分别对每个实例进行端口和其他关键参数修改
vi ./tomcat_instance1/conf/server.xml # 更改监听端口号如:将 Connector 的 port 属性改为 8080 和 8005 等非默认值
vi ./tomcat_instance2/conf/server.xml # 对于另一个实例,则更改成不冲突的不同端口号如 9080, 9005等
三、启动与管理独立Tomcat实例
对于每一个Tomcat实例,都需要通过各自bin目录下的脚本来控制服务启停:
bash
./tomcat_instance1/bin/startup.sh # 启动第一台Tomcat实例
./tomcat_instance2/bin/startup.sh # 同理启动第二台Tomcat实例
tail -f ./tomcat_instanceX/logs/catalina.out # 查看相应日志确认启动情况
./tomcat_instance1/bin/shutdown.sh # 关闭特定实例时使用相应的shutdown命令
四、防火墙规则设定 (如果适用)
由于改变了Tomcat的服务端口,默认情况下可能被系统的防火墙阻止访问,请务必更新相关防火墙策略允许新定义的HTTP(S)以及SHUTDOWN接口通信:
bash
iptables -I INPUT -p tcp --dport {new_http_port} -m state --state NEW -j ACCEPT
iptables-save # 永久保存新的防火墙规则(针对CentOS/RHEL)
ufw allow from any to any port {new_http_port}/{new_shutdown_port} proto tcp comment '{instance_name}'
ufw reload # 更新UFW防火墙规则(适用于Ubuntu)
至此,在Linux环境下成功设置了两个完全隔离且能正常运作的Apache Tomcat实例。它们可以服务于不同的应用程序需求,互不影响对方的工作状态和服务性能。