Projecte Integrador Bash 06: Sistema de Desplegament i Monitorització

Descripció del projecte (2 hores)

Hauràs de crear un sistema complet que integri tots els conceptes apresos durant els 5 dies anteriors. El sistema combinarà automatització SSH, backups, Ansible, systemd i interfícies gràfiques per crear una solució professional de desplegament i monitorització.


Objectiu

Desenvolupar un Sistema de Desplegament i Monitorització que permeti:

  1. Desplegar aplicacions web a múltiples servidors
  2. Monitoritzar l'estat dels servidors i aplicacions
  3. Gestionar backups automàtics
  4. Proporcionar una interfície d'usuari (CLI i GUI)

Especificacions tècniques

1. Estructura del projecte

projecte_final/
├── README.md                    # Documentació del projecte
├── config/
│   ├── servidors.conf          # Configuració de servidors
│   └── aplicacio.conf          # Configuració de l'aplicació
├── scripts/
│   ├── desplegador.sh          # Script principal de desplegament
│   ├── monitor.sh              # Script de monitorització
│   ├── backup_manager.sh       # Gestor de backups
│   └── gui_manager.sh          # Interfície gràfica (zenity)
├── ansible/
│   ├── inventory/
│   │   └── hosts               # Inventory d'Ansible
│   ├── playbooks/
│   │   ├── deploy.yml          # Desplegament de l'aplicació
│   │   ├── monitor.yml         # Instal·lar servei de monitorització
│   │   └── backup.yml          # Configurar backups
│   └── templates/
│       ├── app.html.j2         # Template de l'aplicació
│       └── monitor.service.j2  # Template del servei systemd
├── web/
│   ├── index.html              # Aplicació web de prova
│   ├── style.css
│   └── script.js
├── systemd/
│   ├── monitor-app.service     # Servei de monitorització
│   └── backup-app.timer        # Timer per backups
└── logs/
    └── .gitkeep

Components del sistema

Component 1: Desplegador (30 minuts)

Script scripts/desplegador.sh que:

Funcionalitats:

Requisits:

Exemple d'ús:

./scripts/desplegador.sh --deploy         # Desplegament complet
./scripts/desplegador.sh --update         # Actualització incremental
./scripts/desplegador.sh --rollback       # Tornar a versió anterior
./scripts/desplegador.sh --dry-run        # Veure què es farà

Fitxer de configuració config/servidors.conf:

[servidors]
web1=192.168.1.10
web2=192.168.1.11
web3=192.168.1.12

[aplicacio]
nom=MyWebApp
versio=1.0.0
port=80
directori=/var/www/myapp

[desplegament]
usuari=deploy
backup_abans=true
verificar_despres=true

Component 2: Monitor (30 minuts)

Script scripts/monitor.sh i servei systemd que:

Funcionalitats:

Servei systemd:

Requisits:

Exemple d'ús:

./scripts/monitor.sh --start              # Iniciar monitorització
./scripts/monitor.sh --status             # Veure estat actual
./scripts/monitor.sh --report             # Generar informe
./scripts/monitor.sh --dashboard          # Mostrar dashboard (CLI)

Format de dades JSON (logs/monitor_YYYYMMDD.json):

{
  "timestamp": "2024-01-08T16:30:00Z",
  "servidors": [
    {
      "nom": "web1",
      "ip": "192.168.1.10",
      "cpu": 45,
      "memoria": 68,
      "disc": 72,
      "nginx": "running",
      "resposta_ms": 120,
      "http_status": 200,
      "alertes": []
    }
  ]
}

Component 3: Gestor de Backups (30 minuts)

Script scripts/backup_manager.sh que:

Funcionalitats:

Requisits:

Exemple d'ús:

./scripts/backup_manager.sh --full        # Backup complet
./scripts/backup_manager.sh --incremental # Backup incremental
./scripts/backup_manager.sh --list        # Llistar backups
./scripts/backup_manager.sh --restore VER # Restaurar versió
./scripts/backup_manager.sh --verify      # Verificar integritat
./scripts/backup_manager.sh --cleanup     # Netejar backups antics

Component 4: Interfície Gràfica (30 minuts)

Script scripts/gui_manager.sh amb zenity que:

Funcionalitats:

Requisits:

Pantalles principals:

  1. Menú principal - Opcions principals
  2. Desplegament - Seleccionar servidors i opcions
  3. Monitor - Dashboard visual amb estat dels servidors
  4. Backups - Crear, restaurar, llistar backups
  5. Logs - Visualitzador de logs amb filtre
  6. Configuració - Editar configuració del sistema

Playbooks Ansible

ansible/playbooks/deploy.yml

---
- name: Desplegar aplicació web
  hosts: webservers
  become: yes
  
  vars:
    app_name: "{{ lookup('ini', 'nom section=aplicacio file=../../config/aplicacio.conf') }}"
    app_version: "{{ lookup('ini', 'versio section=aplicacio file=../../config/aplicacio.conf') }}"
    app_dir: "{{ lookup('ini', 'directori section=aplicacio file=../../config/aplicacio.conf') }}"
  
  tasks:
    # Implementar desplegament complet
    - name: Fer backup abans de desplegar
      # ...
    
    - name: Desplegar aplicació
      # ...
    
    - name: Configurar nginx
      # ...
    
    - name: Verificar desplegament
      # ...

Criteris d'avaluació

Funcionalitat (50%)

Integració (20%)

Qualitat del codi (15%)

Documentació (10%)

Bones pràctiques (5%)


Lliurament

Què has de lliurar?

  1. Codi complet del projecte amb l'estructura especificada
  2. README.md amb:
    • Descripció del projecte
    • Requisits i dependències
    • Instruccions d'instal·lació
    • Exemples d'ús de cada component
    • Troubleshooting
  3. Demostració funcional:
    • Desplegament a almenys 2 servidors
    • Monitorització en funcionament
    • Backup i restauració
    • GUI operativa

Format de lliurament

cognom_nom_projecte_bash.tar.gz
├── projecte_final/
│   └── [tots els fitxers del projecte]
└── README.md

Consells per a la implementació

Ordre recomanat de desenvolupament:

  1. Primer (30 min): Estructura base i configuració

    • Crear estructura de directoris
    • Fitxers de configuració
    • Inventory d'Ansible
  2. Segon (30 min): Desplegador bàsic

    • Script principal
    • Playbook de desplegament
    • Validació SSH
  3. Tercer (30 min): Monitor

    • Script de monitorització
    • Servei systemd
    • Sistema d'alertes
  4. Quart (30 min): Backups i GUI

    • Sistema de backups
    • Interfície gràfica
    • Integració final

Consells:


Recursos addicionals

Scripts d'exemple per començar:

Estructura base del desplegador:

#!/bin/bash

# Carregar configuració
source config/servidors.conf

# Funcions principals
validar_conectivitat() {
    # Implementar
}

desplegar_aplicacio() {
    # Implementar
}

verificar_desplegament() {
    # Implementar
}

# Programa principal
main() {
    case "$1" in
        --deploy)
            desplegar_aplicacio
            ;;
        *)
            mostrar_ajuda
            ;;
    esac
}

main "$@"

Eines útils:


Preguntes freqüents

P: Puc usar Docker en lloc de múltiples VMs?
R: Sí, pots crear 2-3 contenidors amb SSH per simular servidors.

P: És obligatori fer tots els components?
R: Els components 1, 2 i 3 són obligatoris. La GUI (component 4) és altament recomanada però pots fer una CLI potent si prefereixes.

P: Puc treballar en parelles?
R: Consulta amb el professor. Si es permet, cal especificar clarament què ha fet cadascú.

P: Quant de temps necessito?
R: El projecte està dissenyat per 2 hores de treball intens. Amb experiència dels 5 dies anteriors, és totalment factible.


Bonus (opcional)

Si acabes abans o vols anar més enllà:

  1. Dashboard web: Crear un servidor web simple que mostri l'estat
  2. Alertes per email: Enviar emails quan hi ha problemes
  3. Mètriques avançades: Recollir més dades (xarxa, processos, etc.)
  4. Auto-healing: Reiniciar automàticament serveis caiguts
  5. Multi-entorn: Suport per entorns (development, staging, production)
  6. Tests automatitzats: Scripts per verificar que tot funciona
  7. CI/CD: Integrar amb GitHub Actions o similar

¡Molt d'èxit amb el projecte! 🚀