Cloud_engine

 Uno de los temas más actuales y solicitados son los servicios en la nube, uno de los que más ejemplifica el uso de éstos es Netflix: con este servicio podemos ver alguna película o serie en casa, pausar la reproducción, movernos a otra localidad y, mediante algún dispositivo móvil (Teléfono o Tableta) continuar en el mismo punto donde nos quedamos, para, incluso, terminar de verla en algún tercer dispositivo diferente (Laptop, PC o consola de videojuegos).

Utilizando las bondades que actualmente se proveen en internet con OpenSource, podemos garantizarnos diferentes servicios de nube administrados por nosotros mismos.

Antes de entrar en materia, recordemos que la nube, como tal, es un concepto demasiado amplio y  abarca casi todos los posibles tipos de servicio en línea, pero cuando las empresas se refieren a la nube, por lo general hay tres modelos de servicios que hay que considerar: el software como servicio (SaaS), Plataforma como Servicio (PaaS) e Infraestructura como Servicio (IaaS).

Básicamente, se resumen como:

cloud

Como IaaS, la forma más simple de verlo es como la virtualización de Sistemas Operativos, pudiendo ser de forma local (en nuestra propia máquina) o con algún proveedor de este servicio en la nube (por ejemplo Amazon, Rackspace ó Digital Ocean).

Con éste último, mediante un cupón en Twitter, pude hacerme de un droplet para iniciar este proyecto, las características que configure para iniciar son: Fedora 19, 1 vCPU, 1 GB RAM y 30 GB en SSD:

droplet

Después de unos pocos segundos, me llego el correo con el acceso por SSH y procedí a actualizarlo:

[root@fedora19 ~]# yum update

Cuando terminó,  habilite SELinux, ya que viene por default deshabilitado y después reinicie el droplet :

[root@fedora19 ~]# cat /etc/sysconfig/selinux
SELINUX=enforcing
SELINUXTYPE=targeted
[root@fedora19 ~]# reboot

Para hacerlo disponible en cualquier dispositivo, es muy recomendable conseguir un nombre de dominio. Se pueden encontrar opciones muy económicas en un rato de googleo.

Lo siguiente es construir un PaaS para que albergue nuestros servicios.

Para nuestro PaaS, utilizaremos OpenShift el cual nos puede proporcionar diferentes opciones de lenguajes para crear nuestras aplicaciones; para instalarlo, podemos utilizar dos alternativas, descargar la imagen lista para funcionar en KVM, VirtualBox y VMWare, ó, como en mi caso, realizar la instalación de los paquetes necesarios. Utilizaremos, entonces,  la guía de instalación mediante Puppet :

[root@fedora19 ~]# yum install -y puppet facter tar bind
[root@fedora19 ~]# mkdir -p /etc/puppet/modules
[root@fedora19 ~]# puppet module install openshift/openshift_origin --version 3.0.1
[root@fedora19 ~]# /usr/sbin/dnssec-keygen -a HMAC-MD5 -b 512 -n USER -r /dev/urandom -K /var/named example-rh.com

Mi script de configuración de puppet quedó como:

[root@broker ~]# cat configure_origin.pp
class { 'openshift_origin' :
# Components to install on this host:
roles => ['broker','named','activemq','datastore','node'],

# The FQDNs of the OpenShift component hosts; for a single-host
# system, make all values identical.
broker_hostname => 'broker.example-rh.com',
node_hostname => 'broker.example-rh.com',
named_hostname => 'broker.example-rh.com',
datastore_hostname => 'broker.example-rh.com',
activemq_hostname => 'broker.example-rh.com',

# BIND / named config
# This is the key for updating the OpenShift BIND server
bind_key => 'AWk+wjszKi9da5nL/1gkMY7H+GuUng==',
# The domain under which applications should be created.
domain => 'example-rh.com',
# Apps would be named -.example-rh.com
# This also creates hostnames for local components under our domain
register_host_with_named => true,
# Forward requests for other domains (to Google by default)
conf_named_upstream_dns => ['8.8.8.8'],

# Auth OpenShift users created with htpasswd tool in /etc/openshift/htpasswd
broker_auth_plugin => 'htpasswd',
# Username and password for initial openshift user
openshift_user1 => 'openshift',
openshift_password1 => 'password',

# To enable installing the Jenkins cartridge:
install_method => 'yum',
jenkins_repo_base => 'http://pkg.jenkins-ci.org/redhat',

#Enable development mode for more verbose logs
development_mode => true,

# Set if using an external-facing ethernet device other than eth0
#conf_node_external_eth_dev => 'eth0',

#If using with GDM, or have users with UID 500 or greater, put in this list
#node_unmanaged_users => ['user1'],
}
[root@broker ~]#

 

NOTA: También se podría utilizar el script de instalación automática provisto en https://install.openshift.com/, pero, durante mis pruebas, se quedaba colgado sin posibilidad de hacerle un buen debug, por lo que me decidí por utilizar la guía mencionada.

Al finalizar la instalación es recomendable reiniciar el droplet/vps  para que todos los servicios inicien correctamente:

[root@fedora19 ~]# reboot

Aquí el log de instalación.

Cuando ha reiniciado nuestro droplet/vps, podemos verificar que OpenShift este ejecutándose correctamente:

OpenShift Origin

En nuestro equipo de administración, instalamos las herramientas rhc y git para poder administrar nuestras aplicaciones desde la terminal:

[root@isengard ~]# yum -y install git  rubygem-rhc

Configuramos el acceso con el comando:

[alex.callejas@isengard ~]$ rhc setup --server fedora19 -l openshift

Una vez configurado, instalamos una aplicación de prueba, hagamos un blogcito con wordpress.

Primero crearemos un directorio local para nuestras aplicaciones:

[alex.callejas@isengard ~]$ mkdir Devel/BLOG
[alex.callejas@isengard ~]$ cd Devel/BLOG

Una vez ahí podemos iniciar la instalación de wordpress, la cual es muy sencilla, únicamente cambiemos un poco el comando para instalarlo con MariaDB en lugar de MySQL:

[alex.callejas@isengard BLOG]$ rhc app create blog php-5 mariadb-5.5 --from-code=https://github.com/openshift/wordpress-example

Un par de minutos después, ya la podemos ver dentro de nuestras aplicaciones:

Wordpress-Blog

Wordpress-Blog

Configuramos nuestro sitio y enseguida lo podremos ver funcionando:

Blog

Después de un poco de personalización y afinación de los registros en el DNS, el blog quedo de esta forma:

Screenshot from 2014-01-09 15:37:22

Posteriormente, veremos como agregar más aplicaciones y proyectos a nuestra nube.

Espero les sirva…