Blog tecnico

Blog técnico

 

 

Contenido estático con Apache en Liferay

Contenido estático con Apache en Liferay

Liferay

Entre las tareas típicas de optimización de rendimiento de una aplicación al subirla al entorno de Producción, está la de evitar sobrecargar nuestro servidor de aplicaciones con tareas que puede realizar un servidor web. En este sencillo tutorial veremos cómo realizar esta tarea para un entorno concreto: Tomcat + Liferay + Apache (todo herramientas OpenSource).

 

Nos vamos a centrar en la configuración de Liferay, más que en la configuración de Apache para servir contenido estático de Tomcat. Supondremos que esa conexión entre Apache y Tomcat ya está configurada y que en el fichero $APACHE_HOME/sites-available/default ya tenemos algo como esto:

 

<VirtualHost *:80>

        ServerAdmin sysadm@eticco.com

        ServerName sample.eticco.local

        ServerAlias sample.eticco.local

        TransferLog /var/log/apache2/access-sample.log

        ErrorLog /var/log/apache2/errors-sample.log

        JkMount /* ajp13_worker

        JkUnMount /themes/* ajp13_worker

        JkUnMount /portlets/* ajp13_worker

        <LocationMatch ".WEB-INF.*">

                deny from all

        </LocationMatch>

</VirtualHost>

 

Con esta base, el objetivo será que los ficheros estáticos (hojas de estilo, javascript, imágenes) propios de nuestros temas y portlets sean servidos por Apache en lugar de por Tomcat. Pues bien, para conseguirlo únicamente hay que hacer uso en el fichero XML de configuración del tema o portlet, del tag virtual-path, en el que indicaremos la ruta de los ficheros estáticos.

 

Para los temas, debemos crear o editar el fichero WEB-INF/liferay-look-and-feel.xml con un contenido similar al de este ejemplo:

 

<?xml version="1.0"?>

<!DOCTYPE look-and-feel PUBLIC "-//Liferay//DTD Look and Feel 6.0.0//EN" "http://www.liferay.com/dtd/liferay-look-and-feel_6_0_0.dtd">

<look-and-feel>

        <compatibility>

                <version>6.0.6+</version>

        </compatibility>

        <theme id="Ejemplo" name="Ejemplo" >

           <virtual-path>/themes/sample-theme</virtual-path>

        </theme>

</look-and-feel>

 

Para los portlets, crear o editar el fichero liferay-portlet.xml, dentro del directorio WEB-INF del portlet, con un contenido como este:

 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.0.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_0_0.dtd">

<liferay-portlet-app>

<portlet>

<portlet-name>67</portlet-name>

<icon>/icon.png</icon>

<virtual-path>/portlets/sample-portlet</virtual-path>

<configuration-action-class>com.sample.action.ConfigurationActionImpl</configuration-action-class>

<instanceable>true</instanceable>

<header-portlet-css>/css/main.css</header-portlet-css>

<css-class-wrapper>web-form-portlet</css-class-wrapper>

</portlet>

......

</liferay-portlet-app>

 

La parte importante es, como decíamos, el tag virtual-path, que tiene que tener la ruta raíz para todos los temas (en el ejemplo, themes) o portlets (en el ejemplo, portlets) seguida de la ruta para nuestro tema o portlet concreto (en los ejemplos, sample-theme y  sample-portlet). Esto lo que hace es que, al acceder al portal, los ficheros estáticos del tema o portlet, en lugar de ir a buscarlos al directorio de nuestro portlet, los va a ir a buscar a ese directorio.

 

Para que el Apache sepa que es él el que debe servir esos ficheros estáticos, debemos cambiar un poco la conexión entre Apache y Tomcat, editando el fichero $APACHE_HOME/sites-available/default para añadir esto (debajo de 'JkMount /* ajp13_worker'):

 

        JkUnMount /themes/* ajp13_worker

        JkUnMount /portlets/* ajp13_worker

 

De este modo, el Apache redirigirá todas las peticiones al Tomcat SALVO las que empiecen por /themes o por /portlets. Lógicamente, esos ficheros estáticos deberán estar accesibles para el Apache, para lo que podemos hacer 2 cosas:

- Mantener los ficheros co el portlet y crear un enlace simbólico desde el directorio www del Apache al directorio correcto de webapps del Tomcat o

- Sacar los ficheros estáticos del tema/portlet y meterlos en el directorio www del Apache directamente.

 

Por último, hay que tener en cuenta, que si no usamos las rutas raíz por defecto para los estáticos de los temas y los portlets (es decir, /themes y /portlets) deberemos cambiar en el fichero de configuración de Liferay (portal-ext.properties), la propiedad theme.virtual.path (o portlet.virtual.path), para indicar qué ruta se ha de anteponer a los ficheros estáticos (tiene que coincidir con la raíz que se indicó antes):

 

theme.virtual.path=/themes

portlet.virtual.path=/portlets

 

Y eso es todo!!