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.
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.
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
Espacio Físico adecuado
Computadora Personal (Terminal de trabajo)
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
hostname -I
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.
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.
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.
ssh-keygen -t ed25519
Aceptamos todas las opciones dando click en ENTER
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).
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
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.
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!
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
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.
Iniciamos instalando Abra en nuestra computadora personal, a través de ella daremos todas las instrucciones remotas a nuestro servidor
curl https://install.abra.coopcloud.tech | bash
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
abra
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
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.
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.
1 | ssh USUARIA@IP_DEL_SERVIDOR 2 | wget -O- https://get.docker.com | bash
Nos pedirá nuestra contraseña sudo
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.
exit
ssh USUARIA@IP_DEL_SERVIDOR
Con esto hemos iniciado una nueva sesión.
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
exit
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.
abra server add NOMBRE_DEL_NODO.comun
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.
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
nano
donde configuramos lo siguiente buscando las líneas que empiezan con #
(numeral) para denotar comentarios y las "descomentamos" eliminandoloPor 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.
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
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.