Instalación de Joomla en OpenShift


OpenShift es la Plataforma como servicio (PaaS) de cloud computing de Red Hat. OpenShift puede utilizarse de varias maneras: mediante su cloud público que se denomina OpenShift Online, o bien instalando directamente en un cloud privado el software OpenShift Origin disponible en GitHub.

En esta entrada vamos a explicar los pasos que hay que seguir para desplegar la aplicación web Joomla en OpenShift Online utilizando una cuenta gratuita limitada, lo que OpenShift denomina FreeShift, poniéndo el énfasis en comprender los pasos que damos. En este caso hemos elegido Joomla porque por una parte es una aplicación muy sencilla de instalar y por otro lado porque no está preconfigurada en OpenShift, lo que permite obtener una visión más general del proceso que puede utilizarse de forma muy similar para instalar cualquier otra aplicación web.

Conceptos previos

OpenShift tiene su propia terminología. Sería de agradecer que las diferentes plataformas de cloud (OpenShift, Windows Azure, Google App Engine, …) utilizasen los mismos términos, pero ahora mismo no es así, cada cual utiliza su propio vocabulario, posiblemente porque no son exactamente las mismas cosas y quizás porque las PaaS todavía están evolucionando y cambiando rápidamente. En el caso de OpenShift hay que entender explicar previamente el significado de los siguientes elementos:

  • Gear: Es un contenedor dentro de una máquina virtual con unos recursos limitados para que pueda ejecutar sus aplicaciones un usuario de OpenShift. En el caso de utilizar una cuenta gratuita tipo FreeShift se pueden crear como máximo tres gears de tipo «small», cada uno de ellos puede utilizar un máximo de 512MB de RAM, 100MB de swap y 1GB de espacio en disco. Nuestra aplicación se desplegará y ejecutará utilizando estos recursos asociados al «gear».
  • Cartridge: Son contenedores de software preparados para ejecutarse en un gear. En principio sobre cada gear pueden desplegarse varios cartridges, por ejemplo existen cartridges de php, ruby, jboss, MySQL, django, etc. Por ejemplo para una aplicación como joomla necesitaremos los cartridges de PHP y MySQL.

Pasos iniciales

Instalar OpenShift Client Tools

Es posible crear un gear y añadir los cartridges a través de la web de OpenShift, pero vamos a explicar la forma de hacerlo desde la línea de comandos del equipo cliente utilizando rhc. Las OpenShift Client Tools, conocidas como rhc, son unas aplicaciones escritas en Ruby y disponibles como gemas, por lo que la instalación en cualquier sistema es bastante sencilla: instalar ruby, rubygems y posteriormente instalar la gema rhc. En el caso de un sistema Debian sería algo como:

root@equipo:~# apt-get install ruby rubygems
root@equipo:~# gem install rhc

En el caso de Debian, los ejecutables de las gemas se instalan en el directorio /var/lib/gems/1.8/bin/ por lo que no están en el PATH de ejecutables, para incluirlas ejecutamos la instrucción:

root@equipo:~# ln -s /var/lib/gems/1.8/bin/rhc* /usr/local/bin/

Además rhc utiliza git, por lo que deberemos instalarlo si no lo tenemos ya en el equipo cliente.

Configuración inicial de OpenShift

Para realizar la configuración inicial de rhc, ejecutamos la instrucción:

usuario@equipo:~# rhc setup
OpenShift Client Tools (RHC) Setup Wizard

This wizard will help you upload your SSH keys, set your application namespace, and check that other programs like Git are properly installed.

Login to openshift.redhat.com: [escribir correo-e]
Password: ******

Created local config file: /home/usuario/.openshift/express.conf
The express.conf file contains user configuration, and can be transferred to different computers.

We will now check to see if you have the necessary client tools installed.

Checking for git ... found

Checking for your namespace ... found namespace:
    espacio_de_nombres

Checking for applications ... None

Thank you for setting up your system.  You can rerun this at any time by calling 'rhc setup'.

Espacio de nombres (namespace)

Cada cuenta de usuario en OpenShift Online está asociada a un «espacio de nombres» para generar un FQDN único para cada gear. En la configuración inicial de la cuenta habrá que seleccionar un espacio de nombres que sea único, este espacio de nombres se aplicará automáticamente a todos los gears que se creen. Supongamos a partir de ahora que nuestro espacio de nombres en OpenShift Online fuese «pruebaos» y el primer gear que creásemos tuviera el nombre «joomla», entonces esta aplicación sería accesible a través de la url http://joomla-pruebaos.rhcloud.com (no es un espacio de nombres real).

Creación del gear para Joomla

Vamos a crear el gear adecuado para ubicar posteriormente joomla. Joomla es una aplicación web escrita en PHP y que almacena los datos en una base de datos relacional, habitualmente MySQL. De forma habitual tenemos que desplegar una aplicación como Joomla en un LAMP (Linux, Apache, MySQL y PHP), la novedad con el uso de una PaaS es que el gear no tiene inicialmente estos componentes, serán cartridges que iremos agregando. Esto ofrece una solución muy versátil ya que en función del tipo de aplicación que vayamos a desplegar elegiremos un cartridge u otro. Para saber los cartridges disponibles:

usuario@equipo:~$ rhc cartridge list

Use the short name of a cartridge when interacting with your applications.

Short Name          Full name                                 New apps only
==========          =========                                 =============
diy-0.1             Do-It-Yourself                            Y
jbossas-7           JBoss Application Server 7.1              Y
jbosseap-6.0        JBoss Enterprise Application Platform 6.0 Y
jenkins-1.4         Jenkins Server 1.4                        Y
nodejs-0.6          Node.js 0.6                               Y
perl-5.10           Perl 5.10                                 Y
php-5.3             PHP 5.3                                   Y
python-2.6          Python 2.6                                Y
ruby-1.8            Ruby 1.8                                  Y
ruby-1.9            Ruby 1.9                                  Y
jbossews-1.0        Tomcat 6 (JBoss EWS 1.0)                  Y
zend-5.6            Zend Server 5.6                           Y
10gen-mms-agent-0.1 10gen Mongo Monitoring Service Agent 0.1
cron-1.4            Cron 1.4
haproxy-1.4         HAProxy 1.4
jenkins-client-1.4  Jenkins Client 1.4
mongodb-2.2         MongoDB NoSQL Database 2.2
mysql-5.1           MySQL Database 5.1
metrics-0.1         OpenShift Metrics 0.1
phpmyadmin-3.4      phpMyAdmin 3.4
postgresql-8.4      PostgreSQL Database 8.4
rockmongo-1.1       RockMongo 1.1
switchyard-0.6      SwitchYard 0.6

Podemos crear nuestra aplicación en OpenShift utilizando de inicio el cartridge de PHP:

usuario@equipo:~$ rhc app create joomla php-5.3
Password: ********

Creating application 'joomla'
=============================

  Namespace: pruebaos
  Cartridge: php-5.3
  Gear Size: default
  Scaling:   no

Your application's domain name is being propagated worldwide (this might take a minute)...
The authenticity of host 'joomla-pruebaos.rhcloud.com (184.72.167.80)' can't be established.
RSA key fingerprint is aa:aa:aa:aa:0e:fc:02:d7:72:7e:ae:80:c0:90:88:a7.
Are you sure you want to continue connecting (yes/no)? yes
Cloning into 'joomla'...
done

joomla @ http://joomla-pruebaos.rhcloud.com/
========================================
  Application Info
  ================
    Created   = 11:59 AM
    UUID      = 1111110a2539462a8464c95ed95d3ef6
    Gear Size = small
    Git URL   = ssh://1111110a2539462a8464c95ed95d3ef6@joomla-pruebaos.rhcloud.com/~/git/joomla.git/
    SSH URL   = ssh://1111110a2539462a8464c95ed95d3ef6@joomla-pruebaos.rhcloud.com
  Cartridges
  ==========
    php-5.3

RESULT:
Application joomla was created.

Que a grandes rasgos realiza los siguientes pasos:

  • Crea un gear small para el usuario en una de las máquinas virtuales de OpenShift Online
  • Crea un UUID para ese gear y crea un usuario en una de las máquinas virtuales de OpenShift con el UUID como nombre de usuario
  • Copia la clave pública del usuario en las claves ssh autorizadas para que se pueda acceder de forma remota
  • Crea un nombre de dominio asociado al gear y lo incluye en el servidor DNS de rhcloud.com
  • Instala el cartridge php-5.3: esto es un servidor http con soporte para php y lo lanza asociado a una dirección IP 127.X.X.X
  • Lanza el servidor http
  • Crea un repositorio git en el «home» de la aplicación web
  • Clona el repositorio git en el equipo local
  • Añade la clave pública del servidor ssh a los servidores conocidos por el usuario local

Podemos comprobar que se han creado en nuestro equipo los directorios .git y joomla/, en el primero se guarda toda la información referente a la utilización de git y en el segundo el contenido es:

deplist.txt  libs  misc  php  README

Podemos acceder a nuestra aplicación a través de la URL http://joomla-pruebaos.rhcloud.com, aunque obviamente inicialmente sólo muestra una pantalla de bienvenida:

openshift welcome

Todavía no podemos desplegar Joomla, ya que es necesario que el gear incluya soporte para una base de datos relacional, por lo que añadimos el cartridge MySQL:

usuario@equipo:~$ rhc cartridge add mysql --app joomla
Password: ********

Adding 'mysql-5.1' to application 'joomla'
Success
mysql-5.1
=========
  Properties
  ==========
    Username       = admin
    Password       = xUJajk15nc9C
    Database Name  = joomla
    Connection URL = mysql://127.3.86.129:3306/

Es importante que guardemos estos parámetros puesto que serán necesarios para la configuración posterior de la aplicación joomla.

Acceso a OpenShift por ssh

Una de las peculiaridades de OpenShift es que permite acceder mediante ssh a la máquina virtual donde se está ejecutando nuestra aplicación utilizando el FQDN que hayamos definido para la aplicación y el nombre de usuario generado de forma aleatoria y que se nos comunica mediante el parámetro UUID. Accedemos pues por ssh a OpenShift:

usuario@equipo:~$ ssh 1111110a2539462a8464c95ed95d3ef6@joomla-pruebaos.rhcloud.com

    *********************************************************************

    You are accessing a service that is for use only by authorized users.  
    If you do not have authorization, discontinue use at once. 
    Any use of the services is subject to the applicable terms of the 
    agreement which can be found at: 
    https://openshift.redhat.com/app/legal

    *********************************************************************

    Welcome to OpenShift shell

    This shell will assist you in managing OpenShift applications.

    !!! IMPORTANT !!! IMPORTANT !!! IMPORTANT !!!
    Shell access is quite powerful and it is possible for you to
    accidentally damage your application.  Proceed with care!
    If worse comes to worst, destroy your application with 'rhc app destroy'
    and recreate it
    !!! IMPORTANT !!! IMPORTANT !!! IMPORTANT !!!

    Type "help" for more info.

[joomla-pruebaos.rhcloud.com ~]\>

El directorio home del usuario es /var/lib/openshoft/$UUID y tiene el siguiente contenido:

drwxr-xr-x.  4 root 1111110a2539462a8464c95ed95d3ef6 4096 dic 26 11:59 app-root
drwxr-xr-x.  3 root root                             4096 dic 26 11:59 git
drwxr-xr-x.  8 root root                             4096 dic 26 12:22 mysql-5.1
drwxr-xr-x. 10 root root                             4096 dic 26 11:59 php-5.3

Donde podemos ver los directorios de todo el software instalado (php, mysql y git) junto con el directorio app-root que obviamente es el directorio base del repositorio de nuestra aplicación y que por tanto tiene el mismo contenido que el directorio joomla de nuestro equipo.

Vale la pena echar un vistazo a la máquina virtual para entender de forma aproximada la forma de funcionar de OpenShift, podemos comprobar por ejemplo los procesos que nuestro usuario $UUID está ejecutando y en particular los asociados al servidor Apache con soporte PHP y MySQL, comprobaremos así que aunque se trata de una máquina virtual compartida con otros usuarios de OpenShift, cada uno ejecuta sus propios procesos. La forma que han elegido en OpenShift para que no colisionen los sockets asociados a procesos similares dentro de la misma máquina es definir para cada usuario una dirección IP del tipo 127.X.X.X única, en nuestro caso la 127.3.86.129, para la que podemos ver los procesos que tienen puertos abiertos:

[joomla-pruebaos.rhcloud.com etc]\> netstat -utan |grep 127.3.86.129
tcp        0      0 127.3.86.129:3306           0.0.0.0:*                   LISTEN      5887/mysqld         
tcp        0      0 127.3.86.129:8080           0.0.0.0:*                   LISTEN      28914/httpd

Vemos que Apache se ejecuta en el puerto 8080 y MySQL en el puerto habitual 3306. Podemos comprobar que efectivamente no somos los únicos usuarios de la máquina virtual contando el número de procesos Apache como el nuestro que se están ejecutando:

[joomla-pruebaos.rhcloud.com etc]\> netstat -utan|grep 8080|grep LISTEN|sort|uniq|wc -l
97

En resumen: Estamos utilizando una nodo de OpenShift de forma compartida, pero cada usuario ejecuta sus propios procesos de forma independiente. El acceso por ssh permite mayor control de la aplicación, aunque como es obvio es un acceso muy restringido y encapsulado.

Despliegue de Joomla

Una vez que ya hemos comprobado que nuestro gear está perfectamente operativo vamos a proceder a realizar la instalación de Joomla, para ello vamos al directorio local joomla, descargamos el archivo de joomla y lo descomprimimos en el directorio joomla/php que como bien nos explica el fichero README es donde deben ir el código php accesible desde fuera:

usuario@equipo:~/joomla$ wget http://joomlacode.org/gf/download/frsrelease/17715/77260/Joomla_2.5.8-Stable-Full_Package.tar.bz2
usuario@equipo:~/joomla$ cd php
usuario@equipo:~/joomla/php$ tar xvjf ../Joomla_2.5.8-Stable-Full_Package.tar.bz2

Sincronización del repositorio Git

La aplicación Joomla ya está descomprimida en el directorio local, pero ahora hay que actualizar el repositorio remoto de OpenShift utilizando git:

usuario@equipo:~/joomla/php$ git add *
usuario@equipo:~/joomla/php$ git commit -m "Despliegue inicial de joomla"
usuario@equipo:~/joomal/php$ git push

Y ya tendremos nuestra aplicación joomla instalada en OpenShift y lista para configurar vía web como es habitual:

joomla en openshift

Conclusiones

El despliegue de aplicaciones en una PaaS como OpenShift ofrece bastantes ventajas frente al clásico despliegue en un servidor LAMP compartido al que transferimos los ficheros utilizando FTP:

  • Utilización de un potente sistema de control de versiones como git: Imprescindible para apliaciones en desarrollo
  • Acceso por ssh
  • Instalación muy sencilla de los componentes de software (cartridges)
  • Ejecución de procesos independientes para cada aplicación
  • Es posible instalar el cartridge jenkins para instalar este interesante software de integración continua muy utilizado en desarrollo
  • Escalabilidad: No en el caso de FreeShift, pero es una de las ventajas obvias de la utilización de cloud ya que se pueden modificar las características del gear sobre el que se ejecuta la aplicación

Aunque por otra parte, si lo comparamos la utilización de una instancia propia en un cloud IaaS tiene algunas limitaciones:

  • Sólo se puede utilizar el software proporcionado por la plataforma, en el caso de OpenShift los cartridges, mientras que en una instancia IaaS podemos instalar el software que queramos.
  • Los privilegios del usuario son muy limitados, frente al acceso completo como «root» en un IaaS.
  • No controlamos el SO sobre el que se ejecuta la aplicación, mientras que en un IaaS normalmente podemos elegir entre una amplia variedad

En general es mucho más versátil una instancia IaaS, pero si la aplicación que vamos a utilizar se integra bien con el software disponible en la PaaS puede ser una muy buena opción ya que el despliegue puede ser mucho más rápido y sencillo, además falta un elemento para comparar: el precio, que puede decantar la balanza hacia la PaaS. Será en cada caso en el que tengamos que considerar las necesidades y los costes y por tanto optar por una de las múltiples opciones de las que disponemos actualmente, pero parece ser que esta opción va a ser cada vez menos un clásico sistema de hosting compartido.

Por último, un aspecto importante a considerar en la utilización o no de un determinado servicio de cloud computing es la posibilidad de llevarnos todo el software a otro servicio de forma sencilla, es decir que no haya lo que se denomina «vendor lock-in» que nos obligue a permanecer con un proveedor de cloud de forma indefinida. En el caso de OpenShift, todo nuestro software está almacenado siempre de forma local en nuestro repositorio git y las bases de datos que sólo se encuentran en el equipo remoto se pueden copiar y transferir por ssh sin problemas.

Instalación de Joomla en OpenShift

9 comentarios en “Instalación de Joomla en OpenShift

  1. Pablo dijo:

    Hola, hice todo el tutorial y cuando estoy instalando joomla y doy los datos de conexión a la DB, pongo los mismos que me aparecen en mi consola web de openshift, sin embargo cuando doy next me aparece este error: Could not connect to the database. Connector returned number: Unable to connect to the Database: Could not connect to MySQL.
    ¿Que puede ser?

    Me gusta

  2. Pablo dijo:

    Lo que pasa es que php me pide que de el «hostname» el cual por defecto está en localhost, sin embargo no creo que este sea el hostname para mysql en openshift. De ser cierto quisiera saber como conocer el hostname de mi mysql. Gracias

    Me gusta

    1. Hola Pablo,

      Yo trataría de entrar por ssh y probar el cliente MySQL directamente desde linea de comandos.

      (El hostname sí es localhost porque cada usuario tiene un proceso propio de apache, mysql, etc.)

      Me corrijo yo mismo: El hostname NO es localhost, es la dirección 127.X.X.X que aparece en la configuración de MySQL y que es diferente a localhost (127.0.0.1)

      Me gusta

  3. Vero dijo:

    disculpa una pregunta que pasa cuando no se puede instalar joomla por que al momento de configurar la base de datos en openshift manda un mensaje que dice «Imposible conectar a la base de datos. Error de conexión: Could not connect to MySQL.»

    Me gusta

    1. Hola Vero,

      Entiendo que ya está instalado el «cartucho» de MySQL y te ha mostrado por pantalla los parámetros para configurar la conexión. Revísalos bien, ten en cuenta que son un tanto peculiares, la URL en el ejemplo que se muestra en esta entrada es 127.3.86.129:3306, no 127.0.0.1:3306 como es habitual en otros entornos. Obviamente los parámetros de tu aplicación serán otros.

      Me gusta

  4. pues en mi caso hice una migracion de un sitio que tenía a openshift. el problema radica en que si bien en teoría todo quedó bien, al ir al sitio: página en blanco. deduzco que pueden ser permisos de archivos y carpeta pero…

    Me gusta

Deja un comentario