9 nov 2009

Integrando Apache2 + mod_jk + Tomcat Parte II

De mi entra anterior Integrando Apache2 + mod_jk + Tomcat me han surgido algunos inconvenientes que resolvere en este post. Además de aprovechar a plantear el ambiente y la necesidad que me lleva a realizar esta tarea.

Actualmente utilizo apache2 para el alojamiento de sitios con php, pero ha surgido el requerimiento de servir paginas jsp en el mismo server. Las antiguas paginas que contiene apache, en php deben seguir funcionando, como asi también los nuevos sitios jsp.

Siguiendo el post de instalacion de tomcat el cual fue bello, rápido, practico y demasiado automático se me crearon dos directorios para la administración de tomcat.

#ls -l /usr/share/tomcat5.5
    /usr/share/tomcat5.5/webapps2 --> /var/lib/tomcat5.5/

#ls -l /usr/share/tomcat5.5-webapps
    /usr/share/tomcat5.5-webapps/ROOT
    /usr/share/tomcat5.5-webapps/manager

Leyendo el archivo de configuración /etc/default/tomcat5  y de inicio /etc/init.d/tomcat podemos tener una buena vision sobre la instalación. Aunque la descompresion de archivos war se almacera en /var/lib/tomcat5.5/ en vez de /usr/share/tomcat5.5-webapps, cosa que no sucede  con los sites por default que estan en este ultimo directorio. Cosa que leyendo los scripts no pude descifrar (a lo mejor alguien pueda comentarlo), por lo opte por la desinstalación completa de tomcat 5.

# apt-get remove --purge tomcat5.5 tomcat5.5-admin tomcat5.5-webapps

 La instalacion de tomcat desde los binarios es muy sencilla, descargamos el archivo *.tar.gz desde tomcat, comprobamos que se haya descargado correctamente utilizando los hash md5 o gpg. Yo en mi caso los descomprimi en /usr/local/src

#tar xzvf apache-tomcat-6.0.20.tar.gz -C /usr/local/src
#ln -s /usr/local/src/apache-tomcat-6.0.20 /usr/local/apache-tomcat
Agregar las variables de entorno necesarias para la ejecucion de tomcat
JAVA_HOME = Directorio donde se encuentra la instalacion de java
CATALINA_HOME= Directorio donde se encuentra la instalación de tomcat

Una vez seteadas estas variables procedemos a inciar tomcat
#/usr/local/apache-tomcat/bin/start.sh
Chequeamos en el browser la pagina de inicio de tomcat, ingresando la dirección:
http://localhost:8080 ó http://localhost:8010

Instalamos el modulo libapache2-mod-jk
#apt-get install libapache2-mod-jk
Copiamos el archivo de ejemplo en mod-aviables
#cp /usr/share/doc/libapache2-mod-jk/httpd_example_apache2.conf /etc/apache2/mods-available/mod_jk.conf; cd /etc/apache2; ln -s mods-available/jk.conf mods-enabled/jk.conf; /etc/init.d/apache2 restart

Configuramos los worker's a los valores de las variables previamente configuradas.
#>vi /etc/libapache2-mod-jk/workers.properties

workers.tomcat_home=/usr/local/apache-tomcat #$CATALINA_HOME
workers.java_home=/usr/lib/jvm/java-6-sun #$JAVA_HOME
worker.list=ajp13_worker # El nombre de/los workes que utilizaremos.
worker.ajp13_worker.port=8009 # Puerto de comunicación apache - tomcat
worker.ajp13_worker.host=localhost #host
worker.ajp13_worker.type=ajp13 # Protocolo de comunicación

Configuramos el modulo de apache jk.conf. Aqui no hay demasiado de tocar, solamente el nivel de alerta y que directorio de $CATALINA_HOME/webapps sera mapeado de apache a tomcat.

#>vi /etc/apache2/mods-available/jk.conf

# Cambio a debug para chequear el funcionamiento lugo paso a error. Esto es
# debido que si los sitios que poseemos (en apache) generan demasiado trafico
#corremos el riesgo de que los logs nos llenen el disco/particion.
JkLogLevel      debug

#Aqui esta el quid de la cuestion, estas directivas le diran a apache que
#directorios seran mapeados a tomcat a traves del worker, en este caso
#ajp13_worker, usando el protocolo ajp3. Debido a un par de ensayos opte por deshabilitar esta opcion en este archivo y setearla en el virtualhost dentro de los sitios de apache, lo cual le ha dado mayor claridad al seteo de JkMount.

# send all requests ending in .jsp to ajp13_worker
#JkMount /*.jsp ajp13_worker
#JkMount /* ajp13_worker
#send all requests ending /servlet to ajp13_worker
#JkMount /*/servlet/ ajp13_worker

Con todo esto ya estoy en condiciones de volver a la configuración del post anterior, donde agregaba un virtualhost a apache para que fuese mapeado a tomcat. Obvio que tiene modificaciones tambien.

#>vi /etc/apache2/site-aviable/prueba

VirtualHost IP:80>


# No es necesario, JkMount determina el mapeo a $CATALINA_HOME/webapps
# y la expresion que le pasemos a JkMount
#DocumentRoot /usr/share/tomcat5.5/webapps 

ServerAdmin admin@midominio.com
ServerName  prueba.localdomain

#Los paths dentro de $CATALINA_HOME/webapps que serán manejados por el 
#protocolo ajp3.
JkMount /prueba/servlet/* ajp13_worker
JkMount /prueba/*.jsp ajp13_worker


/VirtualHost>

#> a2ensite prueba
#> /etc/init.d/apache2 restart

Y listo tenemos un nuevo sitio que servira paginas jsp en el mismo puerto que apache y el resto de los sitios.

Cabe destacar que se han obviado configuraciones de seguridad sobre tomcat, las cuales serán un próximo tema a tratar.