miércoles, 3 de julio de 2013

Liferay Portal sobre Google Compute Engine

Después de haber usado Linode por un tiempo hemos encontrado que una alternativa viable y económicamente flexible es ejecutar Liferay Portal sobre Google Compute Engine . Este último ofrece un entorno completo de ejecución, simple de configurar y cómodo en términos de administración y costos, con la posibilidad de usar diferentes distribuciones de Linux así como la posibilidad de enlazarnos a otros servicios en cloud de google como CloudStorage y CloudSQL u otros servicios externos. 

Procedimiento de instalación y configuración de Liferay Portal en Google Compute Engine(GCE).

Los pasos para tener una instancia de Liferay Portal corriendo sobre Google Compute Engine se describen a continuación. Se asume en este caso que el usuario ya tiene una cuenta activa de en Google Cloud y que ha activado el billing para el proyecto. 

Paso 1 - Crear una instancia de compute engine 


  1. Haga click en el proyecto creado con billling activo (ej, miempresa-gce-demo-001)
  2. Ingrese los datos de solicitados: nombre de la instancia, descripción, tags y metadatos (son útiles para identificar el uso o cliente de la instancia etc). Seleccione además un sistema operativo para la instancia ( Puede seleccionar Debian7 por ejemplo) teniendo cuidado de no usar uno que esté marcado como "deprecated".  Finalmente haga click en el botón "Create". 
  3. Espere unos segundos hasta que la instancia esté activa (aparecerá en el listado). Cuando esté lista haga click sobre el nombre de la instancia para ver los datos en detalle. Tome nota de la dirección IP pública asignada, el ID del proyecto (project-id)(esquina superior izquierda) y ID de la instancia (instance-id).

Paso 2 - Conectarse a la instancia vía SSH 


  • Descargue e instale la aplicación "gcutil". Esta permitirá el control y acceso a las instancias de GCE desde la consola del sistema operativo. La herramienta se puede descargar de: gcutil site.
  • Una vez instalada la instancia ejecute el siguiente comando para conectarse por primera vez:  
         gcutil ssh --project=proyect_id instance-id

          La primera vez seleccione la contraseña deseada y el programa se encargará de dejar         
          la autorización creada para el cliente ssh la próxima vez. 

          Nota. Este proceso puede tardar aproximadamente 5 minutos la primera vez, así que   
          tenga paciencia. 
  • Cuando haya ingresado quedará en un shell estándar de Linux que podrá usar normalmente.

Paso 3 - Configuración del entorno de usuario 

Una vez en el shell de nuestra instancia de GCE se recomienda crear un entorno de trabajo estándar sobre el cual podamos trabajar fácilmente  a futuro. Nuestra recomendación es usar la siguiente:

mkdir app src tmp 
chmod 1777 

apps: binarios (ej, jboss + liferay) 
src: fuentes usadas para la instalación de paquetes propios o de terceras partes
tmp: carpeta de temporales local en caso de que se tengan múltiples instancias de servidor de aplicaciones y se quieran evitar conflictos con acceso a temporales. 

Paso 4 - Instalación de JDK 7 

El siguiente paso es instalar el JDK. Para el caso se instalará el JDK7. Puede instalarlo usando el siguiente comando:

sudo apt-get install openjdk-7-jdk

Una vez finalice verifique que está correctamente instalado y disponible en el PATH usando:

java -version 

Si tiene problemas verifique la instalación y repita el proceso. 

Paso 5 - Descargar Liferay Portal CE a la instancia 


  • Desde el sitio oficial de Liferay Portal http://www.liferay.com descargue la versión comunitaria o un demo de la versión Enterprise (es la recomendada para aplicaciones en producción). 
  • Para descargarla a la instancia puede usar wget (copiando y pegando el enlace) o descargarla a su máquina y transferirla luego. 
  • Copie el paquete descargado en la carpeta src creada previamente. 
  • Descomprima el paquete con destino a la carpeta tmp: 
          tar xzf liferay-portal-ce-**.tar.gz -C  ~/apps
  • Vaya a la carpeta apps y cree un link simbólico a la carpeta de instalación de Liferay
    ln -s liferay-portal-ce-** liferay61     
         Nota. Este paso no es necesario pero ahorrará tiempo durante la administración   
                    normal.

Paso 7 - Configuración básica e inicio del portal por primera vez 

Dado que el portal por defecto solo escucha en localhost es necesario ajustar la configuración  para que el conector web del servidor de aplicaciones se asocie a todas las interfaces disponibles, para el caso se asume que el bundle de liferay que se está usando es el que incluye JbossAS.  Una forma simple de hacerlo es crear un script del shell adicional que envíe el parámetro de binding al script de arranque del dominio así:

cd ~/apps/liferay61/jboss*/bin
echo "#!/bin/bash" >> start-liferay.sh 
echo "./standalone.sh -b 0.0.0.0 1> ../standalone/log/ \\
       mi-liferay.log &" >> start-liferay.sh 
chmod +x start-liferay.sh 
./start-liferay.sh & 

Puede verificar el inicio del portal usando tail así:

tail -f ~/apps/liferay61/jboss*/standalone/log/mi-liferay.log 

Una vez haya iniciado puede continuar con el paso siguiente. 

Nota. Se incluye la redirección para poner el portal en background y que no se caiga si cerramos la consola. 

Paso 8 - Configuración de firewall para acceso al servicio 

El portal escucha por defecto en el puerto 8080 por lo que será necesario adicionar una regla al firewall de la instancia para admitir conexiones a dicho puerto. Para el caso se asume que es un servicio público pero bien podría estar limitado a una IP o red específica. 

Para agregar la regla vaya al panel de control de Google Cloud, haga click en el proyecto que crearon, luego click en el menú lateral "Networks". En la sección "Firewalls" seleccione "Create new". 

Una vez allí ponga un nombre a la regla, ej "liferay", una descripción, en la sección de "Protocols & ports" escriba "tcp:8080". Finalmente de click en "Create".

Paso Final. Conectarse a la instancia 

Una vez creada la regla de firewall ya podrá conectarse desde el navegador usando la IP pública de la instancia y apuntando al puerto 8080. El primer paso será configurar Liferay para el inicio (el proceso es muy sencillo y no vale la pena entrar en detalles aquí). Y eso es todo!. El proceso completo puede tardar menos de treinta minutos lo que nos da un nivel de maniobra impresionante a la hora de configurar sitios de prueba, demos para clientes e incluso nuevos sitios. 

Notas finales y recomendaciones 


  • Si la instancia se reinicia o inactiva los datos se perderán. Es importante crear discos con almacenamiento permanente que se monten al inicio de la instancia(s) y que contengan el portal y el JDK aislados. Esto con el fin de reducir los tiempos. 
  • Si se requiere el uso de múltiples instancias con propósito específico vale la pena usar una herramienta de gestión que facilite el trabajo como  RightScale (http://www.rightscale.com)
  • Si se requiere el uso de balanceadores puede utilizarse nginx (http://www.nginx.org ) en un nodo de balaceo y un grupo de nodos adicionales "atrás". 
  • Si se requiere el uso de bases de datos externas lo mejor es usar Google Cloud SQL que es enganchable directamente y ofrece driver jdbc compatible con el servidor de aplicaciones (tomcat, jboss etc).