Diferència entre revisions de la pàgina «FIVAN - Manual técnico»

De Wiket
Salta a la navegació Salta a la cerca
Línia 131: Línia 131:
 
===Docker===
 
===Docker===
 
La idea detrás de Docker es crear contenedores ligeros y portables para las aplicaciones software que puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo que la máquina tenga por debajo, facilitando así también los despliegues.
 
La idea detrás de Docker es crear contenedores ligeros y portables para las aplicaciones software que puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo que la máquina tenga por debajo, facilitando así también los despliegues.
====Instalación docker-ce====
+
====Instalación Docker CE====
Dicho esto, empezaremos a instalar docker-ce.
+
Podemos instalar Docker CE de diferentes formas, según sus necesidades:
  
 +
<ul>
 +
 +
<li type="disc">La mayoría de los usuarios configuran repositorios de Docker e instalan desde ellos, para facilitar la instalación y las tareas de actualización. Este es el enfoque recomendado.</li>
 +
 +
<li type="disc">Algunos usuarios descargan el paquete DEB, lo instalan manualmente y administran las actualizaciones de forma completamente manual. Esto es útil en situaciones como la instalación de Docker en sistemas de espacio aéreo sin acceso a Internet.</li>
 +
 +
<li type="disc">En entornos de prueba y desarrollo, algunos usuarios optan por utilizar scripts automatizados de conveniencia para instalar Docker. Este es actualmente el único enfoque para Raspbian.</li>
 +
 +
</ul>
 +
 +
A pesar de las distintas formas que hay para instalar el docker-ce, nosotros usaremos los repositorios, ya es que es la más recomendada.
 +
 +
'''INSTALAR USANDO EL REPOSITORIO'''
 +
 +
Antes de instalar Docker CE por primera vez en una máquina host nueva, debe configurar el repositorio Docker. Después, puede instalar y actualizar Docker desde el repositorio.
 +
 +
'''configurar el repositorio'''
 +
 +
<ol>
 +
<li>Actualice el aptíndice del paquete:</li>
 +
$ sudo apt-get update
 +
<li>Instalar paquetes para permitir el aptuso de un repositorio a través de HTTPS:</li>
 +
$ sudo apt-get install \
 +
    apt-transport-https \
 +
    ca-certificates \
 +
    curl \
 +
    software-properties-common
 +
<li>Agregue la clave GPG oficial de Docker:</li>
 +
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
 +
 +
Verifique que ahora tiene la clave con la huella digital '''9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88''', buscando los últimos 8 caracteres de la huella digital.
 +
 +
<pre>
 +
$ sudo apt-key fingerprint 0EBFCD88
 +
 +
pub  4096R/0EBFCD88 2017-02-22
 +
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
 +
uid                  Docker Release (CE deb) <[email protected]>
 +
sub  4096R/F273FCD8 2017-02-22
 +
 +
</pre>
 +
<li>Use el siguiente comando para configurar el repositorio estable . Siempre necesita el repositorio estable , incluso si desea instalar compilaciones desde el borde o repositorios de prueba . Para agregar el repositorio de borde o prueba , agregue la palabra edgeo test(o ambos) después de la palabra stableen los comandos a continuación.</li>
 +
$ sudo add-apt-repository \
 +
    "deb [arch=armhf] https://download.docker.com/linux/ubuntu \
 +
    $(lsb_release -cs) \
 +
    stable"
 +
</ol>
 +
 +
'''instalar docker ce'''
 +
 +
<ol>
 +
 +
<li>Actualiza el aptíndice del paquete.</li>
 +
 +
$ sudo apt-get update
 +
 +
<li>Instale la última versión de Docker CE, o vaya al siguiente paso para instalar una versión específica:</li>
 +
 +
$ sudo apt-get install docker-ce
 +
 +
<li>Verifique que Docker CE esté instalado correctamente ejecutando la hello-world imagen.</li>
 +
 +
$ sudo docker run hello-world
 +
 +
</ol>
  
 
Dentro de la carpeta '''wordpress''' se nos creará una carpeta '''html''' definida en el parámetro '''-v''' del fichero. Esta contendrá todos los archivos de nuestra configuración de WordPress. Esto nos permitirá trabajar desde un contenedor con los archivos en local y en caso de fallo poder desplegar fácilmente y no perder ninguna configuración.
 
Dentro de la carpeta '''wordpress''' se nos creará una carpeta '''html''' definida en el parámetro '''-v''' del fichero. Esta contendrá todos los archivos de nuestra configuración de WordPress. Esto nos permitirá trabajar desde un contenedor con los archivos en local y en caso de fallo poder desplegar fácilmente y no perder ninguna configuración.

Revisió del 15:04, 16 maig 2018

Esquema

Layer 4.png

Para realizar este proyecto, utilizaremos la forma más simple de equilibrar la carga del tráfico de red a varios servidores es usar el balanceador de carga de capa 4 (capa de transporte). De esta manera reenviará el tráfico del usuario en función del rango de IP y el puerto.

El usuario accede al balanceador de carga, que reenvía la solicitud del usuario al grupo de servidores back-end web-backend. Cualquiera que sea el servidor de back-end seleccionado, responderá directamente a la solicitud del usuario. En general, todos los servidores en el servidor web deben servir contenido idéntico; de lo contrario, el usuario podría recibir contenido incoherente. Ambos servidores web se conectan al mismo servidor de base de datos.

Hardware

Antes de empezar indicaremos que hardware hemos utilizado para llevarlo a cabo.

4 Raspberry Pi 3 4 Micro SD 16GB 1 Hard Drive 500GB
Raspberry.jpg SD16GB C10.png Hard drive.jpg

Instalación OS

Raspbian Logo.png

Una vez tenemos montadas las Raspberry, lo primero que debemos hacer para trabajar con ellas es instalar un sistema operativo en cada una de ellas. En nuestro caso hemos utilizado Raspbian Stretch Lite. Raspbian Stretch Lite es un sistema operativo Debian sin interfaz gráfica. La ventaja que ofrece no tener interfaz, es que estas máquinas, al tener 1GB de RAM, podemos aprovechar más espacio de memoria que si tuviésemos un sistema operativo con interfaz y así poder evitarnos posibles sobrecargas.

Empezaremos descargando la imagen. (Download Raspbian for Raspberry Pi)

Al mismo tiempo tendremos que descargar también Etcher. Este programa nos permite grabar una imagen en un sistema de almacenamiento para utilizarlo como arranque y cargar así nuestro OS. (Download Etcher)

Una vez tengamos todo en nuestro sistema, empezaremos el proceso para poder trabajar en la Raspberry:

  1. Abriremos Etcher e introduciremos la microSD en nuestro equipo.
  2. Agregaremos la iso y le daremos a Flash para empezar el proceso.
  3. Etcher.PNG
  4. Una vez finalizado, extraeremos la microSD y la introduciremos en nuestra Raspberry para empezar a trabajar en nuestro sistema operativo Raspbian.

Para acceder, utilizamos el usuario pi que viene por defecto con password raspberry.

Por defecto, la distribución de teclado nos vendrá en Inglés. Para cambiarla deberemos usar la siguiente comanda y configurar la distribución de nuestro teclado en Español.

sudo dpkg-reconfigure keyboard-configuration

Habilitar servicio SSH

SSH (Secure SHell, en español: intérprete de órdenes seguro) es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder servidores privados a través de una puerta trasera o backdoor. Permite manejar por completo el servidor mediante un intérprete de comandos. Se le asigna por defecto el puerto TCP 22.

El servicio SSH viene instalado ya por defecto, por lo tanto solo deberemos activarlo.

Activamos servicio SSH:

sudo systemctl enable ssh

Una vez activado lo iniciamos:

sudo service ssh start

Conexión cliente-servidor

Una vez habilitado el servicio, para conectarnos a nuestra Raspberry utilizaremos la siguiente comanda:

ssh -l pi direccion_ip

Load Balancer

Ahora nos centraremos en la implementación específica de cada Raspberry. Empezaremos con la que se encarga del balanceo de carga (en inglés, Load Balancer) y la alta disponibilidad.

Para ello, utilizaremos el software HAProxy, ya que incorpora las utilidades nombras anteriormente y necesarias para nuestro proyecto. (Más información clic aquí)

HAProxy

HAProxy es una solución popular de software de fuente abierta TCP / HTTP Load Balancer y proxy que se puede ejecutar en Linux, Solaris y FreeBSD. Su uso más común es mejorar el rendimiento y la confiabilidad de un entorno de servidor mediante la distribución de la carga de trabajo en varios servidores (por ejemplo, web, aplicación, base de datos).

Instalación

Para instalar HAProxy, utilizaremos el siguiente comando:

sudo apt update
sudo apt install haproxy

Configuración

Empezaremos a configurar HAProxy para conseguir tener el balanceo de carga y la alta disponibilidad. Para ello debemos ir al archivo /etc/haproxy/haproxy.cfg y modificar las siguientes líneas.

sudo nano /etc/haproxy/haproxy.cfg
frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

backend http_back
   balance roundrobin 
   server <server1 name> <private IP 1>:80 check
   server <server2 name> <private IP 2>:80 check

Sesiones

Algunas aplicaciones requieren que un usuario continúe conectándose al mismo servidor back-end. Esta persistencia se logra a través de sesiones adhesivas. Cambiaremos algunos parámetros de nuestro archivo para conseguir que un usuario no pierda la sesión. Lo modificamos del siguiente modo:

frontend http_front
  bind *:80
  stats uri /haproxy?stats
  default_backend http_back
backend http_back balance leastconn cookie JSESSIONID prefix nocache server <server1 name> <private IP 1>:80 check cookie <server1 name> server <server2 name> <private IP 2>:80 check cookie <server2 name>

Los parámetros más utilizados para el balancear la carga son los siguientes:

roundrobin Round Robin selecciona servidores por turnos, es decir, va alternando un servidor con otro repartiendo uno a uno cada conexión.
leastconn Selecciona el servidor con la menor cantidad de conexiones: se recomienda para sesiones más largas. Los servidores en el mismo back-end también se rotan de manera round-robin.
source Esto selecciona qué servidor usar basado en un hash de la IP de origen, es decir, la dirección IP de su usuario. Este es un método para garantizar que un usuario se conecte al mismo servidor.

Web-Backend

Esta parte se referirá a toda la instalación y configuración que se haga sobre las dos Raspberry. Contendrán en ellas la web de la tienda online. Esta tienda será implementada en Wordpress dentro de un docker, conectada a una base de datos externa que ya comentaremos más adelante. Elegimos hacerlo en docker ya que la infraestructura es más sencilla y básicamente tiene un despliegue rápido. La gran ventaja es que si esto en algún momento falla, podremos volver a levantar con facilidad de nuevo todo nuestro servidor de una manera rápida y sencilla.

Docker

La idea detrás de Docker es crear contenedores ligeros y portables para las aplicaciones software que puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo que la máquina tenga por debajo, facilitando así también los despliegues.

Instalación Docker CE

Podemos instalar Docker CE de diferentes formas, según sus necesidades:

  • La mayoría de los usuarios configuran repositorios de Docker e instalan desde ellos, para facilitar la instalación y las tareas de actualización. Este es el enfoque recomendado.
  • Algunos usuarios descargan el paquete DEB, lo instalan manualmente y administran las actualizaciones de forma completamente manual. Esto es útil en situaciones como la instalación de Docker en sistemas de espacio aéreo sin acceso a Internet.
  • En entornos de prueba y desarrollo, algunos usuarios optan por utilizar scripts automatizados de conveniencia para instalar Docker. Este es actualmente el único enfoque para Raspbian.

A pesar de las distintas formas que hay para instalar el docker-ce, nosotros usaremos los repositorios, ya es que es la más recomendada.

INSTALAR USANDO EL REPOSITORIO

Antes de instalar Docker CE por primera vez en una máquina host nueva, debe configurar el repositorio Docker. Después, puede instalar y actualizar Docker desde el repositorio.

configurar el repositorio

  1. Actualice el aptíndice del paquete:
  2. $ sudo apt-get update
  3. Instalar paquetes para permitir el aptuso de un repositorio a través de HTTPS:
  4. $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
  5. Agregue la clave GPG oficial de Docker:
  6. $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - Verifique que ahora tiene la clave con la huella digital 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88, buscando los últimos 8 caracteres de la huella digital.
    $ sudo apt-key fingerprint 0EBFCD88
    
    pub   4096R/0EBFCD88 2017-02-22
          Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
    uid                  Docker Release (CE deb) <[email protected]>
    sub   4096R/F273FCD8 2017-02-22
    
    
  7. Use el siguiente comando para configurar el repositorio estable . Siempre necesita el repositorio estable , incluso si desea instalar compilaciones desde el borde o repositorios de prueba . Para agregar el repositorio de borde o prueba , agregue la palabra edgeo test(o ambos) después de la palabra stableen los comandos a continuación.
  8. $ sudo add-apt-repository \ "deb [arch=armhf] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"

instalar docker ce

  1. Actualiza el aptíndice del paquete.
  2. $ sudo apt-get update
  3. Instale la última versión de Docker CE, o vaya al siguiente paso para instalar una versión específica:
  4. $ sudo apt-get install docker-ce
  5. Verifique que Docker CE esté instalado correctamente ejecutando la hello-world imagen.
  6. $ sudo docker run hello-world

Dentro de la carpeta wordpress se nos creará una carpeta html definida en el parámetro -v del fichero. Esta contendrá todos los archivos de nuestra configuración de WordPress. Esto nos permitirá trabajar desde un contenedor con los archivos en local y en caso de fallo poder desplegar fácilmente y no perder ninguna configuración.

Despliegue WordPress

Ahora ya solo queda levantar nuestro contenedor, para ello realizamos la siguiente comanda sobre el fichero configurado anteriormente. (SIEMPRE EN EL MISMO DIRECTORIO)

sudo docker-compose up -d

WordPress

Una vez llegados a este punto, WordPress nos permite crear nuestra tienda de manera sencilla a través de sus herramientas que ya analizaremos más adelante. Ahora terminaremos de configurarlo a través de la interfaz gráfica.

Configuración por interfaz

Para acabar de configurar WordPress necesitaremos introducir la IP de nuestra Raspberry en la URL del navegador y seguir los pasos.

http://direccion_ip/wordpress

Database

Esta Raspberry contendrá un docker con toda la base de datos y toda la información referente a nuestra tienda en un servidor MySQL. Estará externamente conectada a nuestro WordPress.

Docker

La idea detrás de Docker es crear contenedores ligeros y portables para las aplicaciones software que puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo que la máquina tenga por debajo, facilitando así también los despliegues.

Instalación docker-ce

Despliegue container

Ahora desplegaremos nuestro container MySQL. Primero de todo tendremos que descargarnos la imagen con el siguiente comando:

docker pull tobi312/rpi-mysql

Hay que tener en cuenta que nos hemos bajado esta imagen para arquitectura raspberry, por lo tanto quizás otra que utilicemos no nos sirva.

Ahora correremos la imagen con el comando docker run. En nuestro caso, le hemos asignado el nombre mysql al container y la contraseña de root que le hemos dado es toor. Cada vez que nos conectemos utilizaremos usuario root, contraseña toor.

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=toor -d tobi312/rpi-mysql

Ya tenemos el container funcionando, para asegurarnos, haremos un docker ps y nos tendrá que salir algo parecido a lo siguiente:

docker ps

Docker ps.PNG

Más adelante, necesitaremos saber la IP que tiene nuestro servidor para poder conectarnos a la base de datos. Para saberla, miraremos la configuración de red. Lo conseguiremos con el siguiente comando:

docker inspect mysql

Nos saldrá un apartado como el siguiente:

"bridge": {
    "IPAMConfig": null,
    "Links": null,
    "Aliases": null,
    "NetworkID": "4b031663205e70be73301115c74e0207fe9115301b08bd2b7560459bbf3bacae",
    "EndpointID": "e9a4d17d85b35197998d6cdd25639841e7e59c7cbc73ad128a0b107a3a9341b9",
    "Gateway": "172.17.0.1",
    "IPAddress": "172.17.0.2",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "02:42:ac:11:00:02",
    "DriverOpts": null
}

Aquí podremos ver la configuración de red y por lo tanto saber nuestra IP.

MySQL Server

MySQL es la base de datos de código abierto más popular del mundo. Con su rendimiento comprobado, fiabilidad y facilidad de uso, MySQL se ha convertido en la principal opción de base de datos para aplicaciones basadas en web.

Instalación cliente MySQL

Para conectarnos a nuestro servidor necesitaremos un cliente, para ello instalaremos el cliente de MySQL y así poder realizar conexiones externas.

sudo apt install mysql-client

Acceso base de datos

Una vez instalado cliente y servidor (docker), necesitaremos acceder a MySQL a través del cliente. Para ello escribimos el siguiente comando con el usuario root y la contraseña pondremos la que le hemos asignado al desplegar el docker.

 mysql -u root -p -h ip_docker'Text en cursiva'

Ahora ya podremos trabajar dentro de nuestro servidor.

Creación base de datos y usuario

Una vez hemos accedido, ya podremos empezar a crear base de datos y agregar usuario/s en ella. Aquí veremos un ejemplo de lo que nosotros hemos creado para nuestro WordPress.

Empezaremos creando le nombre de la base de datos. Nosotros no nos hemos complicado mucho y le hemos puesto wordpress.

mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Una vez creada la base de datos, crearemos un usuario con una contraseña (se recomienda utilizar una segura) y le daremos privilegios.

mysql> GRANT ALL ON wordpress.* TO 'user'@'%' IDENTIFIED BY 'password';

Ahora deberemos incluir lo siguiente para que se apliquen los cambios.

mysql> FLUSH PRIVILEGES;

Si ya hemos terminado y deseamos salir:

mysql> exit;