понедельник, 6 мая 2013 г.

Использование разных значений CATALINA_HOME и CATALINA_BASE в Tomcat

По умолчанию в свежеустановленном Tomcat переменные окружения CATALINA_HOME и CATALINA_BASE равны между собой - и указывают на ту директорию, где установлен tomcat (в нашем случае это директория /opt/tomcat). Во 2-й главе Tomcat: The Definitive Guide от О'Рейли описан пример использования разных значений этих переменных. При этом CATALINA_HOME указывает на местоположение неизменяемых "глобальных" директорий (bin и lib), а CATALINA_BASE - локальных (conf, logs, temp, webapps и work). В книге подробно рассматривается использование такой конфигурации для запуска нескольких экземпляров tomcat на одном сервере, но лишь вскользь упомянуто гораздо более практически полезное применение: конфигурация, позволяющая обновлять tomcat простым обновлением символической ссылки. Ниже приводится пошаговая инструкция, как это сделать. Опыты проводились на Debian sid, версии tomcat: 7.0.32  и 7.0.37, установленные простой распаковкой архивов, скачанных с http://tomcat.apache.org в директорию /opt (предполагается, что в первоначальной конфигурации /opt/tomcat является симлинком на /opt/apache-tomcat-7.0.32).

1. Создаем файл-пускач /etc/init.d/tomcat (если он еще не создан). Минимальный пример взят из 1-й главы вышеупомянутой книги:

#!/bin/sh

export CATALINA_HOME=/opt/tomcat
export CATALINA_BASE=/opt/catalina

$CATALINA_HOME/bin/catalina.sh $*


2. при остановленном томкате переносим в /opt/catalina директории с изменяемой частью сервера:

$ cd /opt/tomcat
$ mv conf logs temp webapps work ../catalina

Подразумевается, что пользователь, под которым запускается томкат, должен иметь права на чтение и запись в эти директории (для conf достаточно чтения, для webapps - если не используется autoDeploy - тоже).

3. теперь для установки новой версии томката достаточно, распаковав дистрибутив в /opt, удалить ссылку (иначе ln -sf, имеющий последним аргументом директорию - в полном соответсвии с мануалом - создаст ссылку внутри нее):

$ rm -f /opt/tomcat

и создать заново:

$ ln -s /opt/apache-tomcat-7.0.37 /opt/tomcat

и перезапустить томкат. Поддиректории в /opt/catalina будут использоваться вместо поддиректорий в /opt/tomcat с теми же именами. Для достижения большей прозрачности конфигурации можно удалить из /opt/tomcat все лишнее, но строгой необходимости в этом шаге нет. Откат на старую версию в случае проблем с новой выполняется так же легко - обратной заменой ссылки.