# 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 <font color="#f00">MAYÚSCULA Y EN COLOR ROJO</font> <span style="color: darkblue;"> O AZUL</span>, quiere decir que esa sección del comando debe ser ajustada a tus necesidades.
- Por ejemplo cuando aparezca algo como <span style="color: red;">NOMBRE_DEL_NODO</span>, ahí debes colocar el nombre escogido para tu nodo o huerta digital.
Lo que está marcado con (gato) <span style="color: darkblue;"> **#comentarios**</span>, 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`
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
ssh-copy-id <span style="color: red;">USUARIA</span>@<span style="color: red;">IP_DEL_SERVIDOR</span>
</pre>
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
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
ssh <span style="color: red;">USUARIA</span>@<span style="color: red;">IP_DEL_SERVIDOR</span>
</pre>
Si 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:
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
<span style="color: darkblue;"># Nos conectamos remotamente al servidor</span>
<span style="color: grey;">1 |</span> ssh <span style="color: red;">USUARIA</span>@<span style="color: red;">IP_DEL_SERVIDOR</span>
<span style="color: darkblue;"># Instalamos los programas necesarios</span>
<span style="color: grey;">2 |</span> sudo apt install git rsync tinc dhcpcd5 -y
<span style="color: darkblue;"># Descargamos el gestor de la red común</span>
<span style="color: grey;">3 |</span> git clone https://git.coopcloud.tech/escuela-comun/rap
<span style="color: darkblue;"># Ingresamos a la carpeta creada</span>
<span style="color: grey;">4 |</span> cd rap
<span style="color: darkblue;"># Creamos el nodo, para el nombre podemos usar el nombre de nuestra organización</span>
<span style="color: grey;">5 |</span> NETWORK=comun ./rap init <span style="color: red;">NOMBRE_DEL_NODO</span>
<span style="color: darkblue;"># Veremos una lista de cosas sucediendo y una confirmación de que todo salió bien</span>
</pre>
:::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í:
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
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 <span style="color: blue;">10.13.12.254</span>/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
</pre>
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 (<span style="color: red;">IP_DEL_SERVIDOR</span>)
- La IP de la VPN Común (<span style="color: blue;">IP_COMUN</span>)
**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:
:::
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
</span> ssh <span style="color: red;">NOMBRE_DEL_NODO</span>@<span style="color: blue;">IP_COMUN</span>
</pre>
Hay que sustituir <span style="color: red;">NOMBRE_DEL_NODO</span> por el nombe que elegiste para tu nodo e <span style="color: blue;">IP_COMUN</span> 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
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
<span style="color: grey;">1 |</span> abra <span style="color: darkblue;"># 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</span>
actualizar catalogo man receta servidor
autocompletar catalogue manual recipe upgrade
autocomplete help plataforma server
</pre>
Para 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
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
<span style="color: grey;">1 |</span> ssh <span style="color: red;">NOMBRE_DEL_NODO</span>@<span style="color: blue;">IP_COMUN</span>
<span style="color: grey;">2 |</span> wget -O- https://get.docker.com | bash
</pre>
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
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
ssh <span style="color: red;">NOMBRE_DEL_NODO</span>@<span style="color: blue;">IP_COMUN</span>
</pre>
Con esto hemos iniciado una nueva sesión.
- Una vez dentro iniciamos docker swarm
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
<span style="color: grey;">1 |</span> docker swarm init --advertise-addr <span style="color: blue;">IP_COMUN</span>
<span style="color: grey;">2 |</span> docker network create -d overlay proxy
</pre>
Podemos comprobar la <span style="color: blue;">IP_COMUN</span> 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.
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
? Specify app domain
> traefik.<span style="color: red;">NOMBRE_DEL_NODO</span>.abyaya.la
</pre>
Ahora configuramos Traefik
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
abra plataforma configurar traefik.<span style="color: red;">NOMBRE_DEL_NODO</span>.abyaya.la
</pre>
- 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:
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
<span style="color: darkblue;">#esto es un comentario</span>
esto ya no es un comentario
</pre>
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í:
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
LETS_ENCRYPT_ENV=<span style="color: red;">staging</span>
DASHBOARD_ENABLED=false
WILDCARDS_ENABLED=1
SECRET_WILDCARD_CERT_VERSION=v1
SECRET_WILDCARD_KEY_VERSION=v1
COMPOSE_FILE="$COMPOSE_FILE:compose.wildcard.yml"
</pre>
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:
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
<span style="color: darkblue;"># Instalar las dependencias</span>
<span style="color: grey;">1 | </span>sudo apt install --no-install-recommends gnutls-bin make git
<span style="color: darkblue;"># Descargar el emisor de certificados internos</span>
<span style="color: grey;">2 | </span>git clone https://git.coopcloud.tech/escuela-comun/certificados.git ~/certificados
<span style="color: darkblue;"> Ingresar al directorio</span>
<span style="color: grey;">3 | </span>cd ~/certificados
<span style="color: darkblue;"># Generar un certificado y asignárselo a Traefik</span>
<span style="color: grey;">4 |</span>make coopcloud domain=<span style="color: red;">NOMBRE_DEL_NODO</span>.abyaya.la
</pre>
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:
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
make coopcloud domain=<span style="color: red;">NOMBRE_DEL_NODO</span>.abyaya.la
</pre>
### 5.8 ⤴️ Despliegue de Traefik

Ya que tenemos todo listos y los certificados SSL asignados, procedemos a desplegar Traefik en el servidor.
<pre style="color: black; background-color: #f5f5f5; padding: 10px;">
abra plataforma desplegar -D traefik.<span style="color: red;">NOMBRE_DEL_NODO</span>.abyaya.la
</pre>
### 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
---