Twitter Flickr Pinterest LinkedIn YouTube Google Maps E-mail RSS
formats

📚 Caso práctico: cómo PalFormación monta su plataforma de e-learning con Terraform, Ansible y Zabbix

Anuncios

La empresa PalFormación (ejemplo ficticio para entender el caso práctico), dedicada a la formación online, quiere lanzar una plataforma propia de cursos virtuales.
El reto es conseguir una solución que sea:

  • Rápida: poder desplegar entornos en minutos.
  • Estable: todos los servidores con configuraciones idénticas.
  • Escalable: crecer cuando aumente la demanda de alumnos.
  • Fiable: con monitorización en tiempo real.

Hasta ahora, el proceso era manual y lento: pedir servidores, instalarlos a mano (Apache, PHP, MySQL…), y vigilarlos con scripts improvisados. Esto llevaba semanas y era poco sostenible.

El objetivo: migrar a una estrategia DevOps moderna basada en Terraform (infraestructura como código), Ansible (automatización de configuración) y Zabbix (monitorización).


Paso 1: Infraestructura con Terraform

PalFormación necesita:

  • 2 servidores web para la aplicación.
  • 1 servidor de base de datos (MySQL).
  • 1 balanceador de carga (HAProxy).

Con Terraform, esta infraestructura se define en código.

Código (extracto

1
main.tf

)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
provider "aws" { region = "us-east-1" }

variable "num_frontends" { default = 2 }

resource "aws_instance" "web" {
  count = var.num_frontends
  ami           = "ami-xxxxxxxx"   # Ubuntu
  instance_type = "t2.micro"
  key_name      = "mi-clave-ssh"
  tags = { Name = "pf-web-${count.index}" }
}

resource "aws_instance" "db" {
  ami           = "ami-xxxxxxxx"
  instance_type = "t2.small"
  key_name      = "mi-clave-ssh"
  tags = { Name = "pf-db" }
}

resource "aws_instance" "lb" {
  ami           = "ami-xxxxxxxx"
  instance_type = "t2.micro"
  key_name      = "mi-clave-ssh"
  tags = { Name = "pf-lb" }
}

Con un simple:


1
2
terraform init
terraform apply -auto-approve

📌 Resultado: servidores creados en AWS con sus IPs y listos para configurar.


Paso 2: Configuración con Ansible

Los servidores están vacíos. Con Ansible aplicamos la configuración necesaria.

  • En los web: Nginx + PHP + aplicación PalFormación.
  • En el db: MySQL + base inicial.
  • En el lb: HAProxy para repartir tráfico.

Código (extracto

1
playbook.yml

)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
- hosts: web
  become: yes
  tasks:
    - name: Instalar Nginx y PHP
      apt:
        name: [nginx, php-fpm, php-mysql]
        state: present
        update_cache: yes
    - name: Página inicial
      copy:
        dest: /var/www/html/index.html
        content: "<h1>Bienvenido a PalFormación</h1>"

- hosts: db
  become: yes
  tasks:
    - name: Instalar MySQL
      apt:
        name: mysql-server
        state: present
        update_cache: yes
    - name: Crear base de datos
      mysql_db:
        name: palformacion
        state: present

- hosts: lb
  become: yes
  tasks:
    - name: Instalar HAProxy
      apt:
        name: haproxy
        state: present
    - name: Configurar balanceo
      copy:
        dest: /etc/haproxy/haproxy.cfg
        content: |
          frontend http_in
            bind *:80
            default_backend web_backend
          backend web_backend
            server web1 {{ hostvars['WEB1'].ansible_host }}:80 check
            server web2 {{ hostvars['WEB2'].ansible_host }}:80 check

📌 Resultado: en minutos la plataforma está online, accesible a través del balanceador.


Paso 3: Monitorización con Zabbix

Una plataforma de formación no puede caerse en mitad de un curso.
Por eso, PalFormación instala Zabbix agent en cada servidor:

  • Los web reportan CPU, memoria y estado de Nginx.
  • El db envía métricas de MySQL.
  • El lb informa de conexiones activas.

Código (extracto

1
playbook_zabbix.yml

)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- hosts: all
  become: yes
  tasks:
    - name: Instalar agente Zabbix
      apt:
        name: zabbix-agent
        state: present
        update_cache: yes
    - name: Configurar agente
      copy:
        dest: /etc/zabbix/zabbix_agentd.conf
        content: |
          Server=zabbix.midominio.com
          Hostname={{ inventory_hostname }}
      notify: restart zabbix

  handlers:
    - name: restart zabbix
      service:
        name: zabbix-agent
        state: restarted

📌 Resultado: todos los servidores quedan monitorizados en Zabbix, con paneles y alertas en tiempo real.


Paso 4: Escalabilidad rápida

Antes, añadir servidores era un dolor de cabeza. Ahora basta con cambiar una variable:


1
variable "num_frontends" { default = 5 }

Y aplicar de nuevo:


1
2
terraform apply -auto-approve
ansible-playbook -i inventory.ini playbook.yml

📌 Resultado: Terraform crea 3 servidores adicionales, Ansible los configura y Zabbix los monitoriza. Todo listo en menos de 20 minutos.


Diagrama del flujo en PalFormación


1
2
3
4
5
6
7
8
9
+-------------------+       +-------------------+       +-------------------+
|   Terraform       | ----> |   Ansible         | ----> |     Zabbix        |
| "Construye la     |       | "Configura apps,  |       | "Vigila métricas  |
|  infraestructura" |       |  bases de datos"  |       |  y envía alertas" |
+-------------------+       +-------------------+       +-------------------+

          | Infraestructura creada |
          | Aplicación desplegada  |
          | Monitorización activa  |

✅ Conclusión

Con Terraform + Ansible + Zabbix, PalFormación logra:

  • Desplegar entornos en minutos en lugar de semanas.
  • Mantener todos los servidores configurados de manera idéntica.
  • Recibir alertas en tiempo real cuando algo falla.
  • Escalar su infraestructura rápidamente con un cambio de variable.

👉 En resumen: Terraform construye, Ansible configura y Zabbix vigila.
Una combinación perfecta para cualquier empresa que quiera ofrecer formación online sin interrupciones y con confianza.

 

Anuncios
Home Formacion 📚 Caso práctico: cómo PalFormación monta su plataforma de e-learning con Terraform, Ansible y Zabbix
© www.palentino.es, desde el 2012 - Un Blog para compartir conocimientos ...

Uso de cookies en mi sitio palentino.es

Este sitio web utiliza cookies para que tengamos la mejor experiencia de usuario. Si continúas navegando estás dando tu consentimiento para la aceptación de las mencionadas cookies y la aceptación de la política de cookies

ACEPTAR
Aviso de cookies