4. 安装 Tomcat

Apache Jakarta 网站下载 Tomcat 的二进制发行版

  http://jakarta.apache.org/tomcat/

如果您不想以 root 身份运行 Tomcat 守护进程,请创建新的用户/组 tomcat(首先通过检查文件确保您使用的 UIDGID 仍然可用)/etc/passwd/etc/group):

  
  groupadd -g 220 tomcat
  useradd -u 220 -g tomcat -c "Tomcat" -r -d /usr/local/tomcat -s "/sbin/nologin" tomcat
  
  

Warning

您真的不应该使用 root 帐户来运行 Tomcat 守护进程;(使用 Tomcat 4.1.27 版本)我们发现这允许 MMBase admin 用户将他站点的备份转储写入系统上的任何位置。

<TODO: 更好的解决方案可用吗?>

在新目录中解压 Tomcat 发行版

  
  cd /usr/local/
  tar -zxvf .../jakarta-tomcat-xxx.tar.gz
  
  

Note

4.1.27 版本带有一个热修复

  
  cd /usr/local/jakarta-tomcat-xxx/
  tar -zxvf .../xxx-hotfix-xxx.tar.gz
  
  

更改 Tomcat 目录的所有权并使其可作为/usr/local/tomcat/:

  
  chown -R tomcat:tomcat /usr/local/jakarta-tomcat-xxx
  ln -s /usr/local/jakarta-tomcat-xxx /usr/local/tomcat
  
  

通过添加到文件打开防火墙以进行 Web 访问 Tomcat 服务器/etc/sysconfig/iptables:

  
  -A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 8080 --syn -j ACCEPT
  
  

您需要重启系统以使此规则生效或重启 iptables 防火墙

  
  service iptables restart
  
  

Tip

由于(出于某些奇怪的原因)一些网络管理器只允许到 TCP 端口 80 的出站 Web 连接,因此可能有人无法通过 端口 8080 访问您的 Tomcat(和 MMBase)服务器。在下面我们将解释如何安装 JK 2 映射或 Apache 中的反向代理,以便可以通过 端口 80Apache Web 服务器访问 TomcatMMBase。除了端口问题外,这还具有可以使用 Apache 管理您的 SSL 连接并将您现有的 Apache 日志和统计工具用于 TomcatMMBase 的优势。

如果您决定使用 Apache 作为 TomcatMMBase 服务器的前端,则无需在防火墙中打开 端口 8080

要运行 Tomcat,请设置$CATALINA_HOME环境变量

  
  CATALINA_HOME=/usr/local/tomcat
  
  

并启动它

  
  /usr/local/tomcat/bin/startup.sh
  
  

现在您可以通过以下方式访问 Tomcat 的主页(替换<hostname>为您的主机名)

  
  http://<hostname>:8080/
  
  

这应该会给您 Tomcat 欢迎界面。

再次关闭

  
  /usr/local/tomcat/bin/shutdown.sh
  
  

由于我们想自动化 Tomcat 服务器的启动和关闭,我们创建一个文件/etc/rc.d/init.d/tomcat为我们做这件事

  
  #!/bin/sh
  #
  # Startup script for the Jakarta Tomcat Java Servlets and JSP server
  #
  # chkconfig: - 85 15
  # description: Jakarta Tomcat Java Servlets and JSP server
  # processname: tomcat
  # pidfile: /var/run/tomcat.pid
  # config:

  # Source function library.
  . /etc/rc.d/init.d/functions

  # Source networking configuration.
  . /etc/sysconfig/network

  # Check that networking is up.
  [ ${NETWORKING} = "no" ] && exit 0

  # Set Tomcat environment.
  export JAVA_HOME=/usr/local/j2sdk
  export CLASSPATH=.:/usr/local/j2sdk/lib/tools.jar:/usr/local/j2re/lib/rt.jar
  export CATALINA_HOME=/usr/local/tomcat
  export CATALINA_OPTS="-server -Xms64m -Xmx512m -Dbuild.compiler.emacs=true"
  export PATH=/usr/local/j2sdk/bin:/usr/local/j2re/bin:$PATH

  [ -f /usr/local/tomcat/bin/startup.sh ] || exit 0
  [ -f /usr/local/tomcat/bin/shutdown.sh ] || exit 0

  export PATH=$PATH:/usr/bin:/usr/local/bin

  # See how we were called.
  case "$1" in
    start)
          # Start daemon.
          echo -n "Starting Tomcat: "
          /usr/local/tomcat/bin/startup.sh
          RETVAL=$?
          echo
          [ $RETVAL = 0 ] && touch /var/lock/subsys/tomcat
          ;;
    stop)
          # Stop daemons.
          echo -n "Shutting down Tomcat: "
          /usr/local/tomcat/bin/shutdown.sh
          RETVAL=$?
          echo
          [ $RETVAL = 0 ] && rm -f /var/lock/subsys/tomcat
          ;;
    restart)
          $0 stop
          $0 start
          ;;
    condrestart)
         [ -e /var/lock/subsys/tomcat ] && $0 restart
         ;;
    status)
          status tomcat
          ;;
    *)
          echo "Usage: $0 {start|stop|restart|status}"
          exit 1
  esac

  exit 0
  
  

设置其所有权和访问权限

  
  chown root:root /etc/rc.d/init.d/tomcat
  chmod 755 /etc/rc.d/init.d/tomcat
  
  

并将此 init 脚本添加到 chkconfig

  
  chkconfig --add tomcat
  chkconfig tomcat on
  
  

Tip

您可以直接使用 Tomcat 包附带的脚本,而不是创建自己的 init 脚本/usr/local/tomcat/bin/catalina.sh。 确保您在此脚本的开头设置了 Tomcat 环境。 或者创建一个调用原始 Tomcat init 脚本的简短 init 脚本。

请参阅 How can I start Tomcat as a daemon in Linux?

Tip

要在同一系统上安装两个(甚至更多)版本的 Tomcat 服务器,请通过编辑配置文件来增加第二个服务器的 端口 号(例如增加 10)/usr/local/tomcat55/conf/server.xml:

  
  <Server port="8015" shutdown="SHUTDOWN">
  ...
  <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
  <Connector port="8090"
      maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
      enableLookups="false" redirectPort="8453" acceptCount="100"
      connectionTimeout="20000" disableUploadTimeout="true" />
  ...
  <!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
  <!--
  <Connector port="8453"
      maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
      enableLookups="false" disableUploadTimeout="true"
      acceptCount="100" scheme="https" secure="true"
      clientAuth="false" sslProtocol="TLS" />
  -->
  ...
  <!-- Define an AJP 1.3 Connector on port 8009 -->
  <Connector port="8019"
      enableLookups="false" redirectPort="8453" protocol="AJP/1.3" />
  ...
  <!-- Define a Proxied HTTP/1.1 Connector on port 8082 -->
  <!-- See proxy documentation for more information about using this. -->
  <!--
  <Connector port="8082"
      maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
      enableLookups="false" acceptCount="100" connectionTimeout="20000"
      proxyPort="80" disableUploadTimeout="true" />
  -->
  
  

对于第一个服务器,完成上述第二个 Tomcat 服务器安装,使用调整后的目录和文件名。