Por Sebastián Scarano @develsas. La versión original de este artículo está disponible en el Blog oficial de Openshift
Ya está en línea el contenido del webinar en el que mostramos cómo desarrollar una aplicación de Play 2.0, combinando Java Y Scala en la misma aplicación, y ponerla en producción en Openshift.
Cuando todas las opciones no son suficientes
Hace tan sólo algunos días nos enteremos del lanzamiento de un nuevo tipo de aplicación en Openshift denominada “do-it-yourself” o “hágalo-usted-mismo”. En este artículo mostraremos cómo podemos sacar el máximo provecho de esta nueva herramienta que se suma al arsenal de Openshift.
¿Qué es Play? Play es un framework que nos permite desarrollador aplicaciones Web, con Java o Scala, de una manera mucho más fácil, permitiéndonos alcanzar niveles de productividad que hasta el momento parecían patrimonio exclusivo de los frameworks basados en lenguajes dinámicos, como rails o django. Play forma parte también de los nuevos frameworks que se atrevieron a darle la espalda a la API de servlets y decidieron tomar otro rumbo. Es así como Play implementa su propio servidor http, sumamente liviano y optimizado, preparado para funcionar de manera asincrónica. Todo esto haciendo uso de Netty, una librería específicamente pensada para desarrollar este tipo de servidores, y que casualmente forma parte del stack de Jboss.
Ahora bien, si ya conoce Openshift, sabrá que le brinda múltiples opciones a la hora de desarrollar y poner en producción sus aplicaciones en la nube de Red Hat. Puede elegir trabajar con PHP, Ruby, Perl, Python, Node.js o Java. Y en lo que respecta a la base de datos puede elegir entre MySQL, PostreSQL y MongoDB.
Sin embargo, a pesar de esta abundante cantidad de opciones, el desarrollo de aplicaciones web se mueve a un ritmo tan rápido que ninguna plataforma es capaz de seguirle el paso. Cada día es más común trabajar con servidores http hechos a medida, construidos pensando en alta escalabilidad con bajo consumo de recursos. En lo que respecta a Java, el omnipresente servlet container, ya ha dejado de ser la única opción disponible.
Frente a este panorama, ¿qué podemos hacer para soportar todas estas heterogéneas tecnologías en constante movimiento? Bueno, los ingenieros de Red Hat dieron con una solución muy simple, pero al mismo tiempo sumamente poderosa.
Presentando el tipo de aplicación DIY – Hágalo-usted-mismo
Estos son los tipos de aplicación actualmente soportados en Openshift: jbossas-7, python-2.6, jenkins-1.4, ruby-1.8, diy-0.1, php-5.3, and perl-5.10
Bueno, no cuesta mucho darse cuenta de qué trata cada uno, salvo uno de ellos que se ve un tanto sospechoso: diy-0.1
Una aplicación “DIY” no es más que una aplicación completamente vacía, sin ningún framework ni servidor previamente cargado, listo para que lo personalicemos según nuestras propias necesidades. Con este nuevo tipo de aplicación, Openshift está comenzado a hacer más difusa la línea que separa un IaaS (Infraestructura como servicio) de un PaaS (Plataforma como servicio), poniendo a nuestro alcance un entorno controlado y escalable, pero al mismo tiempo dándonos la libertad para implementar la tecnología que mejor se ajuste a nuestras necesidades. [Tenga en cuenta que al momento de escribir este artículo, el tipo de aplicación DIY se encuentra en estado experimental]
Soporte nativo de Play en Openshift
Para mostrar las posibilidades que este nuevo tipo de aplicación pone en nuestras manos, implementaremos uno de los pedidos más votados en Openshift: soporte nativo para Play framework.
Hasta el día de hoy, para poner en producción una aplicación Play en Openshift, la única opción que teníamos era empaquetarla en un archivo war y desplegarla en un servlet container, lo cual funcionaba muy bien y era muy fácil, como explica este artículo. La única contra era que al hacerlo desperciábamos preciosos recursos y no podíamos hacer uso de prestaciones avanzadas de Play, como el manejo de requests asincrónicos.
Para darse una idea de qué es lo que nos proponemos conseguir, pueden echar una mirada al quickstart que preparamos para este artículo. Simplemente tienen que crear una nueva aplicación en Openshift, eligiendo como tipo diy-0.1, hacer un pull de los fuentes del quickstart, y luego hacer un push a su repositorio de openshift… ¡y eso es todo! Aquí están los pasos:
rhc app create -a play -t diy-0.1 -l yourlogin@yourmail.com cd play git remote add quickstart -m master https://github.com/opensas/play-example.git git pull -s recursive -X theirs quickstart master git push
Luego de completados esos pasos, su aplicación estará lista y esperándolo en http://play-yournamespace.rhcloud.com
También hemos preparado un quickstart para Play framework 2.
Ahora, si tiene ganas de meterse a fondo y ver cómo hemos logrado esto, y al mismo tiempo prepararse para empezar a crear sus propios quickstarts, no tiene más que seguir leyendo…
¡Adiós a los servlets!
Antes de intentar crear una aplicación de tipo DIY en Openshift, tendrá que familizarse con la tecnología que planea poner en producción. Es preciso conocer en detalle los pasos necesarios para configurar todas las herramientas necesarias en su propia estación de trabajo, para luego replicar esto en Openshift.
En el caso de una aplicación de Play framework, no necesitaremos un completo servidor de aplicaciones como Jboss, ni tampoco un servidor web al estilo Tomcat, es más, ni siquiera un simple servlet container. Tan sólo tendremos que instalar Play e iniciar el servidor http que trae incluido.
Hacer esto en su propia estación de trabajo es tan fácil como descargar Play de la web, descomprimirlo y ejecutar:
play new demo cd demo play start
Y para detener la aplicación:
play stop
Ahora tan solo tendremos que hacer esto mismo en nuestro servidor en Openshift.
Conociendo nuestra propia nube
Vamos a crear una nueva aplicación en Openshift, de tipo diy-1.0, llamada ‘raw’.
rhc app create -a raw -t diy-0.1 -l yourlogin@yourmail.com
Ahora echémosle una mirada a lo que acabamos de crear
rhc app show -a raw -l yourlogin@yourmail.com Application Info ================ raw Framework: diy-0.1 Creation: 2012-03-19T01:18:31-04:00 UUID: youruuid Git URL: ssh://youruuid@raw-yourdomain.rhcloud.com/~/git/raw.git/ Public URL: http://raw-yourdomain.rhcloud.com/
Puede navegar a http://raw-yourdomain.rhcloud.com/ para ver la página de nuestro sitio.
Es la misma página estática que encontraremos en raw/index.html
Ahora veamos que nos espera en nuestro repositorio local:
cd raw ls -a .git # nuestro repositorio local de git misc # un directorio vacío, puede borrarlo, nadie extrañará su presencia .openshift/action_hooks # aquí están los scripts para iniciar y frenar nuestra aplicación raw # la paǵina estática de error README # información de utilidad
Como ya dijimos, una aplicación completamente vacía, pero hay una carpeta que nos resultará particularmente interesante:
ls .openshift/actions_hooks build deploy post_deploy pre_build start stop
Estos son los scripts que Openshift utiliza para compilar, desplegar, iniciar y detener nuestra aplicación. Estos escripts son ejecutados en el servidor remoto de Openshift luego de cada push. Así que ahora los analizaremos en detalle para conocer mejor el entorno en que correrá nuestra aplicación.
Tomemos la salida del comando `rhc app show -a raw` y ejecutemos el siguiente comando:
ssh youruuid@raw-yourdomain.rhcloud.com
De esta manera podrá acceder a su máquina remota en openshift. En su directorio HOME encontrará los siguientes directorios:
git .env # Contiene la definición de las variables de entorno .git # Aquí está su propio repositorio de git, disponible en ssh://youruuid@raw-yourdomain.rhcloud.com/~/git/raw.git/ repo # $OPENSHIFT_DATA_DIR - Aquí está el contenido de la carpeta de su aplicación. # Cada vez que hace un push, los datos se guardan aquí. data # $OPENSHIFT_DATA_DIR - Este es un directorio persistente, # la info que guarde allí no se irá con cada reinicio del servidor logs # $OPENSHIFT_LOG_DIR - Aquí debería guardar los archivos de log de su aplicación # Es la carpeta que consulta el comando 'rhc app tail' /tmp/ # $OPENSHIFT_TMP_DIR - Carpeta temporal, aquí tenemos permiso de lectura y escritura
Estas son básicamente las carpetas que más nos interesan.
Basta de discursos, queremos ver el código
Para este artículo tomaremos una versión simplificada del quickstart para desplegar aplicaciones Play 1.x en Openshift. Agregamos links a los scripts originales para que pueda consultarlos.
Antes que nada tendremos que desarrollar el script .openshift/action_hooks/pre_build, que será el encargado de verificar que el framework se encuentre instalado. De no ser así, deberá descargarlo de la web y descomprimirlo.
El script podría ser algo tan simple como esto:
.openshift/action_hooks/pre_build (script en github)
if ! [[ -d ${OPENSHIFT_DATA_DIR}play-1.2.4 ]]; then curl -o ${OPENSHIFT_DATA_DIR}play-1.2.4.zip http://download.playframework.org/releases/play-1.2.4.zip unzip ${OPENSHIFT_DATA_DIR}play-1.2.4.zip rm ${OPENSHIFT_DATA_DIR}play-1.2.4.zip fi
Luego, para iniciar la aplicación:
.openshift/action_hooks/start (script en github)
cd ${OPENSHIFT_REPO_DIR} .openshift/action_hooks/stop #le indicamos a Play que guarde los archivos de auditoria en el directorio OPENSHIFT_LOG_DIR export PLAY_LOG_PATH=${OPENSHIFT_LOG_DIR} #ejecutamos la aplicación con el id openshift ${OPENSHIFT_DATA_DIR}play-1.2.4/play start --%openshift
No olvide configurar el su aplicación para que el servidor http escuche en el puerto ${OPENSHIFT_INTERNAL_PORT} de la dirección ${OPENSHIFT_INTERNAL_IP}
En nuestro caso simplemente deberemos agregar estas líneas al archivo application.conf:
%openshift.http.port=${OPENSHIFT_INTERNAL_PORT} %openshift.http.address=${OPENSHIFT_INTERNAL_IP}
Y ahora solo nos queda el script para detener la aplicación
.openshift/action_hooks/stop (script en github)
cd ${OPENSHIFT_REPO_DIR}
if [[ -f “server.pid” ]]; then
${OPENSHIFT_DATA_DIR}play-1.2.4/play stop
fi
¡Eso es todo!
Simplemente nos resta guardar los cambios en nuestro repositorio git y hacer un push a openshift:
git add . git commit -m "nuestra aplicación de Play corriendo en Openshift" git push
Entonces verá a nuestra criatura en acción, descargando e instalando play 1.2.4 del sitio de Play, y finalmente ejecutando nuestra aplicación. No sea tímido, hágale una visita en : http://raw-yourdomain.rhcloud.com/
Recuerde que esta es una versión simplificada del quickstart original, no estamos chequeando errores ni guardando información en el archivo de logs. Para un ejemplo más completo consulte los scripts del quickstart en Openshift.
Play y Openshift, jugando en la nube de Red Hat
Desde sus inicios Openshift se destacó por brindar soporte a una amplísima gama de frameworks y servidores web. Con esta nueva opción, también nos brinda las herramientas necesarias para personalizarlo según nuestras necesidades. Lo único que necesita es familiarizarse con el entorno de Openshift y comenzar a programar unos simples scripts en bash. Me pregunto qué creará la comunidad con este nuevo tipo de aplicación Do-It-Yourself en Openshift.
Por Sebastián Scarano @develsas
Sebastián Scarano es un desarrollador web de Buenos Aires, apasionado por compartir su conocimiento y desarrollar buenos sitios web. Actualmente se desempeña como líder de proyectos en el Ministerio de Trabajo, Empleo y Seguridad Social de la República Argentina. Durante el último año ha estado participando activamente de la comunidad Play. Más recientemente publicó el módulo Openshift para Play, para que todos puedan desplegar fácilmente sus aplicaciones en la nube de Red Hat.
Posted by Javier on 5 June, 2012 at 23:35
Me parece excelente el articulo, justo estaba coqueteando con Play Framework (cansado de JEE) y a la vez buscando alguna forma de mantener mis desarrollos en la nube.
Saludos desde el otro lado de la cordillera!
Posted by opensas on 6 June, 2012 at 2:29
Muchas gracias javier, te invito a sumarte a la lista de discusión en castellano http://groups.google.com/group/play-latam y a ayudarnos a traducir la documentación de play 2 https://github.com/opensas/Play20Es/wiki/Progress