Недавно один из моих коллег попросил меня развернуть приложение Spring на сервере CentOS с cPanel / WHM и Apache. Поскольку это требование к сборке не совсем очевидно, я подумал, что поделюсь опытом в качестве простого руководства. Обратите внимание, что это просто практическое руководство, а не руководство по передовым методам, поэтому, если вам требуется решение с усиленной безопасностью, я рекомендую проверить TomcatExpert для получения авторитетного практического руководства. Как говорится, давайте начнем.
Личные инструменты выбора
Поскольку я предпочитаю использовать инструменты GNU и использую Windows локально, я использую производный от Cygwin инструментарий на основе Arch Linux под названием MSYS2 и ConEmu — превосходный консольный эмулятор для Windows.
Список навыков и зависимостей
Чтобы заставить эту сборку работать, я предполагаю, что вы хотя бы случайно знакомы с основными командами Linux, доступом к оболочке и пониманием редактора Vim. Если нет, я покажу команды по мере продвижения, но эти навыки выходят за рамки этого руководства. Если вам неудобно использовать Vim, вы можете поручить эту задачу кому-то более уверенному в своих навыках или использовать другой редактор, такой как Nano или Emacs . Для получения дополнительной информации вы можете получить довольно хороший урок начальной загрузки по каждой технологии из вики StackOverflow… соответственно, SSH , Linux и Vim . Кроме того, нам, очевидно, понадобятся Java и Tomcat, поэтому давайте начнем с установки или обновления до последних версий. (В настоящее время Java 8 1.8.0_45, Tomcat v8.0.21).
Установка / обновление до последней версии Java 8
Чтобы установить двоичные файлы, мы собираемся подключиться к SSH на сервер от имени пользователя root и использовать GNU Wget для загрузки зависимостей. Я устанавливаю Java в / usr / local, но если вы хотите, вы можете заменить другое местоположение, такое как / opt или / usr / share. Обратите внимание, что когда вы видите командную строку со знаком #
хеша в начале, это стандарт Unix, указывающий, что вы вошли в систему как «пользователь root». Однако, если вы не вошли в систему как пользователь root, для всех команд, отображающих знак хеша, #
потребуются разрешения ‘sudo’. Соответственно, знак доллара означает, что вы обычный пользователь. Для получения дополнительной информации о команде sudo
и запуске от имени пользователя root вы можете обратиться к справочным страницам или в CentOS Wiki .
Так что давайте перейдем в вашу целевую директорию с правами root и возьмем последнюю версию Java …
Обратите внимание, что эта запись была первоначально опубликована в апреле 2015 года, поэтому вы можете загрузить последние версии Java и Tomcat и соответствующим образом обновить требования.
1
2
3
|
cd /usr/local/ && wget --no-check-certificate -c \ --header "Cookie: oraclelicense=accept-securebackup-cookie" \ http: //download .oracle.com /otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64 . tar .gz |
После загрузки архива он может быть сохранен с добавленной строкой запроса AuthParam. Если это так, просто переименуйте архив, чтобы он заканчивался расширением tar.gz
1
2
3
|
ls -l | grep jdk <a href= "//www.javacodegeeks.com/wp-content/uploads/2015/09/java_archive.png" ><img class= "aligncenter wp-image-44430" src= "//www.javacodegeeks.com/wp-content/uploads/2015/09/java_archive-1024x180.png.webp" alt= "java_archive" width= "565" height= "99" srcset= "//www.javacodegeeks.com/wp-content/uploads/2015/09/java_archive-1024x180.png.webp 1024w, //www.javacodegeeks.com/wp-content/uploads/2015/09/java_archive-300x53.png.webp 300w, //www.javacodegeeks.com/wp-content/uploads/2015/09/java_archive.png.webp 1135w" sizes= "(max-width: 565px) 100vw, 565px" >< /a > |
Примечание: чтобы переименовать файл, вы можете просто набрать
jdk
и дважды нажать клавишуtab
чтобы завершить имя файла вместо необходимости вводить полное имя файла.
1
|
mv jdk-8u45-linux-x64. tar .gz\?AuthParam\=1429150407_03533c0686909067456bf8c408ad56c9 jdk-8u45-linux-x64. tar .gz |
Далее нам нужно извлечь архив в целевой каталог, используя tar. Опять же, если вы не устанавливаете в /usr/local
обновите ваши пути соответственно.
1
2
|
tar xvzf jdk-8u45-linux-x64. tar .gz ln -s /opt/apache-tomcat-8 .0.21 tomcat |
Чтобы упростить будущие обновления JDK, я хотел бы создать Symlink, ссылающийся на текущий JDK, чтобы все двоичные файлы Java автоматически переназначались в текущий JDK через менеджер двоичных версий Linux Alternatives . Ниже я просто делаю ссылку на недавно извлеченный JDK.
1
|
ln -s /usr/local/jdk1 .8.0_45 jdk |
Следующая серия команд не обязательна. Однако, если у вас в настоящее время не установлена Java в вашей системе, это, безусловно, облегчает будущие обновления, поэтому я рекомендую просто следовать этому примеру, поэтому все, что вам нужно сделать, это заменить символическую ссылку JDK при следующем обновлении JDK. Однако, если вам нужно обновить current
версию Java, руководство по альтернативам в вики CentOS поможет вам довольно быстро освоить задачу.
Предполагая, что у вас нет настроек для Java, следующие команды установят ссылки на альтернативы для двоичных файлов JDK.
1
2
3
|
update-alternatives -- install /usr/bin/java java /usr/local/jdk/bin/java 1 update-alternatives -- install /usr/bin/javac javac /usr/local/jdk/bin/javac 1 update-alternatives -- install /usr/bin/javaws javaws /usr/local/jdk/bin/javaws 1 |
Выполнив эти команды, вы можете проверить версии, передав аргумент --display
в систему альтернатив.
1
2
3
|
update-alternatives --display java update-alternatives --display javac update-alternatives --display javaws |
После того, как вы установили и подтвердили альтернативы, просто java -version
чтобы убедиться, что система находит JDK.
Если вы не получили правильный ответ, начните с самого начала и убедитесь, что вы правильно выполнили каждый шаг. Очень просто совершать простые ошибки как при установке Java, так и при работе в среде Linux.
1
|
java -version |
Если вы сделали это далеко Поздравляем! Вы на полпути к наличию производственного Java-сервера, но пока не празднуете, установка JDK была простой, теперь нам нужно установить и настроить Tomcat.
Установка Tomcat 8
Мне лично нравится устанавливать Tomcat в каталог
/opt
. Как и в случае с JDK, если вы не устанавливаете в/opt
обновите свой путь соответствующим образом.
Прежде всего нам нужно подумать о том, что мы в настоящее время планируем делать. Это общеизвестный общепринятый способ запуска Tomcat с непривилегированной учетной записью, поэтому мы собираемся создать пользователя Tomcat без оболочки входа в систему. Кроме того, для этой сборки я планирую запустить несколько экземпляров Tomcat Behind Apache 2.2 и оставить все статические HTTP-запросы для Apache. Tomcat вообще не будет запускать HTTP. Таким образом, мы собираемся перейти к Tomcat через AJP . Рабочий процесс по сути будет выглядеть так, как показано ниже.
AJP — не единственное решение, мы «могли» использовать Mod Proxy HTTP, чтобы проксировать все запросы к Tomcat через другой порт. Однако это не идеальное решение, так как тогда вы будете использовать два HTTP-сервера, и ваш сайт будет виден на обоих портах. Опять же, есть обходные пути, но для простоты я хотел бы полностью отключить HTTP-сервер Tomcat и использовать коннектор AJP от Apache для передачи запросов в Tomcat и из Tomcat через AJP и позволить Apache обрабатывать HTTP.
Итак, начнем с загрузки Tomcat. Я использую Apache для скачивания прямо с сайта, но если вам нужно более близкое зеркало, вы можете найти его на сайте Tomcat.
1
|
cd /opt && wget http: //archive .apache.org /dist/tomcat/tomcat-8/v8 .0.21 /bin/apache-tomcat-8 .0.21. tar .gz |
Прежде чем двигаться дальше, нам нужно проверить целостность md5 двоичного выпуска. Для этой версии сумма указана ниже, но вы также можете найти ссылку md5 рядом со ссылкой для скачивания tar.gz на сайте Tomcat . Если md5 не совпадает, загрузите другой архив, так как двоичные файлы могут легко испортиться во время передачи.
1
|
md5sum apache-tomcat-8.0.21. tar .gz |
Если md5sum совпадает, извлеките архив и символическую ссылку в каталог /opt
же, как мы делали это ранее с JDK.
1
2
|
tar xvzf apache-tomcat-8.0.21. tar .gz ln -s /opt/apache-tomcat-8 .0.21 tomcat |
Затем нам нужно настроить нашего пользователя tomcat, группировать и сменить владельца двоичных файлов на нового пользователя tomcat.
1
2
3
|
groupadd tomcat useradd -g tomcat -s /usr/sbin/nologin -m -d /opt/tomcat tomcat chown -R tomcat.tomcat /opt/tomcat |
Теперь давайте проверим, что пользователь Tomcat был добавлен в систему…
1
|
cat /etc/passwd | grep tomcat |
Если у вас есть вывод, отображающий вашего пользователя Tomcat, то вы можете смело переходить к созданию собственной библиотеки Tomcat APR
Создайте собственную библиотеку Tomcat APR
Далее мы собираемся создать собственную библиотеку Tomcat для оптимальной производительности. Собственная библиотека APR обеспечивает повышение производительности за счет добавления поддержки неблокирующего ввода-вывода для запросов поддержки активности. Итак, вот суть, взятая прямо с сайта Tomcat Native Library, о том, как Tomcat Native повышает производительность.
«Собственная библиотека Apache Tomcat — это дополнительный компонент для использования с Apache Tomcat, который позволяет Tomcat использовать определенные собственные ресурсы для обеспечения производительности, совместимости и т. Д.
В частности, собственная библиотека Apache Tomcat предоставляет Tomcat доступ к реализации сетевого подключения (сокета) библиотеки Apache Portable Runtime (APR) и генератора случайных чисел. См. Документацию Apache Tomcat для получения дополнительной информации о том, как настроить Tomcat для использования соединителя APR ».
Хотя этот шаг не обязателен, он делает производительность Tomcat намного лучше, и мы любим производительность, так что давайте к этому.
Находясь в CentOS, дистрибутиве на основе RPM, мы будем использовать Yum для установки двух необходимых зависимостей, необходимых для Tomcat Native — OpenSSL и библиотеки APR. Если вы используете дистрибутив на основе Debian (Ubuntu, Linux Mint и т. Д.), Вы можете так же легко использовать Aptitude или Apt и т. Д.
1
|
yum install -y apr-devel openssl-devel |
Как только Yum закончит установку библиотек, cd
в базовый двоичный каталог Tomcat и извлеките собственный архив Tomcat.
1
|
cd /opt/tomcat/bin && tar xvzf tomcat-native. tar .gz |
Затем cd
в каталог tomcat-native- {version} -src / jni и выполните следующие команды точно так, как вы видите. Обратите внимание, что скрипт ./configure довольно хорошо подходит для выбора большинства стандартных реализаций OpenSSL, поэтому вам не нужно явно указывать путь для ssl.
1
|
cd /opt/tomcat/bin/tomcat-native-1 .1.33-src /jni |
1
2
3
4
|
. /configure --with-apr= /usr/local/apr \ --with-java-home= /usr/local/jdk \ --with-ssl= yes \ --prefix= /opt/tomcat |
После настройки сборки выполните make и make install.
1
|
make && make install |
Теперь вы должны иметь встроенные двоичные файлы libtcnative в каталоге /usr/local/apr/lib
. Для подтверждения просто ls
справочник. Если вы столкнулись с проблемами при сборке собственных двоичных файлов tomcat, проверьте установку, чтобы убедиться, что все необходимые зависимости были правильно найдены. Чаще всего возникают трудности с поиском библиотеки APR.
1
|
ls /usr/local/apr/lib |
Чтобы убедиться, что библиотека APR загружается правильно, давайте проведем быстрый тест, установив переменную среды, добавив путь к библиотеке APR и протестировав конфигурацию.
1
2
3
|
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: /usr/local/apr/lib export JAVA_HOME= /usr/local/jdk cd /opt/tomcat/bin && . /configtest .sh |
После выдачи ./configtest.sh вы хотите прокрутить вывод, чтобы убедиться, что библиотека APR загружается правильно.
1
|
INFO: Loaded APR based Apache Tomcat Native library 1.1.33 using APR version 1.2.7. |
Если ты все еще со мной так далеко, у тебя все отлично! Итак, теперь давайте перейдем к настройке отдельных экземпляров.
Примечание. Если в этот момент у вас возникли проблемы, например «Не найдена нативная библиотека Apache Tomcat на основе APR», проверьте в / opt / tomcat / lib или / usr / local / apr / lib, чтобы определить, есть ли у вас двоичные файлы.
Настройка нескольких экземпляров Tomcat
В настоящее время у нас есть файлы времени выполнения Tomcat в / opt / tomcat. Однако для этой сборки нам нужна возможность управлять несколькими экземплярами, предоставляя каждому экземпляру отдельную JVM. Таким образом, в случае сбоя приложения в одном экземпляре приложения не будут закрыты в другом. Хотя это и идеальная ситуация, для ее настройки требуется немало настроек. Итак, давайте перейдем к этому.
Документация Tomcat показывает основы для установки нескольких экземпляров, но она не очень интуитивно понятна без пошагового руководства.
В двух словах, основные указания предлагают сохранить базовую установку $CATALINA_HOME
и создать отдельные каталоги экземпляров $CATALINA_BASE
содержащие ресурсы, необходимые для каждого экземпляра. Вот что мы будем делать.
Итак, давайте теперь создадим отдельные экземпляры, скопируем необходимые файлы в каждый экземпляр и удалим посторонние файлы из $CATALINA_HOME
.
1
2
3
4
|
cd /opt/tomcat && mkdir tomcat_1 tomcat_2 cp -R bin conf logs temp webapps work tomcat_1 cp -R bin conf logs temp webapps work tomcat_2 rm -rf conf logs temp webapps work |
Теперь у вас должна быть следующая структура каталогов для каталога /opt/tomcat
.
1
|
ls -l /opt/tomcat |
Ради абстракции, я собираюсь использовать example1.com и example2.com в качестве справочного материала, но, конечно, вам придется обновить их с вашими фактическими доменами хоста. Чтобы настроить наши экземпляры, мы собирались внести некоторые изменения в несколько элементов в файле server.xml каждого экземпляра. Вам необходимо указать две переменные: сетевой IP-адрес вашего домена и ваше доменное имя. В противном случае для каждого экземпляра сервера требуется семь элементов.
- Выделенный порт отключения сервера.
- Отключите HTTP-соединитель.
- Порт выделенного сервера AJP.
- Определен адрес разъема AJP.
- Определен хост по умолчанию.
- Элемент Host определен.
- Определен префикс регистрации элемента Valve.
При желании вы также можете обновить UserDatabaseRealm
для использования дайджест-аутентификации, если хотите, добавив атрибут дайджеста со значением алгоритма. Я лично предпочитаю работать с SHA-256.
Итак, давайте перейдем к этому … Откройте vim и внесите изменения в /opt/tomcat/tomcat_1/conf/server.xml, обновив элементы с помощью IP-адреса вашей доменной сети для элемента 4 и вашего домена для элементов 5,6,7. Файл server.xml должен напоминать следующее без ваших собственных переменных.
1
|
cd /opt/tomcat/tomcat_1/conf && vim server.xml |
После сохранения первых экземпляров server.xml перейдем к обновлению второго. На этот раз мы внесем те же изменения, что и для первого server.xml, с некоторыми дополнительными изменениями для элементов 1 и 3. Поскольку оба экземпляра не могут использовать один и тот же порт завершения работы, обновите атрибут порта элемента сервера, чтобы использовать другой порт чем первый экземпляр. В этом примере я использую 8006, увеличивая один из портов отключения первых экземпляров. Следуя примеру 3, я также обновляю атрибут порта элемента соединителя AJP, чтобы использовать порт 8010, снова просто увеличивая единицу с порта AJP первых экземпляров.
1
|
cd /opt/tomcat/tomcat_2/conf && vim server.xml |
Второй экземпляр server.xml должен выглядеть следующим образом.
Пока мы работаем с каталогами conf, давайте продолжим и обновим файл tomcat-users.xml для каждого экземпляра. Начиная с /opt/tomcat/tomcat_1/conf/tomcat-users.xml добавьте следующие роли и пользовательские теги в конец файла перед закрывающим тегом tomcat-users. Обновите имя пользователя и пароль так, как вы хотите.
1
2
3
4
5
6
7
8
|
<role rolename= "manager-gui" /> <role rolename= "manager-script" /> <role rolename= "manager-jmx" /> <role rolename= "manager-status" /> <role rolename= "admin-gui" /> <role rolename= "admin-script" /> <user username= "admin" password= "admin" roles="manager-gui,manager-script,manager-jmx,manager- status,admin-gui,admin-script"/> |
Теперь нам нужно настроить инициализацию каждого экземпляра, создав файл среды, расположенный в каталоге bin экземпляра. Соответственно, /opt/tomcat/ndominstance‹/bin/setenv.sh
Я сделал специальный, специально подходящий для этой цели, так что вы можете просто скопировать мой, если хотите. Хотя это очевидно, вам нужно обновить $CATALINA_BASE
и $CATALINA_PID
для instance_2. Более того, если вы устанавливаете более двух экземпляров, следуйте их примеру. Обратите внимание, что параметры ниже для моей собственной конфигурации сервера. YMMV.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#!/bin/sh # Edit this file to set custom options # # Notes: # # * Tomcat accepts the JAVA_OPTS and CATALINA_OPTS parameters # * JAVA_OPTS are used during START/STOP/RUN # Edit this file to set custom options # Edit this file to set custom options # # Notes: # # * Tomcat accepts the JAVA_OPTS and CATALINA_OPTS parameters # * JAVA_OPTS are used during START/STOP/RUN # * CATALINA_OPTS are used during START/RUN # * This script is sourced by catalina.sh when it placed inside # * $CATALINA_BASE/bin (instance specify setup) or $CATALINA_HOME/bin directories. # ------------------------------------------------------------ JAVA_HOME= "/usr/local/jdk" CATALINA_HOME= "/opt/tomcat" CATALINA_BASE= "/opt/tomcat/tomcat_1" CATALINA_PID= "$CATALINA_BASE/temp/tomcat_1.pid" ################################# # *** JAVA OPTIONS SETTINGS *** # ################################# JVM_MODE= "-server" HEADLESS_MODE= "-Djava.awt.headless=true" BIT_MODE= "-d64" HEAP_OPTS= "-Xms128m -Xmx768m" GC_OPTS= "-XX:+AlwaysPreTouch -XX:+AggressiveOpts -XX:+UseG1GC -XX:ReservedCodeCacheSize=256m -XX:+UseCompressedOops -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djsse.enableSNIExtension=false -XX:SoftRefLRUPolicyMSPerMB=50" # # Example: # conf/jmxremote.access # john readwrite # conf/jmxremote.password # john johnpasswd # Make sure both jmxremote.{access,passsword} files only readable/writeable (600) by the owner, and # jxmremote.port must be unique for each server instance. # #JMXREMOTE_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false #-Dcom.sun.management.jmxremote.authenticate=true -Djava.rmi.server.hostname=localhost -Dcom.sun.management.jmxremote.password.file #=$CATALINA_BASE/conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access" export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: /usr/local/apr/lib JAVA_OPTS= "$JVM_MODE $HEADLESS_MODE $BIT_MODE $HEAP_OPTS $GC_OPTS" |
Затем, измените владельца и установите исполняемый бит для каждого экземпляра setenv.sh, и тогда мы будем делать некоторые настройки Apache.
1
2
|
chown tomcat.tomcat /opt/tomcat/tomcat_1/bin/setenv .sh && chmod +x /opt/tomcat/tomcat_1/bin/setenv .sh chown tomcat.tomcat /opt/tomcat/tomcat_2/bin/setenv .sh && chmod +x /opt/tomcat/tomcat_2/bin/setenv .sh |
Настройка виртуальных хостов Apache включает
Далее нам нужно убедиться, что Apache загружает и mod_proxy
и mod_proxy_ajp
как мы выполняем прокси на Tomcat. Просто введите следующую команду, чтобы убедиться, что оба модуля действительно загружены.
1
|
httpd -M | grep -i 'proxy' |
Вы должны увидеть оба модуля в выводе.
1
2
3
4
|
... proxy_module (static) proxy_ajp_module (static) ... |
Хотя почти во всех профилях cPanel / WHM оба модуля активны по умолчанию, если вы не видите оба модуля в выходных данных, вам необходимо обратиться к документации по cPanel / WHM для включения модулей.
Далее нам нужно включить файл конфигурации tomcat для каждого домена определенным образом, чтобы при внесении изменений через cPanel / WHM наши конфигурации не перезаписывались. Для поддержки этого мы добавим определенную структуру каталогов и файл tomcat.conf для обоих доменов.
Нам не нужно обновлять /usr/local/apache/conf/httpd.conf по умолчанию, чтобы включить наши конфигурации. Если вы обновите файл /usr/local/apache/conf/httpd.conf по умолчанию, ваши изменения будут потеряны после обновления обновления cPanel / WHM. Считай себя предупрежденным.
Чтобы включить наши конфигурации, структура каталогов должна отражать правильную структуру пользователей и доменов, чтобы apache мог загружать файлы конфигурации. Я снова использую domain1.com, domain2.com в качестве примеров. Чтобы проиллюстрировать далее, чтобы включить наш новый tomcat.conf для user1, domain1.com и user2, domain2.com, нам нужно создать tomcat.conf, используя следующую структуру.
1
2
|
/usr/local/apache/conf/userdata/std/2/user1/domain1 .com /tomcat .conf /usr/local/apache/conf/userdata/std/2/user2/domain2 .com /tomcat .conf |
Итак, давайте вернемся к этому. Сначала cd
в правильное местоположение для любого имени пользователя, которое использует ваш user1
и создайте каталоги. Если вы используете только одного пользователя и два домена, просто перейдите туда сейчас. В противном случае обновите ваш путь соответственно.
1
|
cd /usr/local/apache/conf/userdata/std/2 && mkdir user1 /domain1 .com && mkdir user2 /domain2 .com |
После создания каталогов создайте файл tomcat.conf для первого пользователя, добавьте следующие операторы Proxy и сохраните файл.
1
2
|
cd /usr/local/apache/conf/userdata/std/2/user1/domain1 .com && \ touch tomcat.conf && vim tomcat.conf |
01
02
03
04
05
06
07
08
09
10
|
ProxyRequests off ProxyPreserveHost on <Proxy *> Order allow,deny Allow from all < /Proxy > ProxyPass / ajp: //domain1 .com:8009/ ProxyPassReverse / ajp: //domain1 .com:8009/ |
Повторите то же самое для второго пользователя, заменив второй домен необходимыми значениями.
1
2
|
cd /usr/local/apache/conf/userdata/std/2/user2/domain2 .com && \ touch tomcat.conf && vim tomcat.conf |
01
02
03
04
05
06
07
08
09
10
|
ProxyRequests off ProxyPreserveHost on <Proxy *> Order allow,deny Allow from all < /Proxy > ProxyPass / ajp: //domain2 .com:8010/ ProxyPassReverse / ajp: //domain2 .com:8010/ |
Далее нам нужно вызвать скрипты для обновления конфигураций httpd.conf. Выполните следующие команды ниже, чтобы сделать это.
1
2
3
|
/usr/local/cpanel/bin/apache_conf_distiller --update /scripts/rebuildhttpdconf service httpd restart |
На данный момент у нас теперь должны быть запросы Apache к Tomcat, но мы не настроили сервер для автоматического запуска наших экземпляров Tomcat. Опять же, я создал служебный скрипт, который вы можете использовать для каждого экземпляра, если хотите. Создайте файл с именем tomcat_1
в каталоге /etc/init.d со следующим содержимым. После создания tomcat_1 просто скопируйте его как tomcat_2 и обновите значения $CATALINA_BASE
и $CATALINA_PID
как мы делали это ранее с конфигурациями setenv.sh
.
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
#!/bin/bash # chkconfig: 2345 20 80 # description: Tomcat 8 start/stop/status init.d script JAVA_HOME= /usr/local/jdk export JAVA_HOME #Add Java binary files to PATH PATH=$JAVA_HOME /bin :$PATH export PATH #CATALINA_HOME is the location of the bin files of Tomcat CATALINA_HOME= /opt/tomcat export CATALINA_HOME #CATALINA_BASE is the location of the configuration files of this instance of Tomcat CATALINA_BASE=$CATALINA_HOME /tomcat_1 export CATALINA_BASE #CATALINA_PID is the Tomcat instance process ID. CATALINA_PID= "$CATALINA_BASE/temp/tomcat_1.pid" export CATALINA_PID #TOMCAT_USER is the default user of tomcat TOMCAT_USER=tomcat export TOMCAT_USER #TOMCAT_USAGE is the message if this script is called without any options TOMCAT_USAGE= "Usage: $0 {\e[00;32mstart\e[00m|\e[00;31mstop\e[00m|\e[00;31mkill\e[00m|\e[00;32mstatus\e[00m|\e[00;31mrestart\e[00m}" #SHUTDOWN_WAIT is wait time in seconds for java proccess to stop SHUTDOWN_WAIT=20 tomcat_pid() { echo ps -fe | grep $CATALINA_BASE | grep - v grep | tr -s " " | cut -d " " -f2 } #USER LEVEL CHECK if [[ $EUID - ne 0 ]]; then echo "basename $0 requires root privileges." 1>&2 exit 1 fi start() { pid=$(tomcat_pid) if [ -n "$pid" ] then echo -e "\e[00;31mTomcat is already running (pid: $pid)\e[00m" else # Start tomcat echo -e "\e[00;32mStarting tomcat\e[00m" if [ user_exists $TOMCAT_USER = "1" ] then /bin/su - $TOMCAT_USER -s /bin/bash -c $CATALINA_BASE /bin/startup .sh else sh $CATALINA_BASE /bin/startup .sh fi status fi return 0 } status(){ pid=$(tomcat_pid) if [ -n "$pid" ]; then echo -e "\e[00;32mTomcat is running with pid: $pid\e[00m" else echo -e "\e[00;31mTomcat is not running\e[00m" fi } terminate() { echo -e "\e[00;31mTerminating Tomcat\e[00m" kill -9 $(tomcat_pid) } stop() { pid=$(tomcat_pid) if [ -n "$pid" ] then echo -e "\e[00;31mStoping Tomcat\e[00m" sh $CATALINA_BASE /bin/shutdown .sh let kwait=$SHUTDOWN_WAIT count=0; until [ ps -p $pid | grep -c $pid = '0' ] || [ $count -gt $kwait ] do echo -n -e "\n\e[00;31mwaiting for processes to exit\e[00m" ; sleep 1 let count=$count+1; done if [ $count -gt $kwait ]; then echo -n -e "\n\e[00;31mkilling processes didn't stop after $SHUTDOWN_WAIT seconds\e[00m" terminate fi else echo -e "\e[00;31mTomcat is not running\e[00m" fi return 0 } user_exists(){ if id -u $1 > /dev/null 2>&1; then echo "1" else echo "0" fi } case $1 in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; kill ) terminate ;; *) echo -e $TOMCAT_USAGE ;; esac exit 0 |
После того как вы создали файлы службы экземпляра, нам нужно установить бит выполнения и добавить файлы в приложение chkconfig, чтобы установить уровни запуска системы, над которыми будет работать Tomcat.
1
2
3
|
chmod +x /etc/init .d /tomcat_1 && chmod +x /etc/init .d /tomcat_2 chkconfig --add tomcat_1 && chkconfig --add tomcat_2 chkconfig --level 2345 tomcat_1 on && chkconfig --level 2345 tomcat_2 on |
Теперь мы должны иметь возможность запрашивать состояние нашего экземпляра сервера Tomcat с помощью команд системной службы.
1
|
service tomcat_1 |
1
|
Usage: /etc/init .d /tomcat_1 {start|stop| kill |status|restart} |
Теперь мы можем просто вызвать каждый скрипт для инициализации экземпляров Tomcat, перезапустить Apache, и каждый домен будет перенаправлять на свой собственный экземпляр Tomcat.
1
|
service tomcat_1 start && service tomcat_2 start && service httpd restart |
Congrats! Теперь у вас есть несколько экземпляров Tomcat 8, установленных на Java 8, работающих за веб-сервером Apache в Centos с cPanel / WHM.
До следующего раза…
Ссылка: | Tomcat 8 на Java 8 Позади Apache на CentOS от нашего партнера по JCG Эдварда Беккета в блоге Design Develop Deliver . |