При создании реального приложения вам часто приходится сталкиваться с различными этапами программного обеспечения. Наиболее распространенными этапами являются разработка, тестирование и производство, но вы можете иметь гораздо больше. Это означает, что вам нужна другая среда для развертывания приложения на каждом из текущих этапов. Вы используете разные среды, чтобы иметь возможность выполнять управление версиями, разные конфигурации, тестировать исправления ошибок и так далее. Это также создает проблемы при обновлении сред, изменении общей конфигурации или отслеживании серверов. Я покажу вам, как это сделать с 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/tomcatradcortez:tomcat radcortez$ ln -s apache-tomcat-7.0.64/ currentradcortez:tomcat radcortez$ lstotal 8drwxr-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.64lrwxr-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 instancesradcortez:tomcat radcortez$ cd instances/radcortez:instances radcortez$ mkdir developmentradcortez:instances radcortez$ lstotal 0drwxr-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 developmentradcortez:instances radcortez$ pwd/usr/local/share/java/tomcat/instancesradcortez: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$ lstotal 0drwxr-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 developmentdrwxr-xr-x 2 radcortez admin 68B Sep 24 02:06 productionradcortez:instances radcortez$ cp -rf ../current/conf/ development/confradcortez:instances radcortez$ cp -rf ../current/logs/ development/logsradcortez:instances radcortez$ cp -rf ../current/temp/ development/tempradcortez:instances radcortez$ cp -rf ../current/webapps/ development/webappsradcortez:instances radcortez$ cp -rf ../current/work/ development/workradcortez:instances radcortez$ ls development/total 0drwxr-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 confdrwxr-xr-x 2 radcortez admin 68B Sep 24 02:07 logsdrwxr-xr-x 3 radcortez admin 102B Sep 24 02:08 tempdrwxr-xr-x 7 radcortez admin 238B Sep 24 02:08 webappsdrwxr-xr-x 2 radcortez admin 68B Sep 24 02:08 workradcortez: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/bashTOMCAT_HOME="$(dirname $0)/.."cd $TOMCAT_HOME && TOMCAT_HOME=$PWD && cd - &> /dev/nullexport TOMCAT_HOMEexport 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.shradcortez:bin radcortez$ ln -s exec.sh startup.shradcortez:bin radcortez$ ln -s exec.sh shutdown.shradcortez:bin radcortez$ lstotal 32drwxr-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.shlrwxr-xr-x 1 radcortez admin 7B Sep 24 10:14 shutdown.sh -> exec.shlrwxr-xr-x 1 radcortez admin 7B Sep 24 10:13 startup.sh -> exec.shradcortez: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 Роберто Кортеса в блоге |