Clouding.io: Prestashop sobre Docker en servidor CentOS 7.0


Introducción

Clouding.io es una empresa española que ofrece servicios de hosting en la nube, más concretamente servidores Cloud. Recientemente se pusieron en contacto conmigo para que pusiera a prueba sus VPS Cloud desplegando un servidor Linux con Docker y una instancia de Prestashop.

En este tutorial veremos cómo crear un nuevo servidor CentOS 7.0 desde la intuitiva interfaz de clouding.io y como instalar y configurar Docker-ce para el despliegue de una tienda virtual Prestashop. Para este último paso emplearemos una imagen Docker de Prestahsop y otra de MySQL para crear una base de datos exclusiva para la tienda.

Clouding.io

Despliegue del servidor

El primer paso será crear un nuevo servidor, para ello, desde nuestra cuenta accedemos a la sección servidores y presionamos sobre el botón ‘+’ para crear un nuevo servidor.

Deploy new Clouding.io server

Desde esta pantalla elegiremos la distribución Linux de nuestra preferencia, en nuestro caso CentOS 7.0 (64 Bit) y las características del servidor. Para nuestra prueba hemos configurado un servidor con 2 VCores, 4 GiB de memoria RAM y 15 GiB de espacio en disco, no obstante, estos valores deben definirse en función del uso definitivo que se le vaya a dar al servidor.

Una vez confirmada nuestra selección volveremos al listado de servidores, dónde ya aparecerá el servidor que hemos creado.

Clouding.io new server ready

Acceso al servidor

El acceso al servidor lo haremos a través de SSH. El usuario con el que podemos acceder es root, su contraseña está disponible en la pantalla de detalles del servidor.

Para acceder a los detalles del servidor, simplemente tenemos que pinchar en el nombre del servidor desde la pantalla anterior donde se mostraba el listado de servidores.Clouding.io server details

Docker

Instalando Docker-ce en CentOS 7

El primer paso para poder desplegar cualquier imagen de Docker en el servidor es instalar Docker-ce, para ello seguiremos la guía que hay disponible en su web.

En primer lugar debemos habilitar el repositorio, para ello debemos instalar algunas dependencias de Docker.

El siguiente paso es añadir el repositorio estable de Docker-ce. Este es el repositorio que se utilizará siempre, incluso cuando queramos instalar builds de Docker del repositorio edge o test.

add docker-ce repository to yum
En este momento ya podemos instalar docker en el servidor:

docker ce version

Servicio Docker-ce en CentOS 7

Una vez termine el proceso de instalación correctamente ya podremos arrancar el servicio de docker:

Finalmente, para que Docker arranque automáticamente si el servidor se reinicia habilitaremos el servicio:

Portainer

Una vez Docker ya se encuentra disponible en nuestra máquina, podemos proceder con el despliegue de algunos contenedores.

Una de las aplicaciones más utilizadas en Docker es Portainer, ya que permite la gestión de Docker a través de una intuitiva aplicación web.

Despliegue de Portainer

El primer paso para desplegar Portainer es crear un directorio que mapearemos como volumen en el contenedor de modo que si el contenedor se destruyese o recrease, Portainer no perdería sus datos.

El siguiente paso es el despliegue del contenedor:

El comando anterior desplegará la imagen de Portainer en el puerto 9123 con el nombre “portainer” habilitando su reinicio automático en el caso en que Docker se reiniciara (reinicio de la máquina, reinicio manual del servicio de Docker, etc.).

A su vez mapeamos dos volúmenes en la máquina, el primero docker.sock, permitirá a Portainer comunicarse con el proceso de Docker en el servidor (host machine) e invocar comandos.

El segundo volumen mapea el directorio creado anteriormente con la ubicación donde la imagen de Portainer almacena sus datos (usuarios, configuraciones…), de modo que si accidentalmente destruyésemos el contenedor, esta información no se perdería.

Clouding.io firewall

Clouding.io ofrece una capa de firewall por encima de los servidores. El firewall por defecto contiene normas para permitir tráfico por el puerto SSH, FTP, HTTP…. Sin embargo, el puerto que hemos asignado a Portainer 9123 se encuentra bloqueado por defecto.

Para poder acceder a la interfaz debemos de agregar una nueva norma al firewall. En la pestaña “RED” encontramos los Firewalls vinculados con la máquina:

Clouding.io server firewalls

Para agregar la nueva norma, presionamos sobre el menú contextual del Firewall asignado default y accedemos a la opción editar para acceder a la pantalla de gestión de Firewalls.

Desde aquí podemos presionar sobre el botón ‘+’ en la sección de “Normas del Firewall” para agregar la nueva regla:

Clouding.io añadir nueva regla al firewall

Configuración de Portainer

En estos momentos ya podemos acceder a la interfaz de Portainer a través de un navegador accediendo a http://ip-publica-servidor:9123.

Como es la primera vez que accedemos, Portainer nos va a pedir crear un usuario administrador y el tipo de entorno que queremos gestionar.

Portainer configuración inicial

Portainer selección entorno Docker

Una vez hemos dado de alta el usuario y hemos elegido el entorno “Local” ya dispondremos de acceso a la aplicación y podremos listar los contenedores. Si todo ha ido bien, en la lista de contenedores únicamente debería de figurar “portainer”.

Portainer listado de contenedores

Prestashop

Finalmente y a modo de ejemplo, vamos a desplegar una instancia de Prestashop en el entorno Docker que hemos puesto a punto.

MySQL

Prestashop depende de MySQL para almacenar sus datos. Lo primero que haremos será desplegar una imagen compatible de MySQL.

Del mismo modo que hicimos para Portainer, en la máquina host crearemos un directorio para almacenar los datos de MySQL de modo que si el contenedor se destruyese la información de la tienda no se perdería.

El siguiente paso será desplegar el contenedor de MySQL, para ello lanzamos el siguiente comando:

  • --restart always: Indica a Docker que el contenedor siempre debe de reiniciarse
  • -v /opt/prestashop/mysql:/var/lib/mysql: Mapea el primer directorio en la máquina host contra el segundo en el contenedor
  • -e MYSQL_ROOT_PASSWORD=root_password: Establece la contraseña del usuario root dentro del contenedor
  • -e MYSQL_DATABASE=prestashop: Crea una base de datos inicial con el nombre ‘prestahsop’
  • -e MYSQL_USER=prestaUser: Crea un usuario inicial con el nombre ‘prestaUser’
  • -e MYSQL_PASSWORD=prestaPassword: Asigna una contraseña al usuario inicial
  • --default-authentication-plugin=mysql_native_password: Parámetro de MySQL que permite modificar la forma de autenticación por defecto. Necesario por compatibilidad con Prestashop
  • --character-set-server=utf8: Parámetro de MySQL que permite modificar el juego de caracteres por defecto en el servidor. Necesario por compatibilidad con Prestashop

En el comando anterior debemos reemplazar en las variables de entorno las contraseñas (root_password, prestaPassword) por valores más seguros y conocidos de modo que las podamos emplear en el caso que hubiese que hacer una intervención manual en la base de datos.

Contenedor Prestashop

Una vez MySQL esté disponible podemos proceder al despliegue del contenedor con Prestashop. Al igual que en los casos anteriores, crearemos un directorio en la máquina host para poder persistir la información del contenedor.

A continuación lanzamos el siguiente comando para iniciar el contenedor:

  • -v /opt/prestashop/html:/var/www/html: Mapea el primer directorio en la máquina host contra el segundo en el contenedor
  • -e DB_SERVER=prestashop-db: Establece el nombre del host de MySQL al que debe de conectarse Prestashop. Debe coincidir con el nombre del contenedor de MySQL creado anteriormente
  • -e DB_USER=prestaUser: Nombre del usuario de la base de datos
  • -e DB_PASSWD=prestaPassword: Contraseña del usuario de base de datos
  • -e PS_LANGUAGE=es: Idioma en el que se instalará Prestashop
  • -e PS_COUNTRY=ES: País para el que se instalará Prestashop
  • -e PS_DOMAIN=185.166.213.138: Nombre de dominio en el que correrá la aplicación. En nuestro caso apuntamos directamente a la IP pública del servidor creado en clouding.io. Debería de sustituirse por un nombre de dominio real que apuntase a esa misma IP
  • -e ADMIN_MAIL=mr@pink.com: Email y nombre de usuario administrador que se creará para la tienda
  • -e ADMIN_PASSWD=mr_pink_demo: Contraseña para el usuario administrador
  • -e PS_INSTALL_AUTO=1: Flag para que el proceso de instalación se inicia automáticamente

Una vez lanzado el comando, desde la interfaz de Portainer visualizaremos los logs del contenedor para controlar cuándo se completa la instalación:

Portainer, contenedor Prestashop listo

Cuando se muestre la línea  Command line: 'apache2 -D FOREGROUND' en el log el servidor estará disponible.

Nos quedará un último paso y es renombrar los directorios install y admin por otros más secretos. Como disponemos de acceso al directorio donde Prestashop almacena su información (directorio mapeado), podemos acceder hasta este a través de la consola SSH y renombrar los directorios.

Renombrar directorios protegidos de Prestashop

Es importante elegir un nombre más complicado y que evite ataques indeseados. Hecho esto ya podemos acceder a la consola de administración de la tienda y a la tienda en sí.

Página de administración de Prestashop

Página de administración de Prestashop

Conclusión

En este tutorial hemos visto cómo crear un nuevo servidor CentOS 7 empleando los servicios en la nube de clouding.io y como instalar y configurar Docker-ce para el despliegue de una tienda virtual Prestashop.

Prestashop

A pesar de que Prestashop es una aplicación monolítica y no está diseñada para desplegarse como un microservicio, hacer todo el procedimiento de instalación empleando Docker resulta mucho más rápido.

El despliegue del servidor empleando la interfaz de Clouding.io ha resultado muy sencillo, en menos de dos minutos hemos podido desplegar un nuevo servidor y disponer de todo lo necesario para acceder mediante SSH al mismo. Además, la capa de Firewall nos permite disponer de mecanismos de seguridad sin tener que configurarlos en la propia máquina y poderlo configurar a través de la interfaz web con efecto inmediato.

Clouding.io performance

Rendimiento Clouding.io

En cuanto al rendimiento del servidor, a pesar de estar probando una tienda Prestashop sin ningún tipo de optimización, el tiempo de carga total de la página es inferior a 3 segundos. En este aspecto podemos concluir que la red de clouding.io donde se aloja el servidor es bastante rápida y estable.

Dejar un Comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *