Instalación de Servicios Web utilizando herramientas "Red Abya Yala"

La siguiente guía aborda los pasos necesarios para que con pocos recursos y utilizando las herramientas disponibles en Red Abya Yala, podamos montar una plataforma web autónoma y segura en Internet. Te recomendamos revisar los requerimientos mínimos en esta guía antes llenar nuestro formulario de inscripción.

Nota importante sobre los comandos

Los "comandos" son líneas de código que se escriben en el programa "Terminal" de una computadora con el sistema operativo Linux.

Para usar un comando, abrimos el programa "Terminal" y veremos una ventana con fondo negro (a veces blanco) donde podemos escribir un comando por línea. Funciona un poco distinto a un editor de texto, con lo que podemos sorprendernos. Por ejemplo, presionar Enter para escribir un salto de línea "envía" el comando, independientemente de donde esté el cursor en la línea. Si usamos las flechas arriba y abajo, podemos revisar comandos anteriores y modificarlos para volver a enviarlos. Es importante tomar nota del resultado de cada comando, porque nos informan de qué cosas sucedieron como resultado, aunque algunos comandos no dan ningún resultado.

La mayoría de los comandos que damos de ejemplo en esta guía pueden copiarse y pegarse. Nos gustaría que hagan el intento de escribirlos, para que puedan familiarizarse con su "sintaxis", es decir la forma en que se generan oraciones que tienen sentido para la computadora que interpreta nuestros comandos.

Algunos comandos necesitan adaptación, marcamos las palabras que necesitan modificacion con MAYÚSCULA Y EN COLOR ROJO.

También lean las indicaciones en los #comentarios, para que no se pierdan nada.

Requerimientos mínimos

Para poder llevar a cabo nuestro objetivo, requeriremos de los siguientes materiales.

Una Computadora (física o virtual) para alojar los servicios, nuestro servidor como tal.

Una red con Acceso a Internet

Acceso a Suministro Eléctrico Estable

  • Lo ideal es que un servidor funcione las 24 horas, por ello es importante contar con un suministro eléctrico constante. Utilizar energía solar no es una mala idea.
  • Un regulador de voltaje o no-break es altamente recomendable para evitar picos de energía y con ello daños al equipo.

Espacio Físico adecuado

  • En tu servidor estará almacenada toda tu información por lo que es importante que lo coloques en un lugar seguro y dónde no sufra riesgos de pérdida.
  • Es importante que el ambiente esté lo más fresco y seco posible, para evitar el polvo y la humedad en nuestros equipos.

Computadora Personal (Terminal de trabajo)

  • Con acceso a Internet
  • Sistema Operativo GNU/Linux con SSH de preferencia (si usas Windows, revisa esta información)

Preparando el Servidor

Necesitaremos una computadora que utilizaremos como nuestro servidor, ya sea física o virtual debe contar con acceso a internet. En ella instalaremos un Sistema Operativo Ubuntu Server. Una vez acabada la instalación del SO ingresaremos con la usuaria sudo que hemos creado durante la instalación

  • Lo primero será averiguar que dirección IP tiene asignada la computadora. Anotemos esa información en algún lado ya que nos será útil posteriormente.
hostname -I
  • Para poder conectarnos remotamente, sin necesidad de teclado y monitor en el servidor, comprobamos que tengamos instalado SSH con
sudo systemctl status ssh

Si no tienes instalado ssh puedes hacerlo con el siguiente comando:

sudo apt install openssh-server

Con estos pasos ya hemos averiguado la ip de nuestro servidor. Ella nos servirá para que nos conectemos remotamente y hagamos todas las instalaciones de los servicios que queremos poner en línea. También nos hemos asegurado que SSH está instalado en la máquina.

Ya podemos ubicar el servidor en su sitio físico que hemos escogido, recordando que sea un espacio con las condiciones necesarias (electricidad, internet, clima). No es necesario que tenga monitor y teclado conectados a partir de ahora! Aunque siempre viene bien para poder resolver problemas sin acceso a la red.

Preparando la Terminal de Trabajo

Ahora nos cambiamos de equipo y comenzaremos a trabajar en la Terminal de Trabajo, que es la computadora personal que utilizaremos para controlar remotamente nuestro servidor. Como dijimos anteriormente en indudablemente mejor contar para esta labor con un sistema operativo GNU/Linux en esta computadora.

Intercambiar llaves SSH

Si bien Abra será nuestra herramienta principal para comunicarnos y controlar el servidor, utiliza SSH para la comunicación remota.

Por ello haremos algunas modificaciones en SSH (programa que viene pre instalado en Ubuntu Server) para utilizar una comunicación más segura a través de llaves de cifrado.

  • Comenzamos generando nuestro par de Llaves de Cifrado con
ssh-keygen -t ed25519

Aceptamos todas las opciones dando click en ENTER

  • Ahora podemos revisar las llaves SSH que tenemos en nuestra computadora escribiendo
ls .ssh

Ahí veremos el archivo id_ed25519 (tu llave privada que no compartes) y el id_ed25519.pub (la llave pública que compartes con los demás).

  • Procedemos a copiar nuestra llave pública en el servidor remoto, donde USUARIA es el nombre de usuaria que elegimos durante la instalación e IP_DEL_SERVIDOR la dirección IP que vimos antes con hostname -I
ssh-copy-id USUARIA@IP_DEL_SERVIDOR 

Nos pedirá la contraseña sudo de la usuaria del servidor

  • Ahora podemos logearemos remotamente a nuestro servidor con el siguiente comando, comprobemos que funcione
ssh USUARIA@IP_DEL_SERVIDOR 

Si todo funciona, hemos intercambiado correctamente entre ambas computadoras sus llaves de cifrado por lo que podrán comunicarse de forma más segura. Continuemos con la guía.

Instalación de la red Común

Red Común un tipo de red especial que usan todas las computadoras ("nodos") de la Red Abya Yala. Permite la comunicación de forma segura y que las plataformas web instaladas en los nodos sean visibles al Internet, sin tener que configurar el enrutador de nuestra conexión o aunque nuestro proveedor de internet (ISP) no nos permita la apertura de puertos. Técnicamente se conoce como una VPN, pero es un tipo distinto al que quizás conozcamos.

Dentro de la red Común, cada nodo tiene una dirección IP dentro del rango 10.13.12.0/24 es decir que las direcciones van desde el 10.13.12.1 hasta el 10.13.12.255 (255 nodos!). Esto es un rango de direcciones IP privado es decir que no son accesibles a computadoras fuera de la red común.

Es necesario para poder ser parte de red Común, pasar por un proceso de aprobación. Una vez que crees tus nodos, ponte en contacto con nosotres para que revisemos tu aplicación y te demos acceso a la red. Sin esto, los servicios públicos no funcionarán!

Instalación VPN

Los pasos que vienen a continuación deben ser ejecutados en el servidor como también en la terminal de trabajo. En esta sección descargaremos la VPN y nos daremos de alta en ella, por ello es importante que este proceso lo hagamos en ambos equipos, así nos aseguramos la comunicación entre ellos.

En esta guía te encontrarás algunos comandos que requieren modificaciones, adaptándose a las necesidades de cada nodo. Cuando en algún comando veamos PALABRAS EN MAYÚSCULAS, quiere decir que esa sección del comando debe ser ajustada a tus necesidades.

Por ejemplo cuando aparezca algo como NOMBRE_DEL_NODO, ahí debes colocar el nombre escogido para tu nodo.

Es importante que a la hora de elegir el nombre del nodo, escogas uno distinto para el servidor y para la terminal de trabajo, es decir dos nombres distintos!

Como sugerencia, el nombre del nodo servidor puede ser el nombre de la organización (por ejemplo sutty) y el nombre de la terminal, el mismo nombre con un indicador de terminal (por ejemplo suttyterminal).

# Solo para instalar la red comun en el servidor, ignoramos este comando en la terminal de trabajo
1 | ssh USUARIA@IP_DEL_SERVIDOR

# Instalar los programas necesarios
2 | sudo apt install git rsync tinc dhcpcd5 -y

# Descargar el gestor de la red común
3 | git clone https://0xacab.org/pip/rap.git

# Ingresar a la carpeta creada
4 | cd rap

# Crear el nodo, el nombre del nodo puede ser cualquier palabra, para el nombre del servidor, podemos usar el nombre de nuestra organización, para el de la terminal de trabajo, el mismo nombre más terminal
5 | NETWORK=comun ./rap init NOMBRE_DEL_NODO

# Veremos una lista de cosas sucediendo y una confirmación de que todo salió bien

Recibiremos automáticamente la información de tu nodo, pero ahora debes contactarnos completando el siguiente formulario de aplicación para que podamos darte de alta en la VPN Común.

Nos contactaremos con ustedes a la brevedad.

Al darse de alta, podrás conocer tu número IP de la red Común con el siguiente comando:

ip a show comun

y veremos algo así:

comun: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
    link/ether 5b:16:a8:4b:2p:7b brd ff:ff:ff:ff:ff:ff
    inet 10.13.12.254/24 brd 10.13.12.255 scope global noprefixroute comun
       valid_lft forever preferred_lft forever
    inet6 fe60::1c23:5623:1f4:2c68/64 scope link 
       valid_lft forever preferred_lft forever
    inet6 fe40::3c94:b5ff:fe7f:2b5a/64 scope link 
       valid_lft forever preferred_lft forever

Nuestra IP válida dentro de la VPN Común será una similar a la que está destacada

Instalación de Herramientas Abya Yala

Dejamos nuestro servidor a un lado y de ahora en adelante trabajaremos todo desde nuestra terminal de trabajo. En ella instalaremos un set de aplicaciones (Herramientas Abya Yala) que nos permitirán comunicarnos con el servidor, instalar y controlar todas las aplicaciones necesarias para desplegar los servicios en ella.

La idea es manejar remotamente todo lo correspondiente al servidor para que éste pueda estar en un lugar seguro y nosotras trabajar desde un lugar cómodo.

Instalar Abra

Iniciamos instalando Abra en nuestra computadora personal, a través de ella daremos todas las instrucciones remotas a nuestro servidor

  • En la terminal escribimos (este comando se puede copiar y pegar)
curl https://install.abra.coopcloud.tech | bash
  • Al finalizar la instalación de Abra nos pide que hagamos una modificación para poder ejercutarlo con la palabra abra. Para ello debemos ingresar en la terminal la línea que nos entrega el mismo mensaje (este comando se puede copiar y pegar)
echo 'export PATH=$HOME/.local/bin:$PATH' >> $HOME/.bashrc source ~/.bashrc
  • Ahora comprobemos que se instaló Abra correctamente escribiendo en la terminal
abra
  • Ahora instalaremos complementos para que Abra tenga funciones adicionales (estos comandos se pueden copiar y pegar línea por línea)
abra autocomplete bash sudo mkdir -p /etc/bash_completion.d/ sudo cp $HOME/.abra/autocompletion/bash /etc/bash_completion.d/abra echo "source /etc/bash_completion.d/abra" >> ~/.bashrc source ~/.bashrc
  • Y finalmente comprobaremos que el complemento este en funcionamiento, escribiendo nuevamente
1 | abra # presionar tecla TAB dos veces
# si aparece esto es porque el autocompletado funcionó y podemos escribir una parte del texto y autocompletarla presionando tab por cada palabra
app           autocomplete     catalogue     recipe        server        upgrade       

Ahora podemos conocer fácilmente qué comandos se pueden ejecutar en Abra.

Instalar Docker

Una vez dentro del servidor de manera remota a través de SSH con llaves de cifrado, procederemos a instalar Docker. Este programa es la herramienta de virtualización que estamos usando para los despliege de los servicios.

  • Por SSH en el servidor remoto escribimos
 1 | ssh USUARIA@IP_DEL_SERVIDOR
 2 | wget -O- https://get.docker.com | bash

Nos pedirá nuestra contraseña sudo

  • Una vez finalizada la instalación damos acceso a nuestra usuaria al grupo Docker
sudo usermod -aG docker $USER

Después de esto cerramos la conexión y abriremos una nueva para que los cambios sobre la usuaria se afecten.

  • Para ello cerramos la sesión actual
exit
  • y volvemos a acceder remotamente con
ssh USUARIA@IP_DEL_SERVIDOR 

Con esto hemos iniciado una nueva sesión.

  • Una vez dentro iniciamos docker swarm
docker swarm init docker network create -d overlay proxy

Con esto ya hemos dejado Docker intalado y preparado en el servidor remoto. Ya podemos volver a nuestra estación de trabajo local

  • cerramos sesión con
exit

Agregar nodo con Abra

En este momento, el servidor y la terminal de trabajo tienen una dirección IP de la red Común pero no hay una relación entre las dos, así que las vincularemos. Primero necesitaremos conocer cuál es el número IP común del servidor, para logeados remotamente en el servido, escribimos:

ip a show comun

Anotamos la dirección ip que será 10.13.12.X y terminamos la sesión remota:

exit

Ahora, en la terminal de trabajo, agregamos los registros necesarios para asociar un dominio al número IP del servidor:

1 | echo "IP_COMUN_SERVIDOR NOMBRE_DEL_NODO.comun" | sudo tee -a /etc/hosts
2 | echo -e "Host NOMBRE_DEL_NODO.comun\n  User USUARIA_DEL_SERVIDOR" >> ~/.ssh/config

Con este paso, podemos contactar al servidor por su nombre, además de por su IP. Y abra también Probemos esta función ingresando remotament al servidor con:

ssh NOMBRE_DEL_NODO.comun

Si logramos ingresar al servidor quiere decir que está todo bien, podemos salir de ella

exit

Una vez de vuelta a nuestra computadora personal, procederemos a agregar el nodo (servidor) que tenemos a disposición al listado de servidores manejados por Abra.

  • Para ello
abra server add NOMBRE_DEL_NODO.comun
  • Comprobemos que se agregó a la lista con
abra server ls

y deberíamos ver algo como lo siguiente

+-----------------+------------------+---------+------+
|       NAME      |        HOST      |  USER   | PORT |
+-----------------+------------------+---------+------+
| NOMBRE_DEL_NODO | NOMBRE_DEL_NODO  | usuaria |   22 |
+-----------------+------------------+---------+------+

Con estos pasos ya tenemos dado de alta nuestro nodo en el listado de servidores que vamos a manejar con Abra.

Instalar Traefik

Ahora que el servidor está agregado en abra, pasemos a instalar en él Traefik. Este programa controlará todo lo que tenga que ver con el tráfico de red de nuestro nodo.

En nuestra terminal de trabajo escribimos

abra app new traefik

Nos va a realizar preguntas (en inglés), las líneas que empiezan con ? son la pregunta y con > nuestra respuesta.

? Select app server:
> NOMBRE_DEL_NODO
? Specify app domain
> traefik.NOMBRE_DEL_NODO.abyaya.la

Ahora configuramos Traefik

EDITOR=nano abra app config traefik.NOMBRE_DEL_NODO.abyaya.la
  • se abrirá un editor de texto nano donde configuramos lo siguiente buscando las líneas que empiezan con # (numeral) para denotar comentarios y las "descomentamos" eliminandolo

Por ejemplo:

#esto es un comentario
esto ya no es un comentario

Buscamos las líneas que dicen LETS_ENCRYPT_ENV=production y las cambiamos por el texto de la primera línea del ejemplo a continuación, luego eliminamos el # al principio de las líneas siguientes. La información debería quedar así:

LETS_ENCRYPT_ENV=staging
WILDCARDS_ENABLED=1
SECRET_WILDCARD_CERT_VERSION=v1
SECRET_WILDCARD_KEY_VERSION=v1
COMPOSE_FILE="$COMPOSE_FILE:compose.wildcard.yml"

Guardamos presionando Ctrl + O, ENTER y salimos presionando Ctrl + X, ENTER

Ahora procederemos a activar los certificados SSL en Traefik, éstos permitirán que toda la comunicación efectuada entre la plataforma y sus usuarias este encriptada.

Certificados internos

Para poder asegurar la conectividad entre nuestro nodo y el servidor proxy de Abya Yala, necesitamos emitir certificados SSL/TLS internos.

En la terminal de trabajo:

# Instalar las dependencias
1 | sudo apt install --no-install-recommends gnutls-bin make git
# Descargar el emisor de certificados internos
2 | git clone https://0xacab.org/sutty/sutty.local.git ~/sutty.local
 Ingresar al directorio
3 | cd ~/sutty.local
# Generar un certificado y asignárselo a Traefik
4 |make coopcloud domain=NOMBRE_DEL_NODO.abyaya.la

Recibiremos una información de confirmación y podemos seguir con la instalación de Traefik.

Si ya has desplegado un nodo antes con esa misma terminal, en vez de descargar el respositorio nuevamente, ingresa a la carpeta /sutty.local y ejecuta

git pull

Con ello actualizarás el repositorio y podrás pasar directo al último comando:

make coopcloud domain=NOMBRE_DEL_NODO.abyaya.la

Despliegue de Traefik

Ya que tenemos todo listos y los certificados SSL asignados, procedemos a desplegar Traefik en el servidor.

abra app deploy -D traefik.NOMBRE_DEL_NODO.abyaya.la

Al finalizar, el servicio de traefik que controlará las comunicaciones de nuestros servicios debería estar disponible en la dirección web:

https://traefik.NOMBRE_DEL_NODO.abyaya.la

Atención: Este paso solo va a funcionar cuando seas parte de VPN Común!

Finalizando estos pasos hemos instalado y configurado todas las herramientas necesarias, tanto en nuestra computadora personal como en el servidor, que nos permitirán de ahora en adelante, desplegar fácilmente cualquiera de las recetas disponible en nuestro repositorio de recetas.



Select a repo