Инженерная геодезия Нивелир

Администрирование, IT ::
Установка и конфигурирование Tomcat 5.5 на ALT Linux Master 2.4


© Юрий Левыкин, 2005.

Каждый имеет право воспроизводить, распространять и/или вносить изменения в настоящий Документ в соответствии с условиями GNU Free Documentation License, Версией 1.1 или любой более поздней версией, опубликованной Free Software Foundation;

Данный документ не содержит Неизменяемых разделов; данный документ содержит следующий Текст, помещаемый на первой странице обложки: "Установка и конфигурирование Tomcat 5.5 на ALT Linux Master 2.4", данный документ не содержит Текста, помещаемого на последней странице обложки. Копия настоящей Лицензии включена в раздел под названием "GNU Free Documentation License".


В этом документе будут описаны следующие операции:

  • Установка tomcat 5.5

    1. Загружаем архив

      Загружаем архив jakarta-tomcat-5.5.9.tar.gz с сайта разработчика http://tomcat.apache.org

    2. Распаковываем полученный архив
      
       # cd /usr/local
       # mkdir tomcat
       # cd tomcat
       # tar -xzf /path/to/archives/jakarta-tomcat-5.5.9.tar.gz
       # ln -s jakarta-tomcat-5.5.9 5.5
          

      После распаковки архива создаем символьную ссылку которая позволит в дальнейшем, при установке другой версии сервера, избежать изменения путей в скриптах запуска. Для перехода на новую версию нужно будет только перенаправить эту ссылку на другую папку.

    3. Загружаем jdk

      Tomcat версии 5.5 предназначен для работы с jdk 1.5.
      Загружаем jdk-1_5_0_02-linux-i586-rpm.bin с http://java.sun.com

    4. Устанавливаем полученный jdk
      
       # ./jdk-1_5_0_02-linux-i586-rpm.bin
      
       [ принимаем лицензию и получаем rpm пакет ]
      
       # rpm -ihv jdk-1_5_0_02-linux-i586-rpm
       jdk #######################################################
          
  • Запуск сервера в качестве демона на 80 порту

    Вопрос стоит или нет запускать tomcat на 80 порту часто вызывает дискуссии по поводу безопасности этого решения. Есть мнение, что более безопасно запустить apache на 80 порту, а tomcat оставить на порту 8080. В этом случае, tomcat подключается к apache с помощью mod_jk. Все запросы к web серверу принимает apache и перенапарвляет их на tomcat. Такая конфигурация главным образом используется когда одно web приложение использует и php и jsp/servlet. В случае, когда используется только java работа apache сводится только к перенаправлению запросов, кроме этого усложняется конфигурирование web сервера.

    Для того, чтобы определиться, я задал этот вопрос в нескольких списках рассылки в результате чего сделал вывод о том, что запускать tomcat с помощью команды jsvc допустимо с точки зрения безопасности. Я не в коем случае не настаиваю на правильности моего решения, я всего лиш провел исследование которое удовлетворило лично меня. В качестве альтернативного варианта можно оставить tomcat на порту 8080 и подключить его к apache с помощью mod_jk или сделать перенаправление портов с помощью iptables.

    Вот ссылки на письма в списках рассылки:
    ]]> community@altlinux.ru - http://lists.altlinux.ru/pipermail/community/2005-March/thread.html тема: "tomcat5 -- 80 port"
    tomcat-user@jakarta.apache.org - http://mail-archives.eu.apache.org/mod_mbox/jakarta-tomcat-user/200503.mbox/threads.html тема: "Tomcat -- port 80 for Linux" ]]>

    Обсуждение этой темы на форуме www.javable.com:
    ]]> http://www.javable.com/forum/thread.jspa?threadID=11553
    http://www.javable.com/forum/thread.jspa?threadID=11586 ]]>

    Порты с номерами меньшими 1024 являются привилегированными, поэтому чтобы запустить Tomcat на порту 80 нужно собрать программу jsvc которая запускает tomcat в качестве демона. Команда jsvc запускает два процесса: первый выполняется с правами root и открывает 80 порт, второй выполняется с правами $TOMCAT_USER он обслуживает пользовательские запросы к серверу.

    Ссылки по этой теме:
    ]]> http://www.klawitter.de/tomcat80.html
    http://tomcat.apache.org/tomcat-5.5-doc/setup.html ]]>

    1. Собираем jsvc
      
       # cd /usr/local/tomcat/5.5/bin
       # tar -xzf jsvc.tar.gz
       # cd jsvc-src
       # autoconf
       # chmod +x configure
       # ./configure --with-java=/usr/java/jdk1.5.0_02
       # make
       # cp jsvc ..
          
    2. Заводим пользователя tomcat5

      С полномочиями этого пользователя будет работать tomcat.

      
       # useradd -d /dev/null -s /dev/null -c 'Tomcat5 user' tomcat5
          
    3. Пишем скрипт запуска

      Заготовка скрипта запуска есть в каталоге jsvc-src/native

      
       # cd /usr/local/tomcat/5.5/bin/jsvc-src/native
       # cp Tomcat5.sh ../..
       # vim /usr/local/tomcat/5.5/bin/Tomcat5.sh
       # cat /usr/local/tomcat/5.5/bin/Tomcat5.sh
      #!/bin/sh
      #
      # tomcat          Start/Stop the Jakarta Tomcat
      #
      # chkconfig: 345 81 14
      # description: Tomcat is the servlet container that is used \
      #   in the official Reference Implementation for the Java Servlet \
      #   and JavaServer Pages technologies. The Java Servlet and JavaServer Pages \
      #   specifications are developed by Sun under the Java Community Process.
      #
      # processname: jsvc
      # pidfile: /var/run/jsvc.pid
      # config: /usr/local/tomcat/5.5/conf/server.xml
      #
      ##############################################################################
      #
      #   Copyright 2004 The Apache Software Foundation.
      #
      #   Licensed under the Apache License, Version 2.0 (the "License");
      #   you may not use this file except in compliance with the License.
      #   You may obtain a copy of the License at
      #
      #       http://www.apache.org/licenses/LICENSE-2.0
      #
      #   Unless required by applicable law or agreed to in writing, software
      #   distributed under the License is distributed on an "AS IS" BASIS,
      #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      #   See the License for the specific language governing permissions and
      #   limitations under the License.
      ##############################################################################
      #
      # Small shell script to show how to start/stop Tomcat using jsvc
      # If you want to have Tomcat running on port 80 please modify the server.xml
      # file:
      #
      #    <!-- Define a non-SSL HTTP/1.1 Connector on port 80 -->
      #    <Connector className="org.apache.catalina.connector.http.HttpConnector"
      #               port="80" minProcessors="5" maxProcessors="75"
      #               enableLookups="true" redirectPort="8443"
      #               acceptCount="10" debug="0" connectionTimeout="60000"/>
      #
      # That is for Tomcat-5.0.x (Apache Tomcat/5.0)
      #
      # Adapt the following lines to your configuration
      JAVA_HOME=/usr/java/jdk1.5.0_02
      CATALINA_HOME=/usr/local/tomcat/5.5
      DAEMON_HOME=/usr/local/tomcat/5.5/bin
      TOMCAT_USER=tomcat5
      TMP_DIR=/var/tmp
      CATALINA_OPTS=
      CLASSPATH=\
      $JAVA_HOME/lib/tools.jar:\
      $CATALINA_HOME/bin/commons-daemon.jar:\
      $CATALINA_HOME/bin/bootstrap.jar
      
      case "$1" in
        start)
          #
          # Start Tomcat
          #
          echo -n "Tomcat starting ... "
          chown -R tomcat5:tomcat5 /usr/local/tomcat/5.5/*
          $DAEMON_HOME/jsvc \
          -user $TOMCAT_USER \
          -home $JAVA_HOME \
          -Dcatalina.home=$CATALINA_HOME \
          -Djava.io.tmpdir=$TMP_DIR \
          -outfile $CATALINA_HOME/logs/catalina.out \
          -errfile '&1' \
          $CATALINA_OPTS \
          -cp $CLASSPATH \
          org.apache.catalina.startup.Bootstrap
          #
          # To get a verbose JVM
          #-verbose \
          # To get a debug of jsvc.
          #-debug \
          ;;
      
        stop)
          #
          # Stop Tomcat
          #
          echo -n "Tomcat shutting ... "
          PID=`cat /var/run/jsvc.pid`
          kill $PID
          ;;
      
        status)
          echo "Tomcat processes: "
          ps aux --cols 1024 | grep org.apache.catalina.startup.Bootstrap | grep -v grep
          ;;
      
        restart|reload)
          $0 stop
          $0 start
          exit 0
          ;;
      
        *)
          echo "Usage: $0 {start|stop|status|restart|reload}"
          exit 1
          ;;
      
      esac
      
      echo "    [ DONE ]"
      
      exit 0
      
          
    4. Размещаем ссылку на скрипт запуска в /etc/rc.d/init.d
      
       # cd /etc/rc.d/init.d
       # ln -s /usr/local/tomcat/5.5/bin/Tomcat5.sh tomcat
          
    5. Меняем порт в server.xml с 8080 на 80
      
       # vim /usr/local/tomcat/5.5/conf/server.xml
       # cat /usr/local/tomcat/5.5/conf/server.xml
        . . .
        <Connector port="80"
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   connectionTimeout="20000" disableUploadTimeout="true" />
        . . .
          

      Если на компьютере запущен apache то необходимо перевести его на другой порт, например 8080 и перезапустить.

      
       # vim /etc/httpd/conf/httpd.conf
       # cat /etc/httpd/conf/httpd.conf
        . . .
        Listen 8080
        . . .
       # service httpd restart
      Stopping httpd service:                                            [ DONE ]
      Checking configuration sanity for httpd:                           [ DONE ]
      Starting httpd service:                                            [ DONE ]
          
    6. Подключаем tomcat к стартовым скриптам SystemV и запускаем сервер
      
       # chkconfig --add tomcat
       # chkconfig --list | grep tomcat
      tomcat     0:off   1:off   2:off   3:on    4:on    5:on    6:off
      
       # service tomcat start
      Tomcat starting ...     [ DONE ]
          

      Чтобы убедиться в том, что tomcat загрузится после перезагрузки системы выполняем перезагрузку.

      
       # reboot
          

      У меня все загрузилось нормально.

  • Настройка виртуальных хостов

    Если сервер будет обслуживать несколько доменов и на каждом домене будет свое web приложение, то нужно настроить виртуальные хосты.

    1. Редактируем конфигурационный файл server.xml

      Добавляем xml блоки Host в блок Engine для каждого имени которое будет использоваться в URL.

      
       # vim /usr/local/tomcat/5.5/conf/server.xml
       # cat /usr/local/tomcat/5.5/conf/server.xml
        . . .
            <Host name="www.mydomain1.org" appBase="webapps">
              <Context
                path=""
                docBase="app1"
                reloadable="true"
              />
            </Host>
            <Host name="mydomain1.org" appBase="webapps">
              <Context
                path=""
                docBase="app1"
                reloadable="true"
              />
            </Host>
      
            <Host name="www.mydomain2.org" appBase="webapps">
              <Context
                path=""
                docBase="app2"
                reloadable="true"
              />
            </Host>
            <Host name="mydomain2.org" appBase="webapps">
              <Context
                path=""
                docBase="app2"
                reloadable="true"
              />
            </Host>
      
          </Engine>
        . . .
          

      Здесь:
      Host name="www.mydomain1.org" - имя web приложения;
      Context path="/webapp" - продолжение имени ресурса (www.mydomain1.org/webapp);
      Context docBase="app1" - директория внутри webapps в которой находится web приложение.

    2. Размещаем web приложения в директориях указанных в server.xml и перезапускаем tomcat
      
       # service tomcat restart
      Tomcat shutting ...     [ DONE ]
      Tomcat starting ...     [ DONE ]
          
  • Включение режима записи access логов

    По умолчанию tomcat не пишет access логи, но эту функцию можно включить.

    1. Создаем директорию для tomcat в /var/log и ставим ссылку на нее из директории logs в директории установки tomcat

      Если нам нужно вести логи отдельно для каждого виртуального домена, то создаем поддиректории в /var/log/tomcat соответствующие именам наших доменов.

      
       # cd /var/log
       # mkdir -p tomcat/mydomain1
       # mkdir -p tomcat/mydomain2
       # chown -R tomcat5:tomcat5 tomcat
       # cd /usr/local/tomcat/5.5/logs
       # ln -s /var/log/tomcat access
          
    2. Для активации режима ведения access лога нужно определить соответствующий xml блок Valve в server.xml

      Нужно задать один из Valve блоков:
      Valve className="org.apache.catalina.valves.AccessLogValve"
      Valve className="org.apache.catalina.valves.FastCommonAccessLogValve"
      Valve className="org.apache.catalina.valves.ByteBufferAccessLogValve"

      Такой блок нужно задать внутри блока Context, Host, или Engine задавая тем самым уровень на котором будет вестись запись логов.

      Ссылка по этой теме:
      ]]> http://localhost/tomcat-docs/config/valve.html
      ]]> ссылка на localhost так как сервер уже работает, а в его комплект входит документация.

      В следующем примере я включаю режим ведения access лога для виртуального хоста www.mydomain1.org.

      
       # vim /usr/local/tomcat/5.5/conf/server.xml
       # cat /usr/local/tomcat/5.5/conf/server.xml
        . . .
      
          <Host name="www.mydomain1.org" appBase="webapps">
          . . .
            <Valve className="org.apache.catalina.valves.FastCommonAccessLogValve"
                   directory="logs/access/mydomain1"  prefix="access" suffix=".log"
                   pattern="combined" resolveHosts="true"/>
          </Host>
      
        . . .
          
    3. Для активации режима ведения логов перезапускаем tomcat
      
       # service tomcat restart
      Tomcat shutting ...     [ DONE ]
      Tomcat starting ...     [ DONE ]
          
  • Подключение Webalizer

    Для ведения статистики посещения web приложений с помощью анализа access.log подключим Webalizer.

    1. Устанавливаем пакет webalizer
      
       # apt-get install webalizer
        . . .
         
    2. Создаем конфигурационные файлы для каждого виртуального хоста
      
       # cd /etc/webalizer
       # cp apache.conf mydomain1.conf
       # cp apache.conf mydomain2.conf
          
    3. Редактируем созданные конфигурационные файлы

      Я переопределил и добавил следующие строки:

      
       # cat mydomain1.conf | grep ^[^#]
      LogFile         /var/log/tomcat/mydomain1/access_log
      LogType         clf
      OutputDir       /var/www/html/webalizer/mydomain1
      HistoryName     /var/lib/webalizer/mydomain1/webalizer.hist
      Incremental     yes
      IncrementalName /var/lib/webalizer/mydomain1/webalizer.current
      ReportTitle     Usage Statistics for
      HostName        www.mydomain1.ru
       . . .
      PageType        jsp
      DNSCache        /var/lib/webalizer/mydomain1/dns_cache.db
       . . .
          

      Для вывода информации я использую www директорию apache, который у меня запущен на порту 8080. Если apache не установлен можно направить вывод webalizer в директорию /usr/local/tomcat/5.5/webapps/mydomain1. Для работы такого web приложения под tomcat нужно написать простейший WEB-INF/web.xml файл.

    4. Создаем необходимые директории для webalizer
      
       # cd /var/lib/webalizer
       # mkdir mydomain1
       # mkdir mydomain2
       # chown webalizer:webalizer mydomain1
       # chown webalizer:webalizer mydomain2
      
       # cd /var/www/html
       # mkdir -p webalizer/mydomain1
       # mkdir -p webalizer/mydomain2
       # chgrp -R webalizer webalizer/
       # chmod -R 775 webalizer/
          
    5. Перенаправляем данные содержащиеся в access логах tomcat в файл access_log

      Поскольку tomcat пишет логи в формате accessYYYY-MM-DD.log то для того, чтобы webalizer имел возможность работать с одним файлом пишем скрипт который перенаправляет содержимое лога в файл с постоянным именем.

      
       # vim /usr/local/sbin/tomcat_logs_mover
       # cat /usr/local/sbin/tomcat_logs_mover
      #!/bin/bash
      #
      #
      # Logs Mover for Tomcat Server
      #
      # To correct use this command need specify
      # path to logs files in the first parameter.
      #
      
      if [ -n "$1" ]
      then
          cd $1
          LOGFN=log_file_name
          if [ -s $LOGFN ]
          then
              LOGFILE=`cat $LOGFN`
              if [ -s $LOGFILE ]
              then
                  cat $LOGFILE >> access_log
                  rm -f $LOGFILE
              fi
      
              echo -n 'access'`date +%Y"-"%m"-"%d`'.log' > $LOGFN
              exit 0
          else
              echo Error: File $LOGFN not found
              exit 1
          fi
      else
          echo Error: Not specified path to logs
          exit 1
      fi
          

      Этот скрипт необходимо запускать с параметром который задает путь до директории в которой находятся логи tomcat.

    6. Создаем файл хранящий имя текущего файла лога
      
       # cd /var/log/tomcat
       # echo -n 'access'`date +%Y"-"%m"-"%d`'.log' > mydomain1/log_file_name
       # echo -n 'access'`date +%Y"-"%m"-"%d`'.log' > mydomain2/log_file_name
          
    7. Задаем время запуска скрипта и webalizer с помощью cron
      
       # crontab -e
       # crontab -l
      # DO NOT EDIT THIS FILE - edit the master and reinstall.
      # (/tmp/crontab.T2FfUJ installed on Fri Apr  1 14:29:42 2005)
      # (Cron version V5.0 -- vixie-cron-4.0.b1.20040604-alt2)
      #minute (0-59),
      #|  hour (0-23),
      #|  |  day of the month (1-31),
      #|  |  |  month of the year (1-12),
      #|  |  |  |  day of the week (0-6 with 0=Sunday).
      #|  |  |  |  |  commands
      #|  |  |  |  |  |
       1  0  *  *  *  /usr/local/sbin/tomcat_logs_mover /var/log/tomcat/mydomain1
       1  0  *  *  *  /usr/local/sbin/tomcat_logs_mover /var/log/tomcat/mydomain2
       3  0  *  *  *  /usr/bin/webalizer -c /etc/webalizer/mydomain1.conf >/dev/null 2>/dev/null
       3  0  *  *  *  /usr/bin/webalizer -c /etc/webalizer/mydomain2.conf >/dev/null 2>/dev/null
          

      Таким образом, в 0:01 запускается скрипт перенапрвляющий данные в access_log, а в 0:03 запускается webalizer который обрабатывает этот лог.

      После того как webalizer сгенерировал статистику ее можно посмотреть по следующим URL:
      http://www.mydomain1.ru:8080/webilizer/mydomain1
      http://www.mydomain1.ru:8080/webilizer/mydomain2

  • Настройка logrotate

    Для того, чтобы не происходил процесс бесконечного роста лог файлов настраиваем logrotate.

    1. Создаем конфигурационный файл в /etc/logrotate.d
      
       # cd /etc/logrotate.d
       # echo '/var/log/tomcat/mydomain1/access_log {
          missingok
          notifempty
      }
      
      /var/log/tomcat/mydomain1/access_log {
          missingok
          notifempty
      }' > tomcat
          

      По умолчанию, logrotate запускается раз в неделю около четырех часов утра в воскресенье. В нашем случае, важно только то, чтобы webalizer обработал лог до того как его заархивирует logrotate. У меня webalizer запускается в 0:03, а logrotate в 4:02.

      Глобальные настройки logrotate настраиваются в конфигурационном файле /etc/logrotate.conf.

  • GNU Free Documentation License

    Текст GFDL, на английском языке, можно прочитать здесь http://www.gnu.org/copyleft/fdl.html
    Текст перевода на русский язык лицензии GNU на свободную документацию можно прочитать здесь http://www.infolex.narod.ru/gpl_gnu/gfdlrus.html

Новые сообщения снизуКомментарии к статье

On-line: гостей: 1. Всего: 1.   Участники   Группы   Последние сообщения