Tomcat 安装及简单配置

2015年04月26日 陈鑫杰

安装和简单配置,老生常谈的事情了。但为什么还要整理一遍呢?
因为对度娘和谷歌搜出来的东西,并不是特别满意呗。前者么,一大堆的推广文;后者么,太深奥了,只想找一份简单的安装命令而已。
综上,正好借着虚拟机还没有安装过,把安装过程详细的整理了一遍。

基础

简单介绍 Tomcat 的安装、脚本、环境变量等基本信息。

安装与启动

二进制发行版安装 Tomcat

  1. 安装 OpenJDK $ sudo apt-get install openjdk-7-jdk
  2. 官网下载 apache-tomcat-8.0.21.tar.gz 包
  3. 解压缩文件 $ tar -zxvf apache-tomcat-8.0.21.tar.gz
  4. 移动文件到主目录 $ mv apache-tomcat-8.0.21 ~/
  5. 授予当前用户运行权限 $ chown -R foamvalue apache-tomcat-8.0.21
  6. 启动 $ ./apache-tomcat-8.0.21/bin/startup.sh
  7. 关闭 $ ./apache-tomcat-8.0.21/bin/shutdown.sh
  8. 查看进程 $ ps -ef | grep tomcat
  9. 关闭进程 $ kill -9 6404

脚本

Bin 目录下存在用于启动和停止 Tomcat 的脚本。

  1. catalina: 主要脚本,会执行 java 命令调用 Tomcat 的启动与停止类。
  2. configtest: 配置测试脚本。
  3. daemon: 守护脚本。
  4. digest: 生成 Tomcat 密码的加密摘要值。生产加密过的密码。
  5. setclasspath: 设定 Tomcat 的 classpath 及其他环境变量的脚本。
  6. shutdown: 停止 Tomcat 运行。
  7. startup: 启动 Tomcat 运行。
  8. tool-wrapper: 常用的 Tomcat 命令工具。
  9. version: 输出 Tomcat 版本信息。

环境变量

  1. CATALINA_BASE: Tomcat 的基本目录。
  2. CATALINA_HOME: Tomcat 的基本目录。
  3. CATALINA_OPTS: 将 Tomcat 指定命令行选项传给 Java 命令。
  4. CATALINA_TMPDIR: Tomcat 临时文件目录。
  5. Java_HOME: Java 运行时或 JDK 环境地址。
  6. JRE_HOME: Java 运行时地址。
  7. JAVA_HOME: 设置 Java 命令行选项的地方。
  8. JPDA_TRANSPORT: 设置 JPDA 调试器使用的透明传输协议。
  9. JPDA_ADDRESS: 设定与 catalina jpda start 命令一起使用的 jpda 地址。
  10. JSSE_HOME: 设定 HTTPS 使用的 Java Secure SocketsExten sion 地址。
  11. CATALINA_PID: 存储在 Tomcat 启动和停止时要使用的进程 ID 对应的路径。

自动启动

新建一个 tomcat 的脚本,内容如下:

#!/bin/sh  
# Tomcat init 脚本  

JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64  
CATALINA_HOME=/home/foamvalue/apache-tomcat-8.0.21  
export JAVA_HOME CATALINA_HOME  

exec $CATALINA_HOME/bin/catalina.sh $*

使用时,反斜杠要去掉。 设置文件权限和切换分组 $sudo chown root:root tomcat
设置运行权限 $ sudo chmod 755 tomcat
拷贝到 init.d 目录下 $ sudo mv tomcat /etc/init.d/
最后设置 chkconfig $ sudo chkconfig --level 2345 tomcat on

配置

详细介绍了 Tomcat 的重定向 WEB 程序目录、80 端口、JVM 和线程数的配置。这也是服务端运行的最基础的配置。

重定向 WEB 程序目录

一般来说,我们都是直接使用 Tomcat 来部署项目的。但还是详细的介绍下为什么要重定向,以及如何设置重定向。

为什么要重定向

  • 计划周期性地更新所安装的 Tomcat,同时不影响已经在使用的网站。
  • 安装了一份 Tomcat 发行版文件,但想要运行一个以上的 Tomcat 实例,每个实例在不同的 TCP 端口上提供不同网页内容的服务,且想让每个 webapp 都在自己的 JVM 上,从而可以对他们执行相互独立的操作。

如何实现

一般在使用 Tomcat 时,服务器会从 conf 及 webapps 目录中读入配置文件,并将文件写入 logs、temp 与 work 目录。
为了让多个实例都能运行,每一个 Tomcat 的实例都必须有自己的目录集,且他们不能共享两个不同的已配置的 Tomcat JVM 实例。
为实现这一功能,必须将 CATALINA_HOME 环境变量设置为已安装 Tomcat 二进制发行版的路径,且必须将 CATALINA_BASE 的环境变量设置成与存储 JVM 实例文件不同的路径。设置好后再启动 Tomcat,就会在 CATALINA_BASE 中定义的文件进行运行,再使用 CATALINA_HOME 中的 Tomcat 二进制发行版。

如何设置

切换到主目录 $ cd ~
创建 Tomcat 实例目录 $ mkdir tomcat-instance
进入实例目录 $ cd tomcat-instance/
创建实例一 mkdir instance01
设置 CATALINA_HOME $ export CATALINA\_HOME="/home/foamvalue/apache-tomcat-8.0.21"
拷贝 conf 目录到实例一 $ cp -a $CATALINA\_HOME/conf ~/tomcat-instance/instance01/
创建其他目录 $ mkdir common logs temp server shared webapps work bin

通过以上步骤,基本已经配置好了。但为了更方便的运行和停止 Tomcat,还需要新建 start 和 stop 脚本。

进入 bin 目录 $ cd bin/
创建 start 脚本 $ vi start
start 脚本内容:

#!/bin/sh
export CATALINA_BASE=/home/foamvalue/tomcat-instance/instance01
export CATALINA_HOME=/home/foamvalue/apache-tomcat-8.0.21
#export CATALINA_BASE CATALINA_HOME

exec $CATALINA_HOME/bin/catalina.sh start
#service tomcat start # Standard way to start on linux

设置运行权限 $ sudo chmod 700 start

同上,直接拷贝 $ sudo cp start stop
编辑 stop 脚本内容:

#!/bin/sh
export CATALINA_BASE=/home/foamvalue/tomcat-instance/instance01
export CATALINA_HOME=/home/foamvalue/apache-tomcat-8.0.21
#export CATALINA_BASE CATALINA_HOME

exec $CATALINA_HOME/bin/catalina.sh stop
#service tomcat start # Standard way to start on linux

检验

启动实例一 $ ./tomcat-instance/instance01/bin/start
得到以下输出:

using CATALINA_BASE:   /home/foamvalue/tomcat-instance/instance01
Using CATALINA_HOME:   /home/foamvalue/apache-tomcat-8.0.21
Using CATALINA_TMPDIR: /home/foamvalue/tomcat-instance/instance01/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /home/foamvalue/apache-tomcat-8.0.21/bin/bootstrap.jar:/home/foamvalue/apache-tomcat-8.0.21/bin/tomcat-juli.jar
Tomcat started.

为了更好的形成对比,可以再创建了另一个实例(instance02)。
注意

  1. Server.xml 端口必须和实例一不同
  2. bin 目录下的 start、stop 脚本的 CATALINA_BASE 路径必须修改

启动实例二 $ ./tomcat-instance/instance02/bin/start 得到以下输出:

using CATALINA_BASE:   /home/foamvalue/tomcat-instance/instance02
Using CATALINA_HOME:   /home/foamvalue/apache-tomcat-8.0.21
Using CATALINA_TMPDIR: /home/foamvalue/tomcat-instance/instance02/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /home/foamvalue/apache-tomcat-8.0.21/bin/bootstrap.jar:/home/foamvalue/apache-tomcat-8.0.21/bin/tomcat-juli.jar
Tomcat started.

查看 tomcat 进程:

  
$ ps -ef | grep tomcat
foamval+   5293   3042  0 22:35 pts/23   00:00:02 /usr/bin/java -Djava.util.logging.config.file=/home/foamvalue/tomcat-instance/instance01/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/home/foamvalue/apache-tomcat-8.0.21/endorsed -classpath /home/foamvalue/apache-tomcat-8.0.21/bin/bootstrap.jar:/home/foamvalue/apache-tomcat-8.0.21/bin/tomcat-juli.jar -Dcatalina.base=/home/foamvalue/tomcat-instance/instance01 -Dcatalina.home=/home/foamvalue/apache-tomcat-8.0.21 -Djava.io.tmpdir=/home/foamvalue/tomcat-instance/instance01/temp org.apache.catalina.startup.Bootstrap start
foamval+   5462   3042 48 22:40 pts/24   00:00:02 /usr/bin/java -Djava.util.logging.config.file=/home/foamvalue/tomcat-instance/instance02/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/home/foamvalue/apache-tomcat-8.0.21/endorsed -classpath /home/foamvalue/apache-tomcat-8.0.21/bin/bootstrap.jar:/home/foamvalue/apache-tomcat-8.0.21/bin/tomcat-juli.jar -Dcatalina.base=/home/foamvalue/tomcat-instance/instance02 -Dcatalina.home=/home/foamvalue/apache-tomcat-8.0.21 -Djava.io.tmpdir=/home/foamvalue/tomcat-instance/instance02/temp org.apache.catalina.startup.Bootstrap start
foamval+   5485   5227  0 22:40 pts/24   00:00:00 grep --color=auto tomcat

使用浏览器打开:
instance01: http://localhost:8081/
instance02: http://localhost:8082/

80 端口

方式一

编辑 conf/server.xml 中的 Connector 元素。将端口号改为 80,并使用 sudo 启用 Tomcat。
注意

  1. 80 端口没有被占用
  2. 80 端口需要 root 权限 启动

方式二

Linux 下的 iptables 允许防火墙、网络过滤和信息传递。通过 iptables 将 80 端口转发到 8080 端口。

首先运行 sudo iptables -t nat -L 查看 iptables 是否处于 enabled 状态:

Chain PREROUTING (policy ACCEPT)  
target     prot opt source               destination          

Chain INPUT (policy ACCEPT)  
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)  
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)  
target     prot opt source               destination  

如果显示 can't initialize iptables...,那就可能要升级 iptables 或 Linux 内核了。

确认 iptabls 处于 enabled 状态后,通过下列命令,让 80 端口的所有 TCP 连接都按机器配置寻址到所有的网络目的地址:
sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
sudo iptables -t nat -I OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8080

如果只是把配置的一个 IP 地址的连接传递给 8080 端口,那么可以追加目的地址 IP 是选择性地使用 --dst 切换开关,例如:
sudo iptables -t nat -I PREROUTING -p tcp --dst 192.168.1.100 --dport 80 -j REDIRECT --to-ports 8080
sudo iptables -t nat -I OUTPUT -p tcp --dst 192.168.1.100 --dport 80 -j REDIRECT --to-ports 8080

技巧
为了更好的使用,建议直接修改 iptables 的配置文件,来实现转发的动作,否则每次重启都用重新执行以上代码。
保存 iptables 信息,用于恢复配置。 # sudo iptables-save > /etc/iptables.rules
当以太网可用时,恢复配置。 # sudo vi /etc/network/if-up.d/iptables

#! /bin/sh
iptables-restore  < /etc/iptables.rules

最后设置执行权限 # sudo chmod +x /etc/network/if-up.d/iptables 如果你启用了类似 UFW 的防火墙,那么需要 sudo ufw allow 80sudo ufw allow 8080,否则无法进行访问。

Java VM 配置

Tomcat 的运行方式取决于所运行的 Java 虚拟机的配置信息。
经常使用的参数:

  1. 内存设置 -Xms256m 设置 JVM 启动时堆栈内存的大小
  2. 内存设置 -Xms512m 设置 JVM 可扩展的最大堆栈内存
  3. 内存设置 -XX:PermSize=128m 设置 JVM 的非堆栈内存的大小
  4. 内存设置 -XX:MaxPermSize=256m 设置 JVM 可扩展的最大非堆栈内存

以上配置,对应的是 1G 内存的情况。实际使用需要参考硬件配置情况。

操作

编辑 catalina.sh 文件
在文件开始 cygwin=false 前,添加一行 JAVA_OPTS="-Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m"
保存后,重启 Tomcat 即可。

Java 线程数配置

  1. maxThreads=”8” 同时处理的任务个数
  2. acceptCount=”10” 接受排队的请求个数

操作

编辑 conf/server.xml 文件
修改前:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

修改后:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           maxThreads="8" acceptCount="10"/>

参考文献

  1. 《Tomcat 权威指南》 中国电力出版社 第二版
  2. Google
  3. Baidu
(转载本站文章请注明作者和出处 FoamValue – www.foamvalue.com ——=== 访问 404页面 寻找遗失儿童。 ===——