При создании реального приложения вам часто приходится сталкиваться с различными этапами программного обеспечения. Наиболее распространенными этапами являются разработка, тестирование и производство, но вы можете иметь гораздо больше. Это означает, что вам нужна другая среда для развертывания приложения на каждом из текущих этапов. Вы используете разные среды, чтобы иметь возможность выполнять управление версиями, разные конфигурации, тестировать исправления ошибок и так далее. Это также создает проблемы при обновлении сред, изменении общей конфигурации или отслеживании серверов. Я покажу вам, как это сделать с 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 Роберто Кортеса в блоге |