Apache Tomcat - программа-контейнер сервлетов, написанная на языке Java и реализующая спецификацию сервлетов и спецификацию JavaServer Pages (JSP), которые являются стандартами для разработки веб-приложений на языке Java.
Если вы попробуете скачать и распаковать Tomcat, а потом еще его и запустить командой
каталог_tomcat/bin/catalina.sh run, то уверен на 99%, что у вас все прекрасно заработает и вы сможете открыть страничку по адресу
http://имя_сервера:8080. Написано на java - работает везде! Сказано - сделано!
Интересности начинаются когда вы попробуете запустить tomcat на стандартном - 80 порту. Порты с номерами меньше 1024 являются в linux привилегированными, открывать их может только пользователь root. А запускать веб-сервер из-под root - это просто небезопасно.
Второй вопрос, который возникает - как запустить tomcat в качестве сервиса, т.е. чтобы он стартовал при старте системы.
Итак, пошаговая инструкция по установке Apache Tomcat:
- Первое, что необходимо сделать это установить jdk, как это сделать написано здесь.
- Затем, необходимо скачать последнюю версию Tomcat. На момент написания - это 6.0.18.
- Лично я устанавливаю все приложения не входящие в репозиторий в каталог /opt(от слова optional). Поэтому распакуем скачанный файл и переместим туда каталог:
tar xvzf apache-tomcat-6.0.18.tar.gz
sudo mv apache-tomcat-6.0.18 /opt
Создадим ссылку с именем /opt/apache-tomcat, для того, чтобы не переписывать скрипты при смене версии:
sudo ln -s /opt/apache-tomcat-6.0.18 /opt/apache-tomcat
- Cоздадим системного пользователя tomcat, под которым будет работать наш сервер:
sudo adduser --system tomcat
Сделаем хозяином каталога /opt/apache-tomcat пользователя tomcat:
sudo chown -RLv tomcat:nogroup /opt/apache-tomcat
- Проводим пробный запуск:
sudo -u tomcat /opt/apache-tomcat/bin/catalina.sh run
Открываем браузер по адресу http://имя_сервера:8080. Если все сделано правильно, то увидим следующую картину:
- Теперь необходимо заставить сервер запускаться на стандартных портах. Для этого необходимо отредактировать файл /opt/apache-tomcat/conf/server.xml
Ищем следующий текст:
<connector port="8080" protocol="HTTP/1.1" connectiontimeout="20000" redirectport="8443"></connector>
Меняем порт на стандартный для http - 80, и указываем кодировку для URI:
<connector port="80" protocol="HTTP/1.1" connectiontimeout="20000" redirectport="8443" URIEncoding="UTF-8"></connector>
Теперь при запуске сервера будет выходить ошибка доступа:
java.net.BindException: Permission denied<null>:80
at org.apache.tomcat.util.net.JIoEndpoint.init(JIoEndpoint.java:502)
at org.apache.coyote.http11.Http11Protocol.init(Http11Protocol.java:176)
at org.apache.catalina.connector.Connector.initialize(Connector.java:1058)
at org.apache.catalina.core.StandardService.initialize(StandardService.java:677)
at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:795)
at org.apache.catalina.startup.Catalina.load(Catalina.java:530)
at org.apache.catalina.startup.Catalina.load(Catalina.java:550)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:260)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:412)
Как уже говорилось - порты с номерами меньше 1024 может открывать только пользователь root.
- Для запуска сервера под пользователем tomcat на стандартном порту необходимо установить утилиту jsvc:
sudo apt-get install jsvc -y
JSVC - утилита предназначенная, чтобы запускать java-программы как сервисы(демоны) операционной системы.
Далее в каталоге /etc/init.d создадим файл tomcat со следующим содержанием:
#!/bin/sh
JAVA_HOME=/usr/lib/jvm/java-6-sun
CATALINA_HOME=/opt/apache-tomcat
TOMCAT_USER=tomcat
TMP_DIR=/var/tmp
PID_FILE=/var/run/apache-tomcat.pid
CATALINA_BASE=/opt/apache-tomcat
CATALINA_OPTS="-Xmx1024m -Xms512m -XX:MaxPermSize=128m -Djava.awt.headless=true"
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/tomcat-juli.jar:\
$CATALINA_HOME/bin/bootstrap.jar
case "$1" in
start)
#
# Start Tomcat
#
jsvc \
-user $TOMCAT_USER \
-home $JAVA_HOME \
-Dcatalina.home=$CATALINA_HOME \
-Dcatalina.base=$CATALINA_BASE \
-Djava.io.tmpdir=$TMP_DIR \
-Dfile.encoding=UTF-8 \
-Duser.timezone=Europe/Samara \
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties \
-wait 10 \
-pidfile $PID_FILE \
-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 \
exit $?
;;
stop)
#
# Stop Tomcat
#
jsvc \
-stop \
-pidfile $PID_FILE \
org.apache.catalina.startup.Bootstrap
exit $?
;;
restart)
#
# Restart Tomcat
#
$0 stop
sleep 2
$0 start
;;
*)
echo "Usage tomcat start/stop"
exit 1;;
esac
Или, скачайте его отсюда.
Сделаем его исполняемым:
sudo chown root:root /etc/init.d/tomcat
sudo chmod 755 /etc/init.d/tomcat
Для проверки работы запустим tomcat:
sudo /etc/init.d/tomcat start
Сервер должен запуститься на 80 порту. Для остановки используем следующую команду:
sudo /etc/init.d/tomcat stop
- Создадим ссылки на скрипт для автоматического запуска и останова:
sudo update-rc.d tomcat defaults
Перезагружаем сервер:
sudo shutdown -r now
Теперь tomcat будет запускаться автоматически.