diff --git a/README.md b/README.md index 66acc9b..10466e5 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,50 @@ # ABYAYA.LA # -Este sistema automatiza la configuración de infraestructura mediante Ansible, utilizando un archivo de matriz (abyayala.yml) para gestionar: -- La VPN llamada *RAP* +Este sistema automatiza el despliegue de la red Abyaya.la, mediante [Ansible](), un software de automatización de código abierto, que permite la gestión de configuraciones, el despliegue de aplicaciones y la orquestación de tareas. + +- Sintaxis basada en YAML, que significa "Yet Another Markup Language". Un formato de serialización de datos legible por humanes. +- Se definien playbooks, que son scripts que automatizan secuencias de tareas y configuraciones. +- Opera sin necesidad de instalar agentes en los nodos gestionados, ya que se comunica a través de SSH. + + +### abyayala.yml +Así, gestionamos la __infraestructura como código__, en un único archivo de matriz __abyayala.yml__ + +Este describe los componentes a desplegar para qu esta red funcione. Podríamos dividirlos en dos grandes componentes: + +### La RAP + +La _Red Autónoma Pirata_ es la __VPN__ que nos permite acceder a nuestros servidores, sin importar el lugar donde estén conectados. + + +|Características|| |-------------------------------|--------------------------------------------| | Red | `10.13.12.1/24` | | DHCP | Automático | | Resolución de nombres | Hostname (ej. `ping ka.comun`) | -- El **proxy reverso** en *abyaya.la*: -|-------------------------------|--------------------------------------------| -| SSL/TLS Certificates | Automatic (Let's Encrypt) | -| Wildcard Domain | `*.nuevo.abyaya.la` | -| Acceso HTTPS | Ej: `https://sitio.nuevo.abyaya.la` | +### El PROXY +Es un servidor con una IP pública, a la que apuntamos el dominio __abyaya.la__. -La idea es reducir todo a un minimo de comandos de consola que gestionen al VPN y al Proxy a la vez. +Hace de **proxy reverso** para los demás servidores, ruteando el tráfico a cada servidor a través de la RAP. + +|Características|| +|-------------------------------|--------------------------------------------| +| Subdominios para los servidores|`nuevo.abyaya.la` | +| Servicios en los sub-sub-dominios| Ej: `https://sitio.nuevo.abyaya.la` | +| Certificados Wildcard| `*.nuevo.abyaya.la` | + +---- # Cómo funciona -Con un "comando único" en Ansible -``` -ansible-playbook deploy.yml -``` -Esto ejecuta el playbook de ansible llamado *deploy.yml", el cual lee la matriz **abyayala.yml** para actualizar tanto a la VPN como al Proxy. + +La idea es reducir todo a un solo comando único *deploy.yml", el cual leerá la matriz **abyayala.yml** para desplegar o actualizar, tanto a la VPN como al Proxy. # Componentes Principales ## Estructura de Archivos -- abyayala.yml: Configuración principal (YAML) en donde se define declarativamente la infraestructura de ambos componentes (VPN y Proxy) - deploy.yml: Playbook principal, el "comando único" +- abyayala.yml: Configuración principal (YAML) en donde se define declarativamente la infraestructura de ambos componentes (VPN y Proxy) - tasks/: Playbooks adicionales para tareas específicas - roles/: Cada rol configura un servicio del sistema @@ -34,21 +52,7 @@ Esto ejecuta el playbook de ansible llamado *deploy.yml", el cual lee la matriz Esta se hace en dos partes, pues hay que configurarlo primero en el nodo de destino y después en el servidor del proxy. -## 1.1 - Instalar la RAP en el nodo - -Para desplegar la RAP en nuestro nodo destino, utilizamos otro playbook, el script **tasks/rap.yml** especificando sus parámetros con **-e -"..."** - -``` -ansible-playbook --become tasks/rap.yml -e "nodo=nuevo host=miservidora" -``` - -En donde: -- **host**: es el nodo nuevo a configurar, según su definición en el inventario de ansible -- **nodo**: es el nombre que le daremos, el cual debe coincidir con el que desplegamos en el proxy más adelante - - -## 1.2 - Autorizar nuevo nodo en la RAP... +## 1.1 - Autorizar nuevo nodo en la RAP... También tenemos que avisar a la RAP, la cual se define en el archivo abyayala.yml, en el **server_name: vpn** @@ -84,6 +88,20 @@ Siguiendo con el ejemplo anterior, utilizaremos el parametro **service** para ej ansible-playbook deploy.yml -e "alt=abyayala host=hetzner service=vpn" ``` +## 1.2 - Instalar la RAP en el nodo + +Para desplegar la RAP en nuestro nodo destino, utilizamos otro playbook, el script **tasks/rap.yml** especificando sus parámetros con **-e +"..."** + +``` +ansible-playbook --become tasks/rap.yml -e "nodo=nuevo host=miservidora" +``` + +En donde: +- **host**: es el nodo nuevo a configurar, según su definición en el inventario de ansible +- **nodo**: es el nombre que le daremos, el cual debe coincidir con el que desplegamos en el proxy más adelante + + ## 2 - HABILITAR ACCESO HTTPS AL NUEVO NODO Por otro lado, hay que actualizar al **Proxy** para que el nuevo nodo sea accesible por HTTPS, en un subdominio público. @@ -122,6 +140,8 @@ Por ejemplo se puede acotar aún más, saltándose todas las tareas de instalaci ansible-playbook deploy.yml -e "alt=abyayala host=hetzner service=nuevo" --skip-tags=installation ``` +---- + # INSTALACIÓN ## Instalar Ansible @@ -147,7 +167,7 @@ ssh-keygen -t ed25519 ssh-copy-id root@nuevo.comun ``` -## ALTA DE USUARIXS EN EL PROXY +### ALTA DE USUARIXS EN EL PROXY Para conectarse al proxy deben agregar sus llaves como dice a continuación: @@ -155,20 +175,7 @@ Para conectarse al proxy deben agregar sus llaves como dice a continuación: * Agregarle en `group_vars/all/ssh_users.yml` (copiando la sintaxis) * Correr `ansible-playbook tasks/users.yml -e "host=hetzner"` -## DEPLOY LOCAL - -En este ejemplo, instalaremos todo en nuestro localhost para desarrollo, como si fuera un nodo del proxy. -``` -ansible-playbook --become tasks/rap.yml -e "host=localhost nodo=nombrelo" -i hosts.local -``` -Esto también es útil para instalar Ansible en nuestra terminal, junto con sus dependencias (Módulos para docker, etc.) - -#### SSH PARA DESARROLLO -Para autoconectarse por SSH hay que autorizarse a sí mismx: -``` -# Habilitar auto-conexión SSH -cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys -``` +--- # TESTING @@ -183,6 +190,7 @@ root@proxy-reverso-escuela-comun:~# ping ka.comun PING ka.comun (10.13.12.129) 56(84) bytes of data. 64 bytes from ka.comun (10.13.12.129): icmp_seq=1 ttl=64 time=169 ms ``` + ## Acceso HTTPS Por otra parte, como resultado del despliegue de la segunda parte (PROXY), el **nodo** debe ser accesible en el subdominio **nuevo. abyaya.la** @@ -191,3 +199,19 @@ Los servicios de cada nodo son accesibles a través de SSL en **sub-sub-** domin Por ej. **https://sitio.nuevo.abyaya.la** o **https://nube.nuevo.abyaya.la** + +--- +## DEPLOY LOCAL + +En este ejemplo, instalaremos todo en nuestro localhost para desarrollo, como si fuera un nodo del proxy. +``` +ansible-playbook --become tasks/rap.yml -e "host=localhost nodo=nombrelo" -i hosts.local +``` +Esto también es útil para instalar Ansible en nuestra terminal, junto con sus dependencias (Módulos para docker, etc.) + +#### SSH PARA DESARROLLO +Para autoconectarse por SSH hay que autorizarse a sí mismx: +``` +# Habilitar auto-conexión SSH +cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys +```