
Установка Tomcat в Unix/Linux
Apache Tomcat (ранее — Catalina) — это контейнер сервлетов с открытым исходным кодом, разрабатываемый Apache Software Foundation. Реализует спецификацию сервлетов и спецификацию JavaServer Pages (JSP) и JavaServer Faces (JSF). Написан на языке Java. Томкат дает возможность запускать приложения для веба, которые содержат ряд утилит для самоконфигурирования.
Tomcat используется в качестве самостоятельного веб-сервера, в качестве сервера контента в сочетании с веб-сервером Apache HTTP Server, а также в качестве контейнера сервлетов в серверах приложений JBoss и GlassFish.
Установка Tomcat в Unix/Linux
Я стараюсь писать статьи со всем необходимым и чтобы снизить поиски траблошутов в интернете. Я расскажу как установить, настроить и работать с Apache Tomcat в различных Unix/Linux ОС.
Но перед тем как приступим к самой установке, проверяем, установлена ли JAVA на сервере и какая версия:
$ java -version
Если java не установлена в системе, то приступим к установке:
Установка JAVA (JDK) на CentOS/RHEL/Fedora
Установка Java на Debian/Ubuntu/Mint
Установка JAVA 9 (JDK9) на Debian/Ubuntu/LinuxMint
Узнать размер Java Heap Memory Size
Установка переменных JAVA_HOME / PATH в Linux
Для других Unix/Linux ОС мне не приходилось устанавливать. По мере возможности, я буду дополнять данный материал новой информацией.
PS: На момент написания статьи, самая актуальная версия — java8 ( 1.8).
Создание пользователя
В идеале, необходимо создать нового пользователя для запуска Tomcat. В этом примере я создам non-login пользователя «tomcat:
# useradd -s /sbin/nologin -d /usr/local/tomcat9/temp tomcat
ИЛИ:
# useradd -r tomcat --shell /bin/false
Идем дальше.
Установка Tomcat в Debian/Ubuntu/CentOS/Fedora/RedHat/Gentoo/Arch
Я описывал в своей статье, процесс установки tomcat для Ubuntu:
Как установить Tomcat 8.0.5 на Ubuntu
Установка для любого Unix/Linux примитивная — идем на официальный сайт и качаем новую версию томката. Я заюзаю самую последнюю ( но учитывайте дату написания статьи):
# cd /usr/local/src && wget http://www-eu.apache.org/dist/tomcat/tomcat-9/v9.0.1/bin/apache-tomcat-9.0.1.tar.gz
Выполним распаковку:
# tar xfvz /usr/local/src/apache-tomcat-*.tar.gz -C /usr/local/
Старый архив удаляем:
# rm -f /usr/local/src/apache-tomcat-9*.tar.gz
Для удобства, переименуем данный томкат:
# mv /usr/local/apache-tomcat-9.0.1 /usr/local/tomcat9
Меняем права на папку, для того чтобы новый пользователь (tomcat, которого создали в самом начале статьи) мог запустить Tomcat:
# chown -R tomcat. /usr/local/tomcat9
Запуск томката:
$ /usr/local/tomcat9/bin/startup.sh
Для остановки, нужно убить процесс. Но для начала смотри что есть:
# ps -aux | grep tomcat
Я например, делал вот так:
# kill -9 `ps -aux | grep tomcat | grep -Ev "grep"|awk '{print $2}'`
Но это не удобно, немного ниже я расскажу как можно оптимизировать.
Установка Tomcat в Mac OS X
Для начала подключаем brew:
Установка homebrew на Mac OS X
Выполним поиск пакета:
$ brew search tomcat
У меня имеется следующие версии:
tomcat tomcat-native tomcat@6 tomcat@7 tomcat@8.0
Для установки используйте:
$ brew install tomcat@8.0
PS: Настройку я не выполнял, по этому — я пока-что упущу данную тему.
Установка Tomcat на другие Unix/Linux ОС
Для других Unix/Linux ОС, можно заюзать docker. Я мало где юзаю его, по этому — пока что нет данной инфы по установке. Но я надеюсь что я выложу.
Настройка Tomcat в Unix/Linux
И так, хотелось бы рассказать как можно запускать томкат. Но для начала, нужно узнать какой механизм инициализации используется:
# ps -s1| awk '{print $4}'| grep -Ev "CMD"
PS: Вот довольно полезное чтиво:
Система инициализации в Unix/Linux
Система инициализации SysVinit
Запуск TOMCAT с SysV init
Создадим init скрипт для запуска:
# vim /etc/init.d/tomcat9
И приводим к виду:
#!/bin/bash # #https://wiki.debian.org/LSBInitScripts ### BEGIN INIT INFO # Provides: tomcat9 # Required-Start: $local_fs $remote_fs $network # Required-Stop: $local_fs $remote_fs $network # Should-Start: $named # Should-Stop: $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start Tomcat. # Description: Start the Tomcat servlet engine. ### END INIT INFO export CATALINA_HOME=/usr/local/tomcat9 export JAVA_HOME=/usr/local/jdk1.8.0_131 export PATH=$JAVA_HOME/bin:$PATH start() { echo "Starting Tomcat 9..." /bin/su -s /bin/bash tomcat -c $CATALINA_HOME/bin/startup.sh } stop() { echo "Stopping Tomcat 9..." /bin/su -s /bin/bash tomcat -c $CATALINA_HOME/bin/shutdown.sh } case $1 in start|stop) $1;; restart) stop; start;; *) echo "Usage : $0 <start|stop|restart>"; exit 1;; esac exit 0
Даем права на запуск ( на исполнение):
# chmod 755 /etc/init.d/tomcat9
ИЛИ:
# chmod +x /etc/init.d/tomcat9
Добавляем службу в автозагрузку:
# update-rc.d tomcat9 defaults
Или для CentOS:
# chkconfig --add tomcat9
Запускаем томкат:
# service tomcat9 start
Открываем браузер и смотрим что вышло!
PS: По дефолту, нужно открыть URL-у на 8080-м порту. Я внизу статьи, расскажу как можно будет настроить томкат.
Вот полезное чтиво о том, как создавать SysV init файлы в Unix/Linux:
БУДЕТ, немного позже!
Запуск TOMCAT с systemd
Открываем файл:
# vim /etc/systemd/system/tomcat9.service
И приводим к подобному виду:
[Unit] Description=Tomcat9 After=syslog.target network.target [Service] Type=forking User=tomcat Group=tomcat Environment=CATALINA_PID=/usr/local/tomcat9/tomcat9.pid Environment=TOMCAT_JAVA_HOME=/usr/bin/java Environment=CATALINA_HOME=/usr/local/tomcat9 Environment=CATALINA_BASE=/usr/local/tomcat9 Environment=CATALINA_OPTS= #Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC' Environment="JAVA_OPTS=-Dfile.encoding=UTF-8 -Dnet.sf.ehcache.skipUpdateCheck=true -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+UseParNewGC -XX:MaxPermSize=128m -Xms512m -Xmx512m" ExecStart=/usr/local/tomcat9/bin/startup.sh ExecStop=/bin/kill -15 $MAINPID [Install] WantedBy=multi-user.target
Чтобы созданный файл применился, перезагрузим службу:
# systemctl daemon-reload
Чтобы добавить томкат в автозагрузку ОС, выполните:
# systemctl enable tomcat9
И, перезапускаем:
# systemctl restart tomcat9
Чтобы проверить статус, выполняем:
# systemctl status tomcat9 ● tomcat9.service - Tomcat9 Loaded: loaded (/etc/systemd/system/tomcat9.service; enabled) Active: active (running) since Tue 2017-05-09 22:04:58 EEST; 6s ago Process: 28528 ExecStop=/bin/kill -15 $MAINPID (code=exited, status=0/SUCCESS) Process: 28531 ExecStart=/usr/local/tomcat9/bin/startup.sh (code=exited, status=0/SUCCESS) Main PID: 28541 (java) CGroup: /system.slice/tomcat9.service └─28541 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat9/conf/logging.properties -Djava.ut... May 09 22:04:58 debian systemd[1]: Starting Tomcat9... May 09 22:04:58 debian startup.sh[28531]: Tomcat started. May 09 22:04:58 debian systemd[1]: Started Tomcat9.
Как видим, все четко работает.
Вот полезное чтиво о том, как создавать SystemD unit файлы в Unix/Linux:
Изменить порт в tomcat
Поменять порт:
# vim /usr/local/tomcat9/conf/server.xml
Ищем:
Connector port
и меняем его, после чего — выполняем рестарт томката.
Создание виртуального хоста для tomcat
Виртуальный хостинг предоставляет нам возможность размещать несколько доменов (веб-сайтов) на одном сервере.
Я для примера, создал домен и повесил его на 192.168.1.100. Веб-апликейшены работают на tomcat 9 и исползуют 80-й порт. Я добавил 2 java-приложения через панель — Tomcat Admin. Теперь оба приложения работают по следующим URL-м:
http://192.168.1.100/myapp http://192.168.1.100/myapp2
Теперь мы хотим запускать оба веб-приложения на основных доменах (tomcat1.linux-notes.org и tomcat2.linux-notes.org). Таким образом, конечные пользователи могут получить доступ к веб-приложению, используя доменное имя.
И так, открываем файл:
# vim /usr/local/tomcat9/conf/server.xml
И приводим к виду:
<Host name="tomcat1.linux-notes.org" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Alias>www.tomcat1.linux-notes.org</Alias> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="tomcat1.linux-notes_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <Context path="" docBase="/usr/local/tomcat9/webapps/myapp" debug="0" reloadable="true"/> </Host> <Host name="tomcat2.linux-notes.org" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Alias>www.tomcat2.linux-notes.org</Alias> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="tomcat2.linux-notes_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <Context path="" docBase="/usr/local/tomcat9/webapps/myapp2" debug="0" reloadable="true"/> </Host>
Суть надеюсь понятна и проста.
После чего, стоит выполнить перезагрузку томката. Я не буду повторятся как это делать, я описывал это в верху.
Настройка SSL для Tomcat
Знаю как, но пока-что не делал.
PS: Вот еще чтиво:
Сконвертировать файл .JKS в .PEM для SSL в Unix/Linux
Идем далее.
Безопасность Tomcat в Linux
Нужно упомянуть про несколько очень важных моментов по безопасности при работе с Tomcat. Рассмотренные выше «ручные» варианты подразумевают обычно запуск из-под root-пользователя. В результате, если вы ещё и стандартно в файле, задающем пользователей (/usr/local/tomcat9/conf/tomcat-users.xml) раскомментируете блок оных:
<role rolename="tomcat"/> <role rolename="role1"/> <user username="tomcat" password="tomcat" roles="tomcat"/> <user username="both" password="tomcat" roles="tomcat,role1"/> <user username="role1" password="tomcat" roles="role1"/>
…или воспользуетесь распространёнными в интернете примерами получения админских прав типа:
<role rolename="manager"/> <role rolename="admin"/> <user username="admin" password="admin" roles="admin,manager"/>
…или типа:
<role rolename="tomcat"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <user username="tomcat" password="tomcat" roles="tomcat, manager-gui, manager-script"/>
Как-то так, статья «Установка Tomcat в Unix/Linux » завершена.