Clouding.io una nueva alternativa en Infraestructura web

La Nube. Un término complejo y a la vez simple. Recuerdo ya hace muchos años cuando Dropbox se dio a conocer con un concepto revolucionario, nunca antes visto y que luego fue replicado por diferentes empresas, dando entender que era un modelo de negocio atractivo y rentable.

Podrías decirme que ya estaban los servicios de almacenamiento como Megaupload, MediaFire y similares pero, a mi parecer, Dropbox tenía un encanto diferente el cual era la sincronización de carpetas de un computador a la cuenta en este servicio… a la nube.

Dropbox es lo que se conoce como un SaaS(por sus siglas en inglés para Software as a Service), una modalidad de negocio donde una empresa ofrece un software y los usuarios acceden a este pagando una mensualidad. La principal ventaja para quienes lo usan radica en que no tienen que pensar en infraestructura, diseño, desarrollo ni soporte del producto. De todo eso se encarga el dueño. El usuario solo lo utiliza.

Pero, ¿y los servicios de hospedaje?

Hace mucho que existen servicios de hospedaje donde tienes acceso a una parte de un servidor virtual(o a uno dedicado donde los recursos no son compartidos) y ahí montar los archivos de un sitio web, blog en un CMS(como WordPress), sistemas ERP, CRM, y otros. De hecho, aún existen y son muy útiles pero también costosos y poco personalizables para productos más completos, complejos o que requieran mucho más de lo que ofrecen.

Una de las razones por las cuales compañías como Dropbox, Box y similares son posibles hoy en día es por empresas que ofrecen Infraestructura como Servicio(IaaS por sus siglas en inglés). ¿Y qué es IaaS? Nada más y nada menos que ofrecer acceso a infraestructura tecnológica para Internet mediante el pago de una suscripción. Quien accede al servicio no se preocupa de tener un centro de datos(data center), de tener que saber de configuraciones de discos, sistemas de redundancia de corriente eléctrica, etc, etc. Todo eso y más lo hace el proveedor de IaaS. Los usuarios de una IaaS solo se preocupan por sacar el mejor provecho de la oferta.

¿Qué beneficio representa contratar una IaaS?

Pues acceso a servidores virtuales, redes, discos, firewall, etc, mucho más personalizable que en un proveedor de hosting común y corriente. De esa forma el despliegue de software, la escalabilidad y configuraciones avanzadas son posibles mediante scripts, que personas con las capacidades adecuadas pueden encargarse de escribir, en lugar de estar pendiente de cables de redes y ese tipo de cosas a nivel de centro de datos.

De tal forma como las SaaS permiten a otros acceder a software por un costo fijo y sin mayores preocupaciones, las IaaS permiten a empresas, pequeñas y grandes, contar con infraestructura web a un costo mucho menor que al tener que invertir en un centro de datos y todo lo que ello conlleva.

Y de un IaaS es lo que voy a contar en las siguientes líneas. Se llama Clouding.io.

Una Alternativa a Linode y Digital Ocean

Clouding.io es un proveedor de infraestructura muy similar a Digital Ocean y Linode. Cuando llegas a su sitio web oficial tienes un vistazo inicial a su configuración de servidor web más económica la cual se asemeja mucho a los proveedores mencionados. Sin embargo, no es suficiente con solo ver un listado de precios para conocer a un servicio, hay que usarlo para poder medirlo y eso es lo que les quiero compartir.

Para este ejercicio voy a intentar configurar un sitio básico en WordPress(la configuración por defecto) haciendo una instalación de un entorno LAMP: Linux, Apache, MySQL y PHP(version 7). La idea es demostrar la propuesta de Clouding.io mediante una implementación básica.

También podría haberlo hecho con una aplicación en Ruby on Rails pero eso iba a consumirme más tiempo.

En las entrañas de Clouding.io

No voy a dar muchas vueltas sobre las características de esta plataforma ya que esas se pueden ver en el sitio web con mayor detalle. Aquí voy a ir al grano.

clouding.io-plataforma-de-infraestructura

Lo primero que voy a crear es una llave SSH para poder acceder al servidor. Una vez creada, la descargo a mi computador.

Esta llave debe guardarse en un lugar seguro y donde recordemos que la vamos a tener.

Para facilidad del comando ssh ubicaré la llave en la carpeta ~/.ssh que es la carpeta donde por defecto el comando busca estos archivos inicialmente.

llave-ssh-clouding.io

$ mv ~/Downloads/servers.pem ~/.ssh

También voy a crear un conjunto de reglas de firewall para este servidor. Muy similar a los security groups en AWS, se pueden agregar reglas existentes y personalizadas.

Inicialmente, lo ideal sería empezar con reglas muy limitadas e ir agregando permisos a medida que sea necesario. Esto lo hago ya que el grupo de reglas por defecto que ofrece Clouding.io me parecen muy abiertas pero eso es sólo un parecer personal.

reglas-firewall-clouding.io

En la imagen anterior lo que muestra es que agregué una regla para acceder por SSH al servidor desde una dirección IP en específico y solo desde esa IP tendré acceso a no ser que agregué otra regla o lo permita desde cualquier dirección usando 0.0.0.0/0.

Una vez estos dos pasos están listos, procedo a crear un nuevo servidor. Podría haber ido al paso de crear un servidor sin ningún problema ya que durante la configuración puedo agregar llaves SSH y reglas de firewall.

crear-servidor-clouding.io

La configuración es sumamente sencilla y corta:

  • dar un nombre
  • escoger una imagen base: esto hace referencia al sistema operativo que se le instalará(escogí Ubuntu 14.04 por familiaridad)
  • elegir las prestaciones: vCPUs, RAM, disco
  • cuadrar la llave SSH y el grupo de reglas de firewall
  • y otras más

A un lado puede verse el costo total del servidor por hora y por mes, en euros ambos valores. Ya teniendo la configuración básica que necesito hago clic en el botón “Enviar” y comenzará el proceso de creación de la máquina. Dicha acción toma pocos segundos tal cual y lo mencionan en la página de Clouding.io.

Una vez creado, podemos ver el detalle de la máquina el cual incluye los datos necesarios para el acceso a la misma como lo es la IP pública asignada, el DNS, un enlace de descarga de la llave SSH escogida, indicación del nombre del súper usuario(root o administrador en el caso de máquinas con Windows) y la contraseña para autenticar al súper usuario.

detalle-servidor-clouding.io

Importante es la sección de “Acciones del servidor” la cual sirve para reiniciar, apagar/prender, renombrar, borrar o redimensionar la máquina. Del mismo modo, hay pestañas para ver los grupos de reglas de firewall configurados, la configuración de backups y los snapshots.

Los *snapshots* son imágenes de un punto en el tiempo del servidor con todo lo que tiene configurado las cuales sirven para lanzar más máquinas con software instalado. De ese modo no hay que volver a instalar todo.

Para verificar que el proceso se completó correctamente voy a ingresar al servidor. Esto se puede lograr usando la IP pública o la dirección DNS además de la clave del usuario root

$ ssh root@46.183.118.184
root@46.183.118.184's password:

Ingreso la clave asignada y:

acceso-exitoso-servidor-clouding.io

¡Listo! Ya tenemos el servidor andando. Ahora solo falta configurar todo lo necesario para tener el sitio WordPress corriendo en la web.

Configurando un servidor web en Clouding.io

Nota:

Ojo. Todo lo que voy a hacer a continuación será con el usuario root el cual no debe usarse ya que un comando mal ejecutado puede afectar todo el sistema. Normalmente, debería crear un usuario de sistema que pueda ejecutar comandos sudo y ahí sí proceder, sin embargo, por cuestiones de tiempo y practicidad lo haré como root.

Para poder poner a andar un sitio WordPress en un servidor web necesitamos instalar lo siguiente:

  • Un servidor web, en este caso Apache
  • El lenguaje que usa el CMS, PHP en su versión 7.1, por preferencia mía
  • Un motor de base de datos, MySQL que es el más común.

Todo este proceso lo probé antes en una máquina virtual usando Vagrant en mi computador personal y luego lo repliqué en el servidor. Estos son los pasos.

Instalar dependencias

Para instalar todo el software mencionado tengo un script en Bash con el cual ya voy a dejar todo eso preparado y solo correr un comando para que se instalen.

#!/bin/bash

apt-get update
apt-get -y install \
build-essential \
curl \
git-core \
python-software-properties \
htop \
libgmp-dev \
software-properties-common \
zlib1g-dev \
libreadline6-dev \
libncurses5-dev \
libxml2-dev \
libxslt-dev \
libsqlite3-dev \
binutils-doc

apt-get update
echo "mysql-server mysql-server/root_password password root" | sudo debconf-set-selections
echo "mysql-server mysql-server/root_password_again password root" | sudo debconf-set-selections
apt-get install mysql-client mysql-server -y

apt-get update
apt-get install apache2 -y

apt-get install -y language-pack-en-base
LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

apt-get update
apt-get install -y \
php7.1-fpm \
php7.1-mysql \
php7.1-curl \
php7.1-cli \
php7.1-mcrypt \
php7.1-gd \
php7.1-XMLWriter \
libapache2-mod-php7.1

sudo service apache2 restart

Los detalles el script como tal no importan, aunque puedo describirlo brevemente:

apt-get update
apt-get -y install \
build-essential \
curl \
git-core \
python-software-properties \
htop \
libgmp-dev \
software-properties-common \
zlib1g-dev \
libreadline6-dev \
libncurses5-dev \
libxml2-dev \
libxslt-dev \
libsqlite3-dev \
binutils-doc

Esa sección de script instala dependencias básicas de sistema cuando se va a trabajar con ciertos programas, paquetes y librerías. No siempre son necesarios para considero que es mejor tenerlos a que falten.

apt-get update
echo "mysql-server mysql-server/root_password password root" | sudo debconf-set-selections
echo "mysql-server mysql-server/root_password_again password root" | sudo debconf-set-selections
apt-get install mysql-client mysql-server -y

En esta parte instalo MySQL y asigno al usuario root la clave root. De esa forma en la instalación, me evito una parte tediosa donde la instalación me pregunta por clave para este usuario.

apt-get update
apt-get install apache2 -y

Instalo apache 😀

apt-get install -y language-pack-en-base
LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

apt-get update
apt-get install -y \
php7.1-fpm \
php7.1-mysql \
php7.1-curl \
php7.1-cli \
php7.1-mcrypt \
php7.1-gd \
php7.1-XMLWriter \
libapache2-mod-php7.1

Instalo PHP 7.1 🙂

Listo. Todo el software que necesito está instalado. Ahora configuremos algunas cosas en Apache para ver el sitio.

Descargar y ubicar WordPress

Para descargar WordPress podemos usar el comando wget

# wget https://wordpress.org/latest.tar.gz
--2017-12-14 17:38:22-- https://wordpress.org/latest.tar.gz
Resolving wordpress.org (wordpress.org)... 66.155.40.250, 66.155.40.249
Connecting to wordpress.org (wordpress.org)|66.155.40.250|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9638827 (9.2M) [application/octet-stream]
Saving to: ‘latest.tar.gz’

Creemos un nuevo directorio en la carpeta /var/www/ donde ubicar esos archivos de WordPress

# mkdir /var/www/coshi.com

Descomprimimos el archivo descargado

# tar -xf latest.tar.gz

Y movemos todo el contenido a /var/www/coshi.com

# mv wordpress/* /var/www/coshi.com/

Continuemos con Apache y MySQL.

Configurando Apache

Una de las primeras cosas que hay que hacer para configurar apache es desactivar el virtual host que viene por defecto. Esto se logra con el comando a2dissite y el nombre del archivo de configuración.

# a2dissite 000-default
Site 000-default disabled.
To activate the new configuration, you need to run:
service apache2 reload

Ahora, necesitamos agregar un archivo de configuración para referencias una carpeta y dominio personalizado. Creamos el archivo con el comando

# nano /etc/apache2/sites-available/coshi.com.conf

Al cual le agregamos la siguiente configuración

<VirtualHost *:80>
 ServerName www.coshi.com # aquí podría ir la IP del servidor
 ServerAdmin admin@coshi.com
 DocumentRoot /var/www/coshi.com
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Dos cosas a notar son primero el valor que acompaña la directiva ServerName. Ese valor puede ser la IP que entrega Clouding.io al crear el servidor, en este caso es el dominio que quiero usar para la demostración. Otro valor a prestar atención es el que va con la directiva DocumentRoot el cual indica la ruta donde estarán los archivos del sitio, en este caso, los archivos del WordPress.

Guardamos el archivo con la combinación CTRL + letra o, ENTER y salimos de nano con CTRL + x.

Para habilitar el sitio usamos el comando a2ensite

# a2ensite coshi.com
Enabling site coshi.com.
To activate the new configuration, you need to run:
service apache2 reload

Nos dice que para que la configuración se haga efectiva necesitamos recargar apache. Hay que hacerle caso con:

# service apache2 reload

MySQL

Antes de ir a probar todo, vayamos a MySQL y creemos una base de datos y un usuario con acceso a solo esa base de datos. Primero que nada, hay que ingresar al servidor de base de datos con el comando mysql

# mysql -u root -p

Cuando pide la clave, la ingresamos y llegamos a la pantalla de MySQL

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 42
Server version: 5.5.58-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Aquí procedemos a crear una nueva base de datos para el sitio WordPress

mysql> CREATE DATABASE coshi_com;
Query OK, 1 row affected (0.00 sec)

Creamos un usuario con clave

mysql> CREATE USER coshi_com_user@localhost IDENTIFIED BY 'clave_coshi';
Query OK, 0 rows affected (0.00 sec)

Finalmente, asignamos permisos y los hacemos efectivos

mysql> GRANT ALL PRIVILEGES ON coshi_com.* TO coshi_com_user@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

¡Listo! Podemos salir de la consola de MySQL con el comando exit

Verificando que funcione…

Aquí hay que tener cuidado en qué se configuró para saber por dónde entrar a revisar en caso de fallas. En la primera vez que revisé, no cargaba nada al ingresar a http://www.coshi.com. Revisé y todo estaba en orden así que me detuve un momento y recordé que en Clouding.io hay reglas de firewall desde la interfaz. Así que fui al panel administrativo y agregué una nueva regla de firewall para el servidor:

regla firewall puerto 80

Esta regla permite que todas las conexiones entrante por el puerto 80 puedan ser respondidas por apache. Nótese la parte VirtualHost *:80 en el virtual host configurado.

Una vez agregué esa regla, el sitio cargué y procedí con la configuración usual de WordPress.

Crear el archivo wp-config.php

configurar wp-config wordpress nuevo en clouding.io

Y configurar el usuario administrador

configurar usuario admin wordpress

¡Andando todo!

wordpress en clouding.io

Conclusiones

En definitiva, considero Clouding.io como una opción bueno para hospedaje de sitios web o aplicaciones.

Debo destacar que hay variedad de tutoriales en la base de conocimiento, así como artículos interesantes en el blog. Muy particular la comunidad de preguntas y respuestas que están gestando alrededor de la plataforma.

Me gustó mucho la interfaz ya que en realidad es sencilla al usarse aunque tal vez le haría falta un retoque al diseño como para que algunos elementos resaltaran más y tener más claridad sobre qué hay en cada parte, sin embargo eso puede ser muy de gusto personal.

Una de las cosas que hace menos atractiva a Clouding.io comparada con Digital Ocean, Linode y otras es la carencía de una API para tener mayor poder de automatización a la hora de aprovisionar y configurar infraestructura. Supongo que es algo que tienen en su plan a largo plazo.

No sobra decir que esto no es lo único que se puede hacer en Clouding.io ni la única forma de hacerlo. Faltaría ver cómo lograr conexiones por FTP, hacer una configuración de balanceador de carga, una configuración de base de datos maestro-replica, etc.

Eso se lo dejo a los usuarios de Clouding.io 😉

Anuncios

Autor: cesc1989

Ingeniero de Sistemas que le gusta escribir y compartir sobre recursos que considera útiles, además que le gusta leer manga y ver anime.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s