# Instalación KIT herramientas "Red Abya Yala"  La siguiente guía explica, paso a paso, cómo convertir casi cualquier **computadora en un servidor de páginas y plataformas web**, usando únicamente **herramientas libres**. Con esto podrás crear y manejar tus propias plataformas en Internet de forma **autónoma**, **segura** y sin depender de empresas externas. Cuando instalemos todas las herramientas del **KIT Red Abya Yala**, esa computadora se transformará en un servidor capaz de alojar distintas plataformas web. Después de la instalación, podrás activar fácilmente cualquiera de las plataformas incluidas en la [lista de recetas de coopcloud](https://recipes.coopcloud.tech/). ## 1.0 📋 Tabla de Contenidos [TOC] ## 2.0 ✅ Requerimientos mínimos Para poder llevar a cabo nuestro objetivo, requeriremos de los siguientes materiales.  :::info Una **Computadora** (física o [virtual](https://)) para alojar los servicios, nuestro servidor como tal. - Procesador 2 Ghz 2GB RAM - Sistema Operativo [Ubuntu Server](https://) Una red con **Acceso a Internet** - De preferencia [conexión simétrica](https://) - De preferencia conexión de [fibra óptica](https://) **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](https://) o [no-break](https://) 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](https://). - Es importante que el ambiente esté lo más fresco y seco posible, para evitar el [polvo y la humedad](https://) en nuestros equipos. **Computadora Personal** (Terminal de trabajo) - Con acceso a Internet - Sistema Operativo GNU/Linux con SSH instalado (si usas Windows, pronto tendremos un tutorial para tí) ::: ## 3.0 💻 Nota importante sobre los comandos Los **"comandos"** son instrucciones que se escriben en el programa **"Terminal"** de una computadora con el sistema operativo GNU/Linux.  Para usar un comando, abrimos el programa **Terminal** y veremos una ventana con fondo negro donde podemos escribir instrucciones en una línea. Pareciera ser un editor de texto, pero no lo es, con lo que podemos sorprendernos. Por ejemplo: - Al presionar **Enter** se **envía o ejecuta el comando** o instrucción. - 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. :::warning **ATENCIÓN** - Los comandos que damos de ejemplo en esta guía pueden copiarse y pegarse. - **Nos gustaría que hagan el esfuerzo de escribirlos**, para que puedan familiarizarse con su sintaxis, es decir la forma en que se generan oraciones que tienen sentido para la computadora. - También te encontrarás algunos comandos que requieren modificaciones, adaptándose a las necesidades de cada nodo. Cuando en algún comando veamos MAYÚSCULA Y EN COLOR ROJO O AZUL, 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 o huerta digital. Lo que está marcado con (gato) **#comentarios**, no tenemos que ponerlas como comando, son **información de apoyo** que te recomendamos leer. ::: ## 4.0 🧑🏽🌾 Preparando la Huerta Digital  Necesitaremos una **computadora** que utilizaremos como nuestro **servidor o huerta digital**, ya sea física o virtual debe contar con acceso a internet. En ella instalaremos un Sistema Operativo [Ubuntu Server](https://). 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**. ```bash= hostname -I ``` ### 4.1 ⤵️ Instalar SSH - Para poder conectarnos remotamente, sin necesidad de teclado y monitor en el servidor, comprobamos que tengamos instalado SSH con ```bash= sudo systemctl status ssh ``` Si no tienes instalado ssh puedes hacerlo con el siguiente comando: ```bash= sudo apt install openssh-server ``` Con estos pasos ya hemos averiguado la **IP de nuestro servidor o huerta digital** en la red local. 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 o huerta digital** 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 tener uno guardado por cualquier cosa*. ### 4.2 📡 Conexión Remota La conexión remota es una acción que muy útil cuando administramos servidores y plataformas digitales. Básicamente lo que hacemos es usar otra computadora y la red para conectarnos al **servidor o huerta digital** desde lejos, así podemos darle instrucciones **sin estar físicamente al lado de ella**.  **Computadora personal** = Computadora que utilizaremos para conectarnos remotamente a nuestra Huerta Digital o servidor.  **Servidor o Huerta Digital** = Es nuestra computadora (servidor) física o virtual donde instalaremos las herramientas de la "Red Abaya Yala" ### 4.3 🔑 Generación llaves de cifrado Primero nos aseguramos que nuestra **computadora personal** tiene instalado **SSH**, abrimos la terminal y chekamos su versión con: ```bash= ssh -V ``` :::success **ATENCIÓN** Para comunicarnos y controlar remotamente el servidor, utilizaremos la **computadora personal** y el software **SSH** a través de **Terminal**.  **Si no tienes instalado SSH en tu computadora personal puedes seguir el [Paso 4.1](#41-%E2%A4%B5%EF%B8%8F-Instalar-SSH)** ::: Ahora para utilizar una comunicación más segura a través de **llaves de cifrado** debemos generar nuestras llaves. - Comenzamos generando un par de Llaves de Cifrado con ```bash 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 del sistema operativo Ubuntu en el servidor o huerta digital e `IP_DEL_SERVIDOR` la dirección IP que vimos antes con `hostname -I`
ssh-copy-id USUARIA@IP_DEL_SERVIDORNos 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_SERVIDORSi logramos acceder al servidor de manera remota, 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. ## 5.0 🦥 Instalación de la Red Abya Yala  **Red Abya Yala** un tipo especial de red que usan todas los **servidores o huertas digitales**. Permite la comunicación de forma segura ellas y que las plataformas web instaladas en los nodos sean visibles en 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 **Red Abya Yala** es una VPN, pero es un tipo distinto al que quizás conozcamos y la hemos llamado **VPN Común**. Dentro de la **VPN 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 que **VPN Común** funcione en tu servidor, ser parte de **Red Abya Yala**, y esto significa pasar por un proceso de aprobación. Una vez que crees tus nodos, ponte en contacto con nosotres a través del formulario para aparece más adelante, revisaremos tu aplicación y te daremos acceso a la red. Sin esto, ¡los servicios públicos no funcionarán! ### 5.1 ⤵️ Instalación VPN Común  En esta sección instalaremos una VPN en nuestro "nodo", **por lo que los pasos a continuación deben ser ejecutados en el servidor o huerta digital**, para ello utilizaremos SSH para conectarnos remotamente a ella. Como primer paso, nos conectaremos a nuestro servidor o Huerta Digital, para esto abrimos una terminal en nuestra **computadora personal** y escribimos los siguientes comandos:
# Nos conectamos remotamente al servidor 1 | ssh USUARIA@IP_DEL_SERVIDOR # Instalamos los programas necesarios 2 | sudo apt install git rsync tinc dhcpcd5 -y # Descargamos el gestor de la red común 3 | git clone https://git.coopcloud.tech/escuela-comun/rap # Ingresamos a la carpeta creada 4 | cd rap # Creamos el nodo, para el nombre podemos usar el nombre de nuestra organización 5 | NETWORK=comun ./rap init NOMBRE_DEL_NODO # Veremos una lista de cosas sucediendo y una confirmación de que todo salió bien:::warning Recibiremos automáticamente la información de tu nodo, pero ahora debes contactarnos completando el siguiente [formulario de aplicación](https://nube.yanapak.abyaya.la/apps/forms/s/AzP9QbY8JKGTHKsWNcofxr5s) 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 VPN Común con el siguiente comando: ```bash= ip a show comun ``` y veremos algo así:
comun:Nuestra IP válida dentro de la VPN Común será una similar a la que está destacada. Si no han fallado los pasos anteriores y por algún motivo no te da un número IP, intenta detetiendo y reiniciando el servicio tinc ```bash= sudo systemctl stop tinc sudo systemctl start tinc ``` :::success **Ahora tu huerta digital tiene 2 números IP** - La IP de la red local (IP_DEL_SERVIDOR) - La IP de la VPN Común (IP_COMUN) **Es importante que tengas anotado estos dos valores ya que los utilizaremos en los siguientes pasos**. :::  :::info De ahora en adelante, cada vez que queramos entrar a nuestra **Huerta Digital o servidor** de manera remota, debemos abrir una **terminal** en nuestra **computadora personal** y escribir: :::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
ssh NOMBRE_DEL_NODO@IP_COMUNHay que sustituir NOMBRE_DEL_NODO por el nombe que elegiste para tu nodo e IP_COMUN por la IP de la VPN Común que se te asignó: por ejemplo: huerta@10.13.12.100 Así nos conectamos remotamente a nuestra huerta digital **para trabajar todo desde nuestra computadora personal**. A continuación instalaremos un set de aplicaciones en el servidor para controlar todas las aplicaciones necesarias para desplegar los servicios en ella. --- ### 5.2 ⤵️ Instalar Abra  Iniciamos instalando Abra en nuestra huerta digital, con este software daremos todas las instrucciones a nuestro servidor. - En la terminal escribimos (este comando se puede copiar y pegar) ```bash= 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) ```bash= echo 'export PATH=$HOME/.local/bin:$PATH' >> $HOME/.bashrc source ~/.bashrc ``` - Ahora comprobemos que se instaló Abra correctamente escribiendo en la terminal ```bash= abra ``` - Ahora instalaremos complementos para que Abra tenga funciones adicionales (estos comandos se pueden copiar y pegar línea por línea) ```bash= abra autocompletar bash | sudo tee /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 actualizar catalogo man receta servidor autocompletar catalogue manual recipe upgrade autocomplete help plataforma serverPara conocer que comandos posee abra podemos escribir ```bash= abra -h ``` y debería aparacer algo así:  --- ### 5.3 ⤵️ Instalar Docker  Ahora 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 NOMBRE_DEL_NODO@IP_COMUN 2 | wget -O- https://get.docker.com | bashNos 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 NOMBRE_DEL_NODO@IP_COMUNCon esto hemos iniciado una nueva sesión. - Una vez dentro iniciamos docker swarm
1 | docker swarm init --advertise-addr IP_COMUN 2 | docker network create -d overlay proxyPodemos comprobar la IP_COMUN de la huerta con el siguiente comando: ```bash= ip a show comun ``` Con esto ya hemos dejado Docker instalado y preparado en la huerta digital. --- ### 5.5 📌 Agregar nodo con Abra  - OK. Tenemos todo listo. Comencemos diciendole a Abra que la computadora en la que estamos (local) será el servidor que administraremos. Para ello: ```bash= abra servidor agregar --local ``` - Comprobemos que se agregó a la lista de servidores administrados con ```bash= abra servidor listar ``` y deberíamos ver algo como lo siguiente ``` ┏━━━━━━━━━┳━━━━━━━┓ ┃ NAME ┃ HOST ┃ ┣━━━━━━━━━╋━━━━━━━┫ ┃ default ┃ local ┃ ┗━━━━━━━━━┻━━━━━━━┛ ``` Con estos pasos ya tenemos dado de alta nuestro nodo en el listado de servidores que vamos a manejar con Abra. ### 5.6 ⤵️ 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 plataforma nueva traefik ``` Nos va a realizar preguntas (en inglés), las líneas que empiezan con `?` son la pregunta y con `>` nuestra respuesta.
? Specify app domain
> traefik.NOMBRE_DEL_NODO.abyaya.la
Ahora configuramos Traefik
abra plataforma configurar traefik.NOMBRE_DEL_NODO.abyaya.la
- Nos pedirá seleccionar un editor de texto, selecciona `nano`.
- Se desplegará un texto largo, es el archivo de configuración.
En este archivo es donde podemos hacer cambios y modificaciones a nuestra plataforma. Todas las líneas representan configuraciones, excepto donde las líneas que empiezan con `#` (numeral), estas líneas no afectan las configuraciones y se utilizan para dejar comentarios e instrucciones.
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
DASHBOARD_ENABLED=false
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`
### 5.7 🔐 Certificados internos

Ahora procederemos a emitir y activar los **certificados SSL**, éstos permitirán que toda la comunicación efectuada entre la plataforma y sus usuarias este encriptada.
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://git.coopcloud.tech/escuela-comun/certificados.git ~/certificados Ingresar al directorio 3 | cd ~/certificados # Generar un certificado y asignárselo a Traefik 4 |make coopcloud domain=NOMBRE_DEL_NODO.abyaya.laRecibiremos 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
### 5.8 ⤴️ Despliegue de Traefik

Ya que tenemos todo listos y los certificados SSL asignados, procedemos a desplegar Traefik en el servidor.
abra plataforma desplegar -D traefik.NOMBRE_DEL_NODO.abyaya.la
### 5.9 ⚠️ ¿Qué acabamos de hacer?
Si hemos llegado hasta esta parte y hemos superado todos los errores y obstáculos... ¡Felicitaciones! tu **servidor o huerta digital** está lista para comenzar a desplegar servicios y plataformas digitales. Pero antes, hagamos un pequeño recuento de todo lo que hemos hecho hasta el momento:
En el **servidor o huerta digital** hemos:
- Instalado **Ubuntu Server** como **Sistema Operativo**
- Instalado el programa **SSH** e **intercambiado llaves** para conexiones remotas
- Instalado la **VPN Común**
- Instalado **Docker**
- Instalado **Abra**
- Instalado y desplegado **Traefik**
- Instalado **Certificados de Encriptación**

:::success
**Finalizando estos pasos hemos configurado todas las herramientas necesarias que nos permitirán de ahora en adelante, desplegar fácilmente cualquier plataforma o servicio de las [lista de recetas de coopcloud](https://recipes.coopcloud.tech/).**
:::

## 6.0 🎩🪄 Comandos Básicos de Abra

**Abra** es un software o programa desarrollado por [Coop-Cloud](https://) (**una cooperativa de tecnólogxs que apuestan por infraestructuras cooperativas**) y que permite controlar procesos en contenedores virtualizados a través docker. Para no complicarnos, hace cosas que son complicadas sean muy, pero muy simples... de ahí su nombre "abra - cadabra"
---