Статьи

Несколько экземпляров Tomcat

При создании реального приложения вам часто приходится сталкиваться с различными этапами программного обеспечения. Наиболее распространенными этапами являются разработка, тестирование и производство, но вы можете иметь гораздо больше. Это означает, что вам нужна другая среда для развертывания приложения на каждом из текущих этапов. Вы используете разные среды, чтобы иметь возможность выполнять управление версиями, разные конфигурации, тестировать исправления ошибок и так далее. Это также создает проблемы при обновлении сред, изменении общей конфигурации или отслеживании серверов. Я покажу вам, как это сделать с Tomcat . множественный-Tomcat экземпляры

Самый простой способ настроить несколько экземпляров Tomcat — это продублировать всю папку Tomcat и изменить несколько конфигураций. Я не советую делать это таким образом, поскольку его сложнее поддерживать, труднее раскручивать новые экземпляры и труднее обновлять. Вместо этого мы настроим экземпляры гораздо более гибким способом, дублируя только несколько вещей и сохраняя общую базовую папку для всех экземпляров.

Установка

Вам нужен Tomcat, конечно. Загрузите это здесь .

Я использовал версию 7.0, но это также должно работать с другими версиями. Я также делаю настройку в среде, подобной Unix. Это также может быть выполнено в окне Windows, но команды должны быть скорректированы.

Распакуйте установочную папку в каталог по вашему выбору. Я просто рекомендую сделать это в родительской папке, и вы можете использовать имя, например, tomcat или server .

Теперь вместо использования разархивированной папки мы создадим ссылку на нее, например: ln -s apache-tomcat-7.0.64/ current

Вот образец:

Tomcat Установить

01
02
03
04
05
06
07
08
09
10
radcortez:tomcat radcortez$ pwd
/usr/local/share/java/tomcat
radcortez:tomcat radcortez$ ln -s apache-tomcat-7.0.64/ current
radcortez:tomcat radcortez$ ls
total 8
drwxr-xr-x   4 radcortez  admin   136B Sep 24 01:49 .
drwxr-xr-x@ 26 radcortez  admin   884B Sep 24 01:38 ..
drwxr-xr-x  13 radcortez  admin   442B Sep 24 01:45 apache-tomcat-7.0.64
lrwxr-xr-x   1 radcortez  admin    21B Sep 24 01:49 current -> apache-tomcat-7.0.64/
radcortez:tomcat radcortez$

Настроить

Для простоты мы собираемся создать два экземпляра: development и production . Но имейте в виду, что вы можете создать столько, сколько захотите, внеся необходимые изменения в сценарии.

Папки

Создайте папку с именем instances или environments . Внутри создайте папку с именем development :

Экземпляры Tomcat

01
02
03
04
05
06
07
08
09
10
11
radcortez:tomcat radcortez$ mkdir instances
radcortez:tomcat radcortez$ cd instances/
radcortez:instances radcortez$ mkdir development
radcortez:instances radcortez$ ls
total 0
drwxr-xr-x  4 radcortez  admin   136B Sep 24 01:56 .
drwxr-xr-x  5 radcortez  admin   170B Sep 24 01:56 ..
drwxr-xr-x  2 radcortez  admin    68B Sep 24 01:56 development
radcortez:instances radcortez$ pwd
/usr/local/share/java/tomcat/instances
radcortez:instances radcortez$

Теперь скопируйте папки conf , logs , temp , webapps и work из папки установки Tomcat в development и production :

Настройка экземпляров Tomcat

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
radcortez:instances radcortez$ ls
total 0
drwxr-xr-x  4 radcortez  admin   136B Sep 24 02:06 .
drwxr-xr-x  5 radcortez  admin   170B Sep 24 01:56 ..
drwxr-xr-x  2 radcortez  admin    68B Sep 24 02:06 development
drwxr-xr-x  2 radcortez  admin    68B Sep 24 02:06 production
radcortez:instances radcortez$ cp -rf ../current/conf/ development/conf
radcortez:instances radcortez$ cp -rf ../current/logs/ development/logs
radcortez:instances radcortez$ cp -rf ../current/temp/ development/temp
radcortez:instances radcortez$ cp -rf ../current/webapps/ development/webapps
radcortez:instances radcortez$ cp -rf ../current/work/ development/work
radcortez:instances radcortez$ ls development/
total 0
drwxr-xr-x  7 radcortez  admin   238B Sep 24 02:08 .
drwxr-xr-x  4 radcortez  admin   136B Sep 24 02:06 ..
drwxr-xr-x  9 radcortez  admin   306B Sep 24 02:07 conf
drwxr-xr-x  2 radcortez  admin    68B Sep 24 02:07 logs
drwxr-xr-x  3 radcortez  admin   102B Sep 24 02:08 temp
drwxr-xr-x  7 radcortez  admin   238B Sep 24 02:08 webapps
drwxr-xr-x  2 radcortez  admin    68B Sep 24 02:08 work
radcortez:instances radcortez$

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

Дом и База

Идея заключается в том, чтобы поделиться общими папками Tomcat, и каждый экземпляр имеет копию своих личных папок, чтобы они не конфликтовали друг с другом. Tomcat определяет две переменные окружения, называемые CATALINA_HOME и CATALINA_BASE которые позволяют нам это делать.

Создайте папку bin в development экземпляров. Добавьте следующий скрипт exec.sh :

exec.sh

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
 
TOMCAT_HOME="$(dirname $0)/.."
cd $TOMCAT_HOME && TOMCAT_HOME=$PWD && cd - &> /dev/null
export TOMCAT_HOME
 
export CATALINA_HOME="$(readlink -f "$TOMCAT_HOME/../../current")"
export CATALINA_BASE="$(readlink -f "$TOMCAT_HOME")"
 
export CATALINA_OPTS="-Dhttp.port=8080 $CATALINA_OPTS"
export CATALINA_OPTS="-Dhttps.port=8443 $CATALINA_OPTS"
export CATALINA_OPTS="-Dajp.port=8009 $CATALINA_OPTS"
export CATALINA_OPTS="-Dshutdown.port=8005 $CATALINA_OPTS"
 
echo "JAVA_HOME set to $JAVA_HOME"
echo "CATALINA_BASE set to $CATALINA_BASE"
echo "CATALINA_HOME set to $CATALINA_HOME"
 
$CATALINA_HOME/bin/"$(basename "$0")" "$@"

Примечание. Если вы используете MacOSX, вам может потребоваться установить core-utils с помощью brew и заменить readlink на greadlink для достижения правильного поведения.

Этот скрипт собирается настроить правильные переменные конфигурации, чтобы они указывали на наш общий Tomcat и папки конкретных экземпляров. Обратите внимание, что свойства http.port , https.port , ajp.port и shutdown.port включены в переменную среды CATALINA_OPTS . С их помощью мы можем передать конкретную конфигурацию в файл server.xml . Tomcat достаточно умен, чтобы выполнять замену свойств, если у вас есть соответствующие заполнители.

файлы

Все эти операции выполняются в экземпляре папки development .

конф / server.xml

Отредактируйте файл conf/server.xml и conf/server.xml следующие изменения;

замещать По
8080 $ {Http.port}
8443 $ {Https.port}
8009 $ {Ajp.port}

Примечание. К сожалению, единственное место, где замена свойств не работает, это порт отключения. Я думаю, что это ошибка в Tomcat и должна быть исправлена. Итак, на данный момент нам нужно сохранить это в жестком коде.

бен / exec.sh

В папке bin создайте ссылки на exec.sh для следующих файлов: catalina.sh , startup.sh , shutdown.sh .

Скрипты Tomcat Bin

01
02
03
04
05
06
07
08
09
10
11
12
radcortez:bin radcortez$ ln -s exec.sh catalina.sh
radcortez:bin radcortez$ ln -s exec.sh startup.sh
radcortez:bin radcortez$ ln -s exec.sh shutdown.sh
radcortez:bin radcortez$ ls
total 32
drwxr-xr-x  6 radcortez  admin   204B Sep 24 10:14 .
drwxr-xr-x  8 radcortez  admin   272B Sep 24 08:07 ..
lrwxr-xr-x  1 radcortez  admin     7B Sep 24 10:13 catalina.sh -> exec.sh
-rw-r--r--  1 radcortez  admin   651B Sep 24 09:32 exec.sh
lrwxr-xr-x  1 radcortez  admin     7B Sep 24 10:14 shutdown.sh -> exec.sh
lrwxr-xr-x  1 radcortez  admin     7B Sep 24 10:13 startup.sh -> exec.sh
radcortez:bin radcortez$

Это позволит вам вызвать исходный Tomcat , но exec.sh Магия выполняется строкой $CATALINA_HOME/bin/"$(basename "$0")" "$@" в скрипте exec.sh

Бег

Экземпляр должен быть готов к выполнению. Просто запустите его, как обычно, sh catalina.sh run или sh startup.sh из папки экземпляра development .

Дополнительные экземпляры

Просто скопируйте папку экземпляра development в bin/exec.sh и отредактируйте bin/exec.sh чтобы обновить его с помощью других портов. Вы можете использовать 7080 для http, 7443 для https, 7009 для ajp и 7005 для выключения.

Поскольку замена свойства не работает должным образом для порта отключения, нам нужно вручную отредактировать conf/server.xml из production экземпляра и заменить 8005 на 7005. Когда эта ошибка исправлена ​​и вы фактически используете свойство, у вас нет беспокоиться об этом.

Примечание. Может потребоваться восстановить правильные ссылки в сценариях catalina.sh , startup.sh и shutdown.sh хранящихся в папке bin .

После этого ваш второй экземпляр production готов к запуску. Если вам нужно больше, просто повторите последние шаги, выбрав порты, которые не конфликтуют с уже настроенными экземплярами.

надбавки

С этой настройкой вы можете теперь:

  • Создать новые экземпляры легко с минимальными изменениями. На самом деле вы можете иметь один нетронутый неизмененный экземпляр, который вы можете использовать для копирования для создания других.
  • Обновите версию Tomcat, просто установив новый дистрибутив и обновив ссылку на current .
  • Если вы поместите файлы libs папку libs установки HOME , они сразу станут доступны всем экземплярам.
  • Вместо того, чтобы дублировать папку conf , вы на самом деле можете ссылаться на папку в HOME а также делиться конфигурацией между всеми средами. Или просто ссылку на файлы, которые вы хотите поделиться.
  • Удалите экземпляр, просто удалив его BASE папку.
  • Также работает для TomEE !

альтернативы

Если вам не нравится эта настройка, вы можете попробовать использовать Docker . Проверьте следующее сообщение: Get Into Docker .

Дайте мне знать, если это было полезно для вас или у вас возникли проблемы с выполнением инструкций блога!

Ссылка: Несколько экземпляров Tomcat от нашего партнера JCG Роберто Кортеса в блоге