Установка и конфигурирование Tomcat 5.5 на ALT Linux Master 2.4 (web linux apache tomcat java)
Ключевые слова: web, linux, apache, tomcat, java, (найти похожие документы)
From: Юрий Левыкин
Newsgroups: webform
Date: Mon, 28 Apr 2005 14:31:37 +0000 (UTC)
Subject: Установка и конфигурирование Tomcat 5.5 на ALT Linux Master 2.4
Установка и конфигурирование 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
* Запуск сервера в качестве демона на 80 порту
* Настройка виртуальных хостов
* Включение режима записи access логов
* Подключение Webalizer
* Настройка logrotate
Установка tomcat 5.5
1. Загружаем архив
Загружаем архив jakarta-tomcat-5.5.7.tar.gz с сайта разработчика
http://jakarta.apache.org/tomcat
2. Распаковываем полученный архив
# cd /usr/local
# mkdir tomcat
# cd tomcat
# tar -xzf /path/to/archives/jakarta-tomcat-5.5.7.tar.gz
# ln -s jakarta-tomcat-5.5.7 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.
Вот ссылки на письма в списках рассылки:
[email protected] - тема: "tomcat5 -- 80 port"
http://lists.altlinux.ru/pipermail/community/2005-March/thread.html
[email protected] - тема: "Tomcat -- port 80 for Linux"
http://mail-archives.eu.apache.org/mod_mbox/jakarta-tomcat-user/200503.mbox/threads.html
Обсуждение этой темы на форуме 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://jakarta.apache.org/tomcat/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 g
rep
;;
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
# 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
Юрий Левыкин, 10.04.2005