Тарифы Услуги Сим-карты

Установка и настройка apache tomcat инструкции. Установка и настройка Apache Tomcat под Linux. Другие важные файлы конфигурации

В сегодняшнем посте рассмотрим весь процесс компиляции tomcat из исходников, а затем его настроим и запустим. Эксперимент будем проводить на linux ubuntu на примере tomcat 7 .
Первый вопрос который может появится, что тут сложного? А второй, зачем вообще его компилировать из исходников, если можно взять уже готовый бинарный дистрибутив? Ну во-первых это вообще интересно как этот tomcat собирать из исходников, а во-вторых все кто когда-либо имел дело с установкой tomcat , вся его установка сводилась к скачиванию бинарного дистрибутива и его запуском, то есть выполнением скрипта ./startup.sh , а в виндовс мире так там вообще все еще проще, там инсталятор создает ярлыки запуск в меню start . Тут же мы пройдем через все шаги от скачивания исходников, до более или менее тонкой настройки tomcat .

Для этого поста на понадобится:

  1. JRE — виртуальная java-машина на которой выполняется tomcat .
  2. Apche ant — инструмент для сборки приложений
  3. Исходники tomcat — это просто непонятный для машины текст, который ничем не отличается от текста этого поста (в смысле тоже состоит из символов), и который надо преобразовать в бинарный код, понятный машине.

Добавление юзера tomcat

Начнем с того, что добавим пользователя tomcat который будет ответственен за веб-сервер tomcat , то есть администратора веб-сервера tomcat . Для чего он нужен? Он нужен для того, чтобы только он мог запускать и останавливать сервер, плюс только он может (вместе с рутом) изменять конфигурацию сервера.

sudo useradd -d /home/tomcat -U tomcat

ключ -d означает домашняя директория, ключ -U имя пользователя.
После того как юзер tomcat создан зададим ему пассворд:

sudo passwd tomcat Введите новый пароль UNIX: Повторите ввод нового пароля UNIX: passwd: пароль успешно обновлён

Теперь сделаем юзера tomcat сюдоером:

sudo adduser tomcat sudo Добавляется пользователь «tomcat» в группу «sudo» ... Добавление пользователя tomcat в группу sudo Готово.

Чтобы проверить, что юзер tomcat стал сюдоером можно открыть файл /etc/group и найти в нем строку: sudo:x:27:#####,#####,tomcat
Или переключиться в юзера tomcat и ввести команду (как переключаться в другого юзера, чуть дальше):

sudo whoami

Если команда sudo whoami вернет root значит юзер tomcat стал сюдоером. Поясню почему команда whoami возвращает рута , а не tomcat , потому что когда запускается какая-нибудь команда с sudo , это значит, что она запускается от имени рута , соответственно команда sudo whoami запускается как рут и результат будет пользователь рут .
Теперь создадим домашний каталог для юзера tomcat :

sudo mkdir /home/tomcat

И назначим владельца каталога юзера tomcat :

sudo chown tomcat /home/tomcat

Теперь переключимся в пользователя tomcat и перейдем в его домашний каталог:

su tomcat Пароль: cd

Скачавание исходников tomcat

В предыдущем шаге мы создали юзера tomcat и перешли в его домашний каталог. Теперь создадим в его домашнем каталоге каталог downloads и перейдем в него:

mkdir downloads cd downloads

Теперь переходим на сайт http://tomcat.apache.org/download-70.cgi для скачивания исходников, которые можно найти в самом низу страницы в разделе Source Code Distributions и скачайте их в каталог downloads который мы только что создали.
Измените владельца этого архива на tomcat (если надо):

sudo chown tomcat apache-tomcat-7.0.54-src.tar.gz password for tomcat:

Разпакуйте архив в текущий каталог:

tar xvzf apache-tomcat-7.0.54-src.tar.gz

а архив можно удалить:

rm apache-tomcat-7.0.54-src.tar.gz

Установка apache-ant

Компилировать tomcat будем с помощью сборщика apache-ant . Заходим на сайтapache-ant и скачиваем дистрибутив в каталог downloads . На момент написания поста, последний был 1.9.4 .
Распакуем его в текущий каталог:

tar xvzf apache-ant-1.9.4-bin.tar.gz

Переместим его в общий каталог /usr/bin

sudo cp apache-ant-1.9.4-bin.tar.gz /usr/bin

Теперь добавим этот путь в переменную окружения PATH для того:

PATH=/usr/bin/apache-ant-1.9.4:$PATH

Удаляем архив и распакованный каталог из каталога downloads :

rm -rf apache-ant*

Ключ -r нужен для того, чтобы каталог apache-ant-1.9.4-bin был удален рекурсивно, а ключ -f чтобы linux не выводила предупреждение, что архив apache-ant-1.9.4-bin.tar.gz защищенный.
Теперь проверим, что apache-ant видим:

ant -version Apache Ant(TM) version 1.9.4 compiled on April 29 2014

Если ответ такой, то значит переходим к компиляции tomcat , если нет, то еще раз пройдите через шаг Установка apache-ant .

Компиляция tomcat

И так каталог с исходниками tomcat скачен и распакован, apache ant настроен, теперь заходим в каталог с исходниками tomcat :

cd apache-tomcat-7.0.54-src.tar.gz

открываем на редактирование файл build.properties.default :

build.properties.default

# ----- Default Base Path for Dependent Packages ----- # Please note this path must be absolute, not relative, # as it is referenced with different working directory # contexts by the various build scripts. base.path=/usr/share/java #base.path=C:/path/to/the/repository #base.path=/usr/local

Ищем в нем строчку #base.path=/usr/local , раскомментируем ее и изменим путь на /home/tomcat/downloads/tomcat (строчка 7):

build.properties.default

# ----- Default Base Path for Dependent Packages ----- # Please note this path must be absolute, not relative, # as it is referenced with different working directory # contexts by the various build scripts. base.path=/usr/share/java #base.path=C:/path/to/the/repository base.path=base.path=/home/tomcat/downloads/tomcat

Что мы сейчас сделали? Мы указали каталог, куда билдскрипт будет скачивать необходимые для сборки исходники. Затем переименуем файл в build.properties :

mv build.properties.default build.properties

И теперь мы дошли до компиляции tomcat . Сначала очистим каталог:

ant clean clean-depend

и с компилируем tomcat командой ant -Dno.build.dbcp=true :

ant -Dno.build.dbcp=true

Если в все было сделано правильно, то билд должен вернуть BUILD SUCCESSFUL :

Build: Compiling 31 source files to /home/tomcat/downloads/apache-tomcat-7.0.54-src/output/jdbc-pool/classes warning: bootstrap class path not set in conjunction with -source 1.5 warning: source value 1.5 is obsolete and will be removed in a future release warning: target value 1.5 is obsolete and will be removed in a future release warning: To suppress warnings about obsolete options, use -Xlint:-options. 4 warnings Building jar: /home/tomcat/downloads/apache-tomcat-7.0.54-src/output/jdbc-pool/tomcat-jdbc.jar Copying 1 file to /home/tomcat/downloads/apache-tomcat-7.0.54-src/output/build/lib BUILD SUCCESSFUL Total time: 23 seconds

если это так, то поздравляю, компиляция tomcat прошла успешно, и его билд должен появится в каталоге output/build .

Настройка tomcat

После того как tomcat успешно с компилирован, теперь под настроем его чуть-чуть. Сначала перенесем его в более приемлемый каталог, пусть это будет каталог bin где юзер tomcat будет складывать все свои бинарные приложения.
Создадим каталог bin в домашнем каталоге юзера tomcat :

mkdir bin

Теперь перенесем с компилированный tomcat в каталог bin :

cp -r /home/tomcat/downloads/apache-tomcat-7.0.54-src/output/build /home/tomcat/bin

Напоминаю сам tomcat с компилирован в каталог build .
Далее перейдем в каталог /home/tomcat/bin и переименуем каталог build на что-то по понятней, например на apache-tomcat-7 :

mv build apache-tomcat-7

По умолчанию все веб-приложения помещаются в каталог webapps каталога {$CATALINA_HOME} . Мы создадим отдельный каталог куда будут помещаться веб-приложения, чтобы в сам каталог {$CATALINA_HOME} не заходить без надобности, так как файлы веб-приложения могут меняться относительно часто в отличие от файлов самого контейнера сервлетов.
Перейдем в домашний каталог юзера tomcat и создадим каталоге с таким же именем webapps :

cd mkdir webapps

Теперь самое важное, у нас есть каталог веб-сервера /home/tomcat/bin/apache-tomcat-7 и есть каталог /home/tomcat/webapps куда будут помещаться веб приложения. Ограничим к ним доступ до юзера tomcat :

sudo chmod -R 700 /home/tomcat/bin/apache-tomcat-7 password for tomcat: sudo chmod -R 700 /home/tomcat/webapps

Теперь пропишем путь к каталогу, в который будем помещать все вэб-приложения, в конфигурационном файле сервера server.xml . Перейдем в каталоге bin/apache-tomcat-7/conf , где хранятся все файлы конфигурации сервера, и откроем на редактирование файл server.xml . В теге Host поменяем значение атрибута appBase с webapps на /home/tomcat/webapps (строчка 124):

server.xml

Теперь добавим админку, с помощью которой юзеры смогут деплоить веб приложения, но для них юзер tomcat должен выдать соответствующие права. Но юзер tomcat выдаст себе права. Для этого переходим в каталог conf :

cd /home/tomcat/bin/apache-tomcat-7/conf

и открываем на редактирование файл tomcat-users.xml .
Раскомментируем последние пять тегов, и добавим роли для usrename tomcat :

  • manager
  • manager-gui
  • admin-gui
  • Строчка 31:

    tomcat-users.xml

    Теперь удалим юзера tomcat из группы sudo . Зачем это делать? Затем, что sudo детям не игрушка, нам нужно было назначить юзера tomcat сюдоером, чтобы не переключаться постоянно в сюдоера, если нам надо было установить права на каталог где будут лежать веб-приложения и проч. Но а теперь, когда уже все сделано и мы точно знаем, что юзер tomcat не будет заниматься никакими другими админискими задачами кроме как запускать/останавливать сервер и настройку этого сервера, то и не зачем ему быть сюдоером. Для этого перейдем в другого сюдоера, и выполним от имени того другого сюдоера команду:

    sudo gpasswd -d tomcat sudo Удаление пользователя tomcat из группы sudo

    Здесь у команды gpasswd ключ -d означает удалить юзера tomcat из группы sudo .
    И последнее что осталось нам сделать это скопировать все веб-приложения из каталога /home/tomcat/bin/apache-tomcat-7/webapps в наш созданный каталог /home/tomcat/webapps :

    cp -r /home/tomcat/bin/apache-tomcat-7/webapps/* /home/tomcat/webapps

    Запуск веб-сервера tomcat

    Все готово для запуска веб-сервера tomcat . Перейдем в каталог /home/tomcat/bin/apache-tomcat-7/bin и запустим скрипт ./startup.sh :

    Cd /home/tomcat/bin/apache-tomcat-7/bin ./startup.sh Using CATALINA_BASE: /home/tomcat/bin/apache-tomcat-7 Using CATALINA_HOME: /home/tomcat/bin/apache-tomcat-7 Using CATALINA_TMPDIR: /home/tomcat/bin/apache-tomcat-7/temp Using JRE_HOME: /usr/java Using CLASSPATH: /home/tomcat/bin/apache-tomcat-7/bin/bootstrap.jar:/home/tomcat/bin/apache-tomcat-7/bin/tomcat-juli.jar Tomcat started.

    Проверим, что tomcat запущен, для этого перейдем по линке http://localhpst:8080 и должна появится стартовая страница tomcat :

    Теперь зайдем в админку, жмем на батон

    На протяжении всего времени изучения и освоения Java, я старался разобраться и научиться программировать/писать Window Application. Но, если честно, поразмыслив на досуге, решил все-таки сменить вектор обучения: решил освоить Servlet -ы и податься в облака Web -программирование. Для работы /изучения сервлетов нам понадобится веб-сервер Apache Tomcat .
    Apache Tomcat - программа-контейнер сервлетов, написанная на языке Java и реализующая спецификацию сервлетов и спецификацию JavaServer Pages (JSP), которые являются стандартами для разработки веб-приложений на языке Java.

    Tomcat позволяет запускать веб-приложения, содержит ряд программ для самоконфигурирования.

    Tomcat используется в качестве самостоятельного веб-сервера, в качестве сервера контента в сочетании с веб-сервером Apache HTTP Server, а также в качестве контейнера сервлетов в сервере приложений JBoss.

    Другими словами без Tomcat при написании сервлетов нам не обойтись.

    Когда-то в одном из своих постов на блоге я уже писал про установку и настройку Apache Tomcat, но хотелось бы рассмотреть эту тему более подробно и детально.

    В данной статье хотелось бы более подробно рассмотреть настройку и установку Tomcatдля ОС Windows. Настройку Apache Tomcat для ОС Linux вынесу в отельную статью. Материал по данной тематике огромный, поэтому этот пост будет добавляться/обновляться по мере изучения и освоения Tomcat.

    Итак, понеслось....
    Для начала нам необходимо скачать TomCat с официального сайта разработчиков . Описание доступных версий TomCat можно посмотреть на данной страничке . На момент написания статьи последней стабильной версией была 7.0.14 .
    Приведу прямые ссылки для скачивания данной версии:
    Рассмотрим вариант установки Tomcat при помощи исполняемого файла, который установит Tomcat в качестве службы Windows и TomCat будет запускаться при старте системы. После скачивания установщика запускаем его и отвечаем на простые вопросы:вначале соглашаемся с лицензионным соглашением, затем выбираем тип установки (полный, выборочный, нормальный, минимальный) - я выбрал полный. Дальше установщик запросит у нас некоторую конфигурацию: порт подключения (по умоланию 8080):

    Настройки Apache TomCat
    Это означает, что для запуска Tomcat в командной строке броузера нам нужно будет вводить адрес вида: https://localhost:8080 Значение порта подключения можно оставить по умолчанию, но если у нас на компьютере или сервере будет использоваться в качестве Web-сервера только Tomcat , то значение порта можно поставить равное 80 . Следовательно строка ввода адреса в браузере будет выглядеть просто https://localhost (без указания порта). Укажем порт 80. В последствие данное значение можно будет изменить вручную в настройках сервера (файл server.xml ).
    Далее указываем свой логин и пароль. Роли оставим указанные по умолчанию: admin-gui, manager-gui . Далее указываем путь к установленной jdk на нашем компьютере. И в завершение указываем путь куда устанавливать TomCat и нажимаем Install.
    После завершения установки оставляем галочку "Запустить TomCat ":
    Завершение установки TomCat
    Нажав кнопку Finish , мы увидим окно запуска TomCat в качестве сервиса ОС Windows:
    Теперь наступила пора проверить работоспособность сервера TomCat: для этого в сроке ввода адреса в нашем любимом браузере вводим команду:
    https://localhost:8080 В результате, если все прошло гладко, откроется домашняя страница TomCat:
    Домашняя страница Apache TomCat на нашем localhost

    Часть информации и документации на открывшейся страничке localhost будет дублируется с официального сайта.
    Кроме того, установленный сервер TomCat будет доступен пользователям Вашей локальной сети - никаких дополнительных настроек делать не нужно.
    На этом данный вид установки TomCat можно считать завершенным.

    Теперь коротко рассмотрим другой вариант установки и запуска: из архива. Итак.. после скачивания архива для соответствующей архитектуры Winsows распаковываем его в любое удобное для нас место, например D:/Java/apache-tomcat-7.0.14/ Запускаем командную строку Windows и переходим в папку: D:/Java/apache-tomcat-7.0.14/bin/ - в данной папке находятся исполняемые файлы для TomCat. Для установки TomCat в качестве службы Windows вводим команду:
    service.bat install Более подробную информацию по установке можно почитать на данной страничке .
    Запускать TomCat можно при помощи команды
    startup.bat Остановить сервер можно при помощи команды команды:
    shutdown.bat Не забываем предварительно добавить системные переменные: CATALINA_HOME и JAVA_HOME . Выглядеть они будут примерно так:
    JAVA_HOME: c:\Program Files\Java\jdk1.6.0_18\
    CATALINA_HOME: D:/Java/apache-tomcat-7.0.14

    Собственно на этом установка Apache TomCat закончена. Информация о дополнительной настройке и использовании TomCat будет чуть позже.

    |

    Apache Tomcat – это сервер приложений, который используется для обслуживания приложений Java. Tomcat – это открытая реализация технологий Java Servlet и JavaServer Pages, выпущенная Apache Software Foundation. Данное руководство описывает базовую установку и настойку Tomcat 8 на сервере Ubuntu 16.04.

    Требования

    • Предварительно настроенный сервер Ubuntu 16.04 (инструкции по начальной настройке – ).
    • Не-root пользователь с доступом к sudo.

    1: Установка Java

    Для работы Tomcat необходимо установить Java, иначе код Java не будет выполняться. Установите OpenJDK при помощи стандартного пакетного менеджера apt-get.

    Сначала нужно обновить индекс пакетов.

    sudo apt-get update

    Чтобы установить JDK, введите:

    sudo apt-get install default-jdk

    После установки Java создайте пользователя tomcat для запуска сервиса Tomcat.

    2: Создание пользователя Tomcat

    В целях безопасности сервер Tomcat следует запускать с правами обычного пользователя (т.е. не-рутового). Для этого создайте нового пользователя и группу.

    Чтобы создать группу tomcat, введите:

    sudo groupadd tomcat

    После этого нужно создать пользователя tomcat, который должен состоять в одноименной группе. Домашний каталог пользователя – /opt/tomcat (в него будет установлен Tomcat); оболочка – /bin/false (чтобы никто не мог открыть учётную запись):

    sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

    После этого приступайте к установке Tomcat.

    3: Установка Tomcat

    На данный момент Tomcat 8 проще всего установить вручную из бинарного релиза.

    На странице загрузки найдите последнюю версию Tomcat. На данный момент такой версией является 8.0.33. В разделе Binary Distributions найдите список Core и скопируйте ссылку на tar.gz.

    Перейдите в каталог /tmp на сервере. Этот каталог предназначен для временных пакетов.

    Чтобы загрузить архив Tomcat, используйте следующую команду (приведенная ниже ссылка может отличаться):

    curl -O http://apache.mirrors.ionfish.org/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33.tar.gz

    Установите Tomcat в каталог /opt/tomcat. Создайте этот каталог и извлеките в него архив:

    sudo mkdir /opt/tomcat
    sudo tar xzvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components=1

    После этого нужно установить соответствующие права на каталог.

    4: Права

    Пользователь tomcat должен иметь доступ к установке Tomcat.

    Откройте каталог Tomcat:

    Дайте пользователю tomcat право на изменение каталога conf и право на чтение файлов в нём:

    sudo chgrp -R tomcat conf
    sudo chmod g+rwx conf
    sudo chmod g+r conf/*

    Затем сделайте пользователя tomcat владельцем каталогов work, temp и logs.

    sudo chown -R tomcat webapps/ work/ temp/ logs/

    5: Создание файла systemd

    Чтобы запустить Tomcat как сервис, нужно создать service-файл systemd.

    Серверу Tomcat нужно знать, где находится установка Java. Этот путь называется JAVA_HOME. Чтобы узнать местонахождение установки, используйте команду:

    sudo update-java-alternatives -l
    java-1.8.0-openjdk-amd64 1081 /usr/lib/jvm/java-1.8.0-openjdk-amd64

    Примечание : В данном примере JAVA_HOME выделен красным.

    Теперь добавьте к полученному значению секцию /jre и установите в качестве значения JAVA_HOME:

    JAVA_HOME
    /usr/lib/jvm/java-1.8.0-openjdk-amd64/jre

    Примечание : Переменная JAVA_HOME может отличаться.

    Теперь можно создать service-файл. Откройте tomcat.service в каталоге /etc/systemd/system:

    sudo nano /etc/systemd/system/tomcat.service

    Внесите в файл следующий скрипт, при необходимости изменив JAVA_HOME; также можно изменить настройки распределения памяти, которые указаны в CATALINA_OPTS:


    Description=Apache Tomcat Web Application Container
    After=network.target
    Type=forking
    Environment=JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
    Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
    Environment=CATALINA_HOME=/opt/tomcat
    Environment=CATALINA_BASE=/opt/tomcat
    Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
    Environment="JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom"
    ExecStart=/opt/tomcat/bin/startup.sh
    ExecStop=/opt/tomcat/bin/shutdown.sh
    User=tomcat
    Group=tomcat
    WantedBy=multi-user.target

    Сохраните и закройте файл.

    После этого нужно перезапустить демон systemd:

    sudo systemctl daemon-reload

    Теперь сервис Tomcat готов к запуску. Для этого используйте:

    sudo systemctl start tomcat

    Убедитесь, что при запуске не произошло ошибок:

    sudo systemctl status tomcat

    6: Настройка брандмауэра и тестирование сервера Tomcat

    После запуска сервиса Tomcat нужно убедиться, что стандартная страница доступна.

    Но сначала нужно откорректировать настройки брандмауэра и разблокировать порт Tomcat. Если вы следовали , на данный момент сервер защищён брандмауэром ufw.

    Для обработки запросов Tomcat использует порт 8080. Чтобы разблокировать трафик этого порта, введите:

    sudo ufw allow 8080

    Теперь брандмауэр пропускает трафик Tomcat. Чтобы получить доступ к стандартной странице сервиса, откройте ссылку:

    http://server_domain_or_IP:8080

    На экране появится приветственная страница Tomcat, которая содержит некоторую информацию о программе. Однако доступа к ссылкам (например, Manager App) у вас на данный момент нет.

    Если всё работает должным образом, включите service-файл, чтобы сервис Tomcat автоматически запускался вместе с сервером.

    sudo systemctl enable tomcat

    7: Настройка веб-интерфейса управления Tomcat

    Чтобы использовать поставляемый с Tomcat интерфейс, добавьте логин на сервер Tomcat. Для этого отредактируйте файл tomcat-users.xml:

    sudo nano /opt/tomcat/conf/tomcat-users.xml

    Теперь нужно добавить пользователя, который будет иметь доступ к поставляемым с Tomcat интерфейсам: manager-gui и admin-gui. Для этого можно использовать приведённый ниже код (но укажите более надёжное имя и пароль пользователя):



    Сохраните и закройте файл tomcat-users.xml. Чтобы обновить настойки, перезапустите сервис Tomcat.

    sudo systemctl restart tomcat

    8: Доступ к веб-интерфейсу

    Теперь сервер Tomcat запущен. Откройте в браузере веб-интерфейс управления. http://server_IP_address:8080

    На экране появится страница с сообщением:

    If you’re seeing this, you’ve successfully installed Tomcat. Congratulations!

    Теперь откройте Manager App, доступный по ссылке:

    http://server_IP_address:8080/manager/html

    Этот менеджер нужен для управления приложениями Java. Он позволяет запускать, перезапускать, останавливать и сворачивать их. Кроме того, он может выполнять диагностику приложений (к примеру, обнаруживать утечки памяти). В конце этой страницы содержится информация о сервере.

    Теперь откройте Host Manager:

    http://server_IP_address:8080/host-manager/html/:

    Страница Virtual Host Manager нужна для управления виртуальными хостами; она позволяет добавлять виртуальные хосты для развёртывания приложений.

    Заключение

    Готово! Теперь сервер Tomcat полностью готов к обслуживанию приложений Java.

    Tags: ,

    Замысел написать эту статью про установку и настройку, наверное, одного и самых популярных веб-серверов на Java возник уже давно. Одной из причин было желание сделать небольшую заметку "для себя" с подробной инструкцией. Возможно эта статья также пригодится другим java программистам. Пользы для кого-нибудь ещё, например для системных администраторов в ней будет не так много. Скорее всего они просто сделают так: apt-get install tomcat8 и затем потребуют у программиста war-ик для развертывания. Программист же часто хочет чуть большего — например, возможности работать с различными версиями серверов (которых может даже ещё нет в официальном репозитории) или наоборот откатиться к какой-то специфичной версии. Системному администратору такие исследования, как правило, не нужны. По-хорошему, у него должна стоять просто стабильная работающая версия, на которую периодически он будет накатывать обновления и лишний раз на неё не дышать.

    В общем, это статья про то, как программисту установить Apache Tomcat под Linux чтобы "поиграться" с ним, но при этом ничего сильно не сломать.
    Также эта статья может быть полезна в тех случаях, когда начинающий java программист отладив свое веб-приложение Tomcat запущенным на Windows, сталкивается со жгучим желанием развернуть свой сайт на какой-нибудь недорогой VPS-ке с Ubunt-ой.

    Статья может показаться излишне многословной, но мне хотелось рассказать про основные "грабли" и способы их обхода. Могу предположить, что системные администраторы могут быть недовольны тем, что это решение недостаточно системные. Поэтому тем, кто хочет подробно изучить данный вопрос или посвятить свою жизнь профессиональной (т.е. получать за это деньги) настройки линуксовых серверов, тому лучше следует обратиться к соответствующей литературе, обучится этому ремеслу у профессионала и черпать знания у сисадминского сообщества. Здесь же у меня просто блог для java программистов.

    Итак, поехали!

    Подготовка

    Исходные данные.
    Linux. Debian 9. 64bit.

    1. Устанавливаем JDK.
    Почему JDK, а не JRE? По-факту достаточно JRE, но лично мне приятно иметь возможность в случае необходимости по-быстрому скомпилировать программку на java прямо на сервере.
    Вы не поверите, но жизнь такая интересная штука, никогда не угадаешь когда тебе может понадобится скомпилировать и запустить что-то на Java. Лично мне запуск javac из консоли на сервере помогал несколько раз.

    Далее, я предпочитаю ставить Oracle JDK. Собственно OpenJDK тоже неплох и устанавливается гораздо проще (sudo apt-get install default-jdk). Просто я отдаю предпочтение оригинальной Sun/Oracle. Тем не менее, ставить Oracle JDK, OpenJDK или какую-либо другую версию - личное дело каждого. Лично я отношусь к пользователям Open JDK без предубеждения. Более того, сам часто использую версии Open JDK (например Java 9) для того, чтобы ознакомиться с их новыми возможностями.

    Установка Oracle JDK под Windows и Linux сильно отличаются. Под Windows проще установить Oracle JDK проще простого (скачать и запустить), а сборку Open JDK под Windows нужно ещё поискать.
    С Linux-ом всё наоборот. Open JDK как я писал ставится очень просто через apt, с Oracle JDK чуть сложнее.

    В интернете существует совет, что для установки нужно добавить ещё один apt-репозиторий. Я так не делаю. Возможно это лично моя паранойя, но я стараюсь так не делать и делаю установку руками. Особенно если учесть, что установка заключается в том, чтобы скачать и распаковать архив .

    Выбираем jdk-XYZ-linux-x64.tar.gz файл. Правой кнопкой - сохранить ссылку.

    $wget --header "Cookie: oraclelicense=accept-securebackup-cookie" [ссылка]

    Например так:

    $sha256sum jdk-8u73-linux-x64.tar.gz

    Смотрим что показалось на экране и сверяем значение, с тем что опубликовано на официальном сайте.
    Для этого заходим на сайт на сайт загрузки и ищем строчку Checksum .

    Например для jdk-8u73-linux-x64.tar.gz

    $tar -xzf jdk-8u73-linux-x64.tar.gz -C /opt

    По старой привычке я складываю всё в "/opt". После этого делаю симлинк.

    $wget http://apache-mirror.rbc.ru/pub/apache/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33.tar.gz

    Проверяем хэши.

    $wget https://www.apache.org/dist/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33.tar.gz.sha1 $sha1sum -c apache-tomcat-8.0.33.tar.gz.sha1

    Тоже самое в картинках:

    2. Сервер можно распаковать туда же в /opt.

    JAVA_HOME=/opt/jdk

    Про этот файл можно почитать в документации: RUNNING.txt .
    На самом деле, часто некоторые разработчики просто тупо вбивают "JAVA_HOME=...." прямо в catalana.sh.
    Дело в том, что проще открыть nano catalana.sh и поправить его, чем создавать setenv.sh (а точнее как-то узнать про его существование), хотя изначально этот файл специально был сделан для того, чтобы менять ключи JVM и различные переменные окружения, и при этом не портить основной запускаемый файл.

    Вот выдержка из документации:

    Using the "setenv" script (optional, recommended)

    Apart from CATALINA_HOME and CATALINA_BASE, all environment variables can
    be specified in the "setenv" script. The script is placed either into
    CATALINA_BASE/bin or into CATALINA_HOME/bin directory and is named
    setenv.bat (on Windows) or setenv.sh (on *nix). The file has to be
    readable.

    By default the setenv script file is absent. ...

    Строго говоря, часто переменная окружения JAVA_HOME часто указывает туда, где установлена системная JVM. По-большому счету это правило работает, но часто в работе/отладке приходится запускать какую-то конкретную версию Tomcat-а под какой-то специальной версией JVM. Поэтому удобно иметь возможность гибко менять настройки через setenv.sh.

    После того как все пути настроены, запускаем и проверяем, что все хорошо работает.

    Кстати заметил интересный момент. При запуске на виртуальном хостинге может быть довольно ощутимая задержка в старте (около минуты).
    Не хочется углубляться в детали, но мне помогла установка haveged.

    $groupadd tomcat $useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat $chown -R tomcat:tomcat /opt/tomcat

    После этого проверяем, что всё запускается. Например так:

    $iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

    Естественно нужно убедиться, что у вас не установлен уже какой-нить веб-сервер (например apache или nginx), который работает на 80-ом порту.

    Проверяем, что все нормально и если всё хорошо - сохраняем правило переброса портов.

    $apt-get install iptables-persistent

    Собственно говоря всё.

    Теперь о том, на что скорее всего обратят внимание профессиональные системные администраторы.

    1. Tomcat заводят через mod_jk за Apache HTTPD или за Nginx (через reverse proxy).
    Это дает возможность разделить статику, балансировать нагрузку и делать многие другие полезные штуки. Это круто в продакшене, но в девелоперской конфигурации это ещё один слой который не всегда упрощает отладку и разработку.
    В принципе в настройке ничего сложного нет, но всё равно нужно будет покурить документацию. Раньше я предпочитал связку через mod_jk, теперь чаще сталкиваюсь с Nginx.

    2. Нужно сделать запуск Tomcat-а как службу. Это не паранойя, а здравый смысл. По-крайней мере если не дай Бог сервер перезапустится, не нужно будет в ручную его запускать.

    3. Правильные сисадмины разводят файлы томката по правильным папкам (/etc, /var/log и т.д.) и более деликатно относятся к правам доступа к конфигурационным файлам (и не только).
    Можно посмотреть, как это делается через apt-get install tomcat8.

    4. Не буду отрицать, что у многих /opt - помойка в которой лежит всякое барахло.
    Тем не менее, если это мой персональный сервер, то это не помойка, а мой личный склад программ.

    5. Хорошие сисадмины настраивают iptables и прикрывают 8080 порт извне. Точнее они прикрывают все порты, к которым не нужен доступ из вне.

    Если уж говорить на чистоту, то лично я не люблю заниматься администрированием и настройкой серверов. Каждый должен заниматься своим делом, пусть это делает линуксоид со стажем. Ещё раз повторюсь, здесь речь идет скорее о некой девелоперской конфигурации, т.к. сисадмин делает установку нормальной стабильной версии "на века", настраивает её и потом периодически накатывает обновления. Программисту же, в силу своей профессиональной деятельности, приходится периодически меняет настройки, тестировать, менять версии библиотек, конфиги, что-то накатывать/откатывать и делать другие непотребства с сервером, пока не добьется от сервера нужной работы.

    С другой стороны, всегда нужно соблюдать технику безопасности.

    Не запускать от рута (даже если нужен 80-ый порт).
    - Закрывать доступ к служебным портам.
    - Не оставлять дефолтных паролей.
    - Не запускать непонятных и непроверенных программ.

    В идеале этим нужно заниматься у себя в песочнице, но часто такие вещи нужно уметь делать и в реальном мире.
    Да и вот мой реферал на DigitalOcean , для всяких пробных веб-проектов на Java я пользуюсь их хостингом. Раньше пользовался brim.ru, они наверное самый известный java-хостинг в России.

    PS: Если совсем не терпится и хочется сделать совсем всё по-быстрому, то можно запустить в два-три шага:
    1. Через apt-get поставить tomcat8
    2. Загрузить свой ROOT.war
    3. Если нужно пробросить порт.

    Проект, который реализует спецификацию контейнера сервлетов и спецификацию JavaServer Pages (JSP). Используется в качестве самостоятельного сервера веб-приложений, в качестве сервера контента в связке с веб-сервером Apache, а также в качестве контейнера сервлетов в серверах приложений JBoss и GlassFish.
    В лабораторной работе предполагается установка и настройка Tomcat в качестве сервера веб-приложений под управлением ОС OpenSuSE 12.2.

    Цель работы: Установить и произвести базовую настройку Apache Tomcat в качестве сервера веб-приложений.

    Задания к работе

    1. Установить Java-окружение из пакета OpenJDK.
    2. Установить Tomcat.
    3. Запустить Tomcat и проверить его работу по адресу http://localhost:8080.
    4. Написать JSP-страницу test.jsp, выводящую произвольную строку.
    5. Написать сервлет test, выводящий произвольную строку.
    6. Написать стартовую страницу index.html, содержащую ссылки на страницу test.jsp и сервлет test.

    Установка Java и Tomcat

    1. Установка Java Development Kit (JDK)

    Для работы Tomcat требуется установленное окружение для разработки Java-приложений (Java Development Kit, JDK). Проверить, какая версия установлена в системе можно, например, так:

    Aag@stilo:~> zypper se java | grep "runtime" -i // фильтрация избыточной информации i | java-1_7_0-openjdk | Java runtime environment based on OpenJDK 7 and IcedTea 7 | пакет | java-1_7_0-openjdk | Java runtime environment based on OpenJDK 7 and IcedTea 7 | пакет с исходным кодом

    В приведенном примере в системе установлена (символ i (nstalled)) версия 1.7 OpenJDK - свободного комплекта разработки, полностью совместимого с Sun (Oracle) JDK.

    Если ни один из доступных пакетов не установлен, то его следует установить:

    Aag@stilo:~> zypper in java-1_7_0-openjdk* .... // процесс установки

    Проверить результаты установки можно так, как было указано выше.

    Узнать путь, где размещается среда исполнения Java можно из переменной окружения $JAVA_HOME:

    Aag@stilo:~> echo $JAVA_HOME /usr/lib64/jvm/jre

    А узнать номер установленной (и используемой) версии JDK можно так:

    Aag@stilo:~> java -version java version "1.7.0_09" OpenJDK Runtime Environment (IcedTea7 2.3.3) (suse-3.16.1-x86_64) OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)

    2. Установка Tomcat

    Установка Tomcat и связанных с ним пакетов из репозитария производится обычным образом:

    Aag@stilo:~> zypper in tomcat* Чтение установленных пакетов... // aag: список сокращен и может отличаться от приведенного Будут установлены следующие НОВЫЕ пакеты: jakarta-commons-dbcp-tomcat jakarta-commons-pool-tomcat5 tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-servlet-3_0-api tomcat-webapps ... Полный размер загрузки: 7,2 M. После операции будет использовано дополнительно 43,6 M. Продолжить? [да/нет]:

    После подтверждения, необходимые пакеты будут загружены и установлены. При этом, в системе будут созданы следующие подкаталоги (дефолтная установка в OpenSuSE 12.2, фактическое размещение зависит от дистрибутива и версии ОС и версии самого Tomcat):

    • /usr/share/tomcat/bin: управляющие скрипты;
    • /etc/tomcat/conf: конфигурационные файлы (server.xml, web.xml, context.xml, tomcat-users.xml);
    • /usr/share/java/tomcat/lib: jar-файлы, используемые всеми расширениями Tomcat и веб-приложениями;
    • /var/log/tomcat: log-файлы;
    • /srv/tomcat/webapps: каталог, содержащий веб-приложения (сервлеты и JSP);
    • /var/cache/tomcat/work: рабочий каталог Tomcat, который используется, в первую очередь, при преобразовании JSP-страниц в сервлеты;
    • /var/cache/tomcat/temp: временные файлы.

    В каталоге /usr/share/tomcat будут, также, размещены симлинки на указанные каталоги. Путь к основному каталогу Tomcat можно записать в переменную окружения $CATALINA_HOME (export CATALINA_HOME="/usr/share/tomcat/").

    3. Запуск и остановка сервера

    Если установка прошла успешно, то можно попробовать запустить Tomcat:

    Aag@stylo:~> $CATALINA_HOME/bin/catalina.sh start

    Скрипт catalina.sh используется для ручного запуска и остановки сервера Tomcat. Для автоматического запуска можно использовать скрипт service (service tomcat start|stop|restart), предварительно следует указать уровни запуска, на которых будет стартовать демон tomcat (см. chkconfig)

    Catalina - название компонента Tomcat, реализующего непосредственно функции контейнера сервлетов. Это название использовалось в ранних версиях (до Tomcat5) для всего продукта. Другими компонентами в составе системы являются Coyote, который осуществляющий поддержку транспорта по протоколу HTTP 1.1 и Jasper, предназначенный для обработки JSP (анализа JSP-файлов и компиляции их в Java-код, который затем передается для обработки с помощью Catalina).

    Работающий сервер веб-приложений будет ожидать входящие подключения на порт 8080. Это можно проверить, если в адресной строке браузера набрать http://localhost:8080 (рис. 1).

    Рис. 1. Дефолтная стартовая страница сервера Apache Tomcat

    Остановить Tomcat, запущенный вручную, можно так:

    Aag@stylo:~> $CATALINA_HOME/bin/catalina.sh stop

    Настройка сервера Tomcat

    Для настройки сервера Tomcat используются следующие конфигурационные XML-файлы , размещенные в каталоге $CATALINA_HOME/conf/:

    • server.xml: Общие настройки сервера (порты, виртуальные хосты и проч.).
    • web.xml: Параметры, общие для ВСЕХ веб-приложений на текущем сервере. Настройки отдельных веб-приложений задаются в их собственных файлах /WEB-INF/web.xml (здесь можно провести аналогию с использованием файла.htaccess в Apache).
    • context.xml: Общие настройки управления контентом.
    • tomcat-users.xml: Список пользователей и групп (ролей).

    Внимание: Прежде чем вносить какие-либо изменения в эти файлы, стоит сделать их резервные копии. Также следует обращать внимание на комментарии, которыми снабжены эти файлы.

    conf/server.xml - Изменение номера порта

    По умолчанию Tomcat использует для приема входящих подключений TCP-порт 8080, а также порты 8009 и 8005:

    Aag@stilo:~> netstat -tuaev --numeric-ports | grep tomcat tcp 0 0 localhost:8005 *:* LISTEN tomcat 20539 tcp 0 0 *:8009 *:* LISTEN tomcat 20533 tcp 0 0 *:8080 *:* LISTEN tomcat 20524

    Эти порты могут быть изменены на другие, не используемые другими сетевыми сервисами, путем их изменения в файле conf/server.xml. Чтобы, например, заставить Tomcat работать на порту 8081, нужно найти в файле conf/server.xml указанную ниже строку и поменять значение атрибута port на требуемое (8081), затем перезапустить сервер:

    ... ...

    Для developer-сервера можно использовать любой непривилегированный порт. Для production-сервера стоит использовать порт 80, который является стандартным для HTTP-серверов.

    conf/web.xml - Включение листинга каталогов

    Для установки отображения списка файлов в каталогах (листинга), нужно поменять значение атрибута listings с ложного (false) на истинное (true) в блоке настроек сервлета по умолчанию ("default"-servlet) в файле conf/web.xml. Это бывает полезным при разработке и отладке веб-приложений, но не рекомендуется использовать на production-сервере по соображениям безопасности.

    ... default org.apache.catalina.servlets.DefaultServlet debug 0 listings true 1 ...

    conf/context.xml - Установка автоматической перезагрузки страниц

    Имеется возможность заставить Tomcat выполнять автоматическую перезагрузку после изменения кода. Нужно добавить атрибут reloadable со значением "true" в элемент файла conf/context.xml. Это весьма полезно в процессе разработки и отладки сервлетов, но, опять же, не рекомендуется в готовом продукте.

    reloadable="true" > ...

    conf/tomcat-users.xml - Управление пользователями и ролями

    Для управления пользователями, которые могут управлять сервером Tomcat, предназначен файл conf/tomcat-users.xml. Чтобы создать, например, пользователя manager, который сможет управлять веб-приложениями через графическую оболочку (предопределенная роль manager-gui), нужно добавить в этот файл запись вида:

    Разработка и распространение веб-приложений под управлением Tomcat

    Рассмотрим несколько примеров использования Tomcat для разработки веб-приложений на Java . Здесь мы не будем акцентировать внимание на коды программ как таковые, поскольку этому посвящена отдельная дисциплина — «Объектно-ориентированное программирование на языке Java ».

    Создание структуры каталогов и размещение веб-страниц

    Все веб-приложения размещаются в каталоге webapps (/srv/tomcat/webapps). Каждое приложение размещается в собственном, одноименном, каталоге с определенной вложенной структурой (webapps/youappname/WEB-INF/classes). Для нового веб-приложения (например, myapp) эту структуру можно создать, например, так:

    // WEB-INF - предопределенное и регистрозависимое имя каталога aag@stilo:~> sudo mkdir -p /srv/tomcat/webapps/myapp/WEB-INF/classes

    Назначение созданных каталогов следующее:

    • myapp: Корневой каталог веб-приложения. Здесь размещаются HTML-страницы и прочие ресурсы (таблицы стилей (CSS), изображения, клиентские скрипты (javascript), JSP и т.п.), доступные веб-клиентам.
    • myapp/WEB-INF: Этот каталог, недоступный веб-пользователям, содержит описание веб-приложения и его параметры в файле web.xml.
    • myapp/WEB-INF/classes: В этом каталоге размещаются все файлы Java-классов сервлетов.

    Поместим в корневой каталог создаваемого веб-приложения файл index.html следующего содержания:

    После перезапуска сервера к создаваемому веб-приложению можно будет обратиться по адресу http://localhost:8080/myapp/(рис. 2).

    Рис. 2. Отображение статических страниц

    Java Server Pages

    Java Server Pages (JSP) - динамические веб-страницы, содержащие, помимо HTML-разметки, инструкции на языке Java (подобно PHP или ASP). Такие ресурсы размещаются и используются так же, как и статические ресурсы. Пример JSP приведен в листинге 1, а результат на рис. 3.

    Листинг 1. Пример разметки JSP

    Рис. 3. Вывод JSP-страниц

    Примечание: Если при обращении к JSP-странице вы получаете сообщение об ошибке вида:
    org.apache.jasper.JasperException: java.lang.IllegalStateException: No output folder.... ,
    это скорее всего означает, что каталог tomcat/work не доступен для записи. Используйте команду chmod -R a+w tomcat/work для установки разрешений или chown для смены владельца.

    Сервлеты

    Все сервлеты (серверные приложения на Java) размещаются в подкаталоге WEB-INF/classes/. Рассмотрим использование сервлетов на примере приложения, выводящего некоторую информацию о сервере (листинг 1).

    Листинг 1. Исходный код Java-сервлета

    // Сохранить как /srv/tomcat/webapps/myapp/WEB-INF/classes/MyServlet.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // установить MIME-type и кодировку ответа response.setContentType("text/html; charset=UTF8"); PrintWriter out = response.getWriter(); // Отправка веб-страницы try { out.println(""); out.println("Servlet sample"); out.println(""); out.println("

    Запрошенный ресурс: " + request.getRequestURI() + "

    "); out.println("

    Протокол: " + request.getProtocol() + "

    "); out.println("

    Адрес сервера: " + request.getRemoteAddr() + "

    "); out.println(""); } finally { out.close(); // Всегда закрывать Writer } } }

    Следующий этап - компиляция. Это можно сделать из той среды разработки, которую вы используете (Eclipse, NetBeans, IntelliJ и т.п.) или из командной строки. В случае использования openJDK и Tomcat 7 это будет выглядеть примерно так:

    Aag@stylo:~> javac -classpath /usr/share/tomcat/lib/tomcat-servlet-3.0-api.jar:classes /srv/tomcat/webapps/myapp/WEB-INF/classes/MyServlet.java

    В результате компиляции в каталоге WEB-INF/classes будет создан файл MyServlet.class. Теперь нужно сконфигурировать Tomcat для его использования.

    Настройка доступа к сервлету

    С точки зрения пользователя сервлет - это обычный веб-ресурс, адресуемый URI и обращение к сервлету выполняется через адресную строку браузера. Однако, чтобы сервлет стал доступным для клиентов, необходимо выполнить его настройку в файле WEB-INF/web.xml веб-приложения. Структура этого файла для рассматриваемого примера будет примерно такой:

    aboutServer MyServlet aboutServer /about

    В такой конфигурации сервлет из файла MyServlet.class будет выполняться при обращении по адресу /myapp/about . Для КАЖДОГО сервлета должна быть описана пара и , связанная по элементу .

    Для того, чтобы изменения вступили в силу, требуется перезапустить сервер. Результат выполнения сервлета приведен на рис. 4.

    Рис. 4. Выполнение сервлета

    Подробную информацию о всех возможностях сервера Tomcat можно получить из документации, которая устанавливается вместе с сервером и доступна по адресу http://localhost:8080/docs/ или на официальном сайте проекта: http://tomcat.apache.org/ .

    Постоянный адрес этой страницы: