01 / 19
Modo edición — clic en textos · Ctrl+S exportar · E salir
Portada PFC: Taller mecánico ASIR, IES Camp de Morvedre, enlaces QR a la presentación y al repositorio
02

Mapa de la exposición (30 min) — Tabla 16

Minutos Contenido Evidencia
0–5 Contexto, objetivos y módulos ASIR Portada, intro, tabla módulos
5–12 App: login, citas, noticias, administración Navegador — flujos principales
12–18 Docker, BD, volúmenes y redes docker compose ps, esquema
18–24 Prometheus, Grafana y simulador Dashboards y carga sintética
24–28 AWS, seguridad y presupuesto Diagrama despliegue y costes
28–30 Conclusiones, mejoras y preguntas Tabla objetivos y cierre
03

Contexto: digitalización de PYMEs

  • PYME de servicios (taller mecánico): citas en papel o WhatsApp, duplicados y poca trazabilidad.
  • Digitalizar no es solo una web: ordenar datos, roles y operación con infraestructura reproducible.
  • Este PFC usa el taller como caso acotado para demostrar competencias ASIR (despliegue, red, cloud, métricas).
  • Siguiente paso: objetivos medibles — app operativa, Docker, AWS y observabilidad con Grafana.
flowchart TB
  form(["Formulario de cita"])
  auth{"Usuario registrado?"}
  data["idUser o datos invitado"]
  check["Comprobar franja libre"]
  ok(["Cita confirmada"])

  form --> auth
  auth --> data
  data --> check
  check --> ok
04

Objetivos del PFC

  • Diseñar e implantar una aplicación web funcional para la gestión básica de un taller mecánico.
  • Base de datos relacional (usuarios, citas, noticias, consejos) con integridad referencial.
  • Publicar con Docker para despliegue reproducible en local y en cloud.
  • Monitorización: salud del sistema, uso de la aplicación, BD y métricas de negocio.
  • Documentar despliegue en AWS con costes, seguridad perimetral y mantenimiento.
05

Stack tecnológico del PFC

Pulsa un sector o la leyenda para ver el rol en el proyecto.

06

Mapa de competencias ASIR (Tabla 1)

Módulo Contenidos aplicados en el PFC
Implantación de Aplicaciones Web PHP, Apache, sesiones, formularios, panel admin, API de citas.
Gestión de Bases de Datos MySQL 8, relaciones, índices, unicidad en citas y usuarios.
Administración de SGBD Inicialización SQL, usuarios de aplicación, backups, migración futura a RDS.
Servicios de Red e Internet HTTP, puertos, redes Docker, monitorización.
Administración de Sistemas Operativos Contenedores, volúmenes, logs, healthchecks, scripts de despliegue.
Seguridad y Alta Disponibilidad Roles, contraseñas cifradas, CSRF, consultas preparadas, alertas.
Planificación y Administración de Redes Docker Compose, redes, volúmenes, Security Groups en AWS.
LMSGI HTML/CSS/JS, Markdown, YAML Compose, JSON de dashboards Grafana.
Empresa e Iniciativa Emprendedora Digitalización del taller, presupuesto y costes de explotación.
Proyecto de administración de sistemas Planificación, documentación, despliegue EC2, observabilidad y pruebas.
07

Arquitectura general (Fig. 1)

flowchart TB
  usuarios(("Usuarios y operador"))
  web["Apache + PHP"]
  mysql[("MySQL")]
  metrics["metrics.php"]
  logs["Ficheros de log"]
  prom["Prometheus"]
  graf["Grafana"]
  alert["Alertmanager"]

  usuarios --> web
  web --> mysql
  web --> metrics
  logs --> prom
  metrics --> prom
  prom --> graf
  prom --> alert
  • Capa web (Apache/PHP) y persistencia MySQL.
  • Stack Prometheus / Grafana / Alertmanager y exportadores.
  • Simulador de carga opcional para evidencia en defensa.
08

Aplicación web — perfiles y funciones (Tabla 2)

Perfil Funciones (resumen)
Visitante Inicio, noticias, registro, login, citación como invitado.
Usuario registrado Reservas, citas propias, perfil y contraseña.
Administrador Usuarios, citas, noticias, consejos, estadísticas y monitorización.
Operador técnico Despliegue, logs, métricas, healthchecks, simulador y backups.
sequenceDiagram
    autonumber
    actor Cliente
    participant Nav as Navegador
    participant API as ApiChat
    participant DB as MySQL

    Cliente->>Nav: Selecciona fecha y hora
    Nav->>API: GET booked slots
    API->>DB: Consulta citas del mes
    DB-->>API: Franjas ocupadas
    API-->>Nav: JSON disponibilidad
    Nav->>API: POST nueva reserva
    API->>DB: INSERT en citas
    DB-->>API: OK
    API-->>Nav: Confirmación
    Nav-->>Cliente: Pantalla confirmación
09

Modelo de datos y flujo de reserva (Fig. 2 y 3)

erDiagram
  users_data ||--o| users_login : credenciales
  users_data ||--o{ citas : reserva
  users_data ||--o{ noticias : publica
  users_data ||--o{ consejos : escribe

  users_data {
    int idUser PK
    string email
    string nombre
  }
  users_login {
    int idLogin PK
    int idUser FK
    string usuario
    string rol
  }
  citas {
    int idCita PK
    int idUser FK
    date fecha_cita
    time hora_cita
  }
  noticias {
    int idNoticia PK
    int idUser FK
    string titulo
  }
  consejos {
    int idConsejo PK
    int idUser FK
    string titulo
  }
flowchart TD
  start(["Usuario o invitado"])
  form["Formulario de citación"]
  auth{"¿Sesión iniciada?"}
  link["Vincular idUser"]
  guest["Guardar guest_name / email / phone"]
  check["Comprobar franja libre"]
  save[("INSERT en citas")]
  ok(["Confirmación en pantalla"])

  start --> form
  form --> auth
  auth -->|Sí| link
  auth -->|No| guest
  link --> check
  guest --> check
  check --> save
  save --> ok
10

Implantación con Docker Compose (Tabla 6)

Servicio Función en el stack
web Apache/PHP — espera healthcheck de MySQL en el arranque.
mysql Persistencia — sin publicar puertos al host en producción.
prometheus + alertmanager Scraping, reglas de alerta y notificaciones.
grafana Dashboards preprovisionados desde monitoring/grafana/.
exportadores Node, MySQL, blackbox, cAdvisor, Telegraf.
simulador (perfil traffic) JMeter worker + UI para carga controlada.
flowchart LR
    sim["simulador
perfil traffic"] --> web["web
Apache + PHP"] web --> mysql[("mysql
persistencia")] prom["prometheus"] --> web prom --> exp["exportadores"] prom --> graf["grafana"] prom --> am["alertmanager"]
11

Originalidad: fuente de tráfico en métricas

flowchart TB
    operador["Operador técnico"] --> preparar["Plan JMX"]
    preparar --> jmeter["Apache JMeter CLI"]
    jmeter --> appWeb["Aplicación PHP/Apache"]
    appWeb --> accessLogs["access.log / source=app"]
    jmeter --> jtl["results.jtl / jmeter.log"]
    jtl --> metricsFile["metrics.log / source=simulator"]
    accessLogs --> prometheus["Prometheus / metrics.php"]
    metricsFile --> prometheus
    prometheus --> grafana["Grafana / comparación"]
  • Métricas HTTP etiquetadas: source=app (tráfico real) vs source=simulator (JMeter).
  • Pipeline por logs: un solo camino de observabilidad sin instrumentar cada ruta PHP.
  • Permite demostrar carga sintética sin confundirla con uso real del taller.
12

Monitorización y observabilidad

flowchart TB
  web["Apache + PHP\nmetrics.php"]
  exp["Exportadores\nNode / MySQL / blackbox"]
  prom["Prometheus"]
  graf["Grafana"]
  am["Alertmanager"]

  web --> prom
  exp --> prom
  prom --> graf
  prom --> am
  • Prometheus: contenedores, MySQL, Node, blackbox y endpoint PHP (métricas de aplicación).
  • Métricas RED: rate (req/s), errors (ratio) y duration (latencia) por Fuente de tráfico.
  • Grafana: dashboards preprovisionados (JSON en monitoring/grafana/).
  • Alertmanager: notificaciones SMTP/SES según configuración.
13

Evidencias: monitorización y contenedores (Fig. 22 y 20)

Flujo de monitorización y simulación de tráfico (Fig. 22)
Estado de contenedores Docker en EC2 (Fig. 20, docker ps)
14

Seguridad de aplicación e infraestructura

  • Aplicación: sesiones PHP, validación, roles admin/usuario, CSRF en formularios críticos.
  • API de citas: rate limiting para reducir spam de reservas (§5.2).
  • Red: Security Groups; acceso restringido a Prometheus, Grafana, Alertmanager y MySQL.
  • Simulador: token de control, límites de URLs y TLS si se expone la UI.
15

Despliegue en AWS (EC2 + Docker Compose)

flowchart TB
    ec2["EC2 + AMI"] --> userData["user-data idempotente"]
    userData --> docker["Docker Engine + Compose + Buildx"]
    docker --> repo["Repo en /opt/taller"]
    repo --> env[".env con secretos rotados"]
    env --> deploy["deploy_aws_docker.sh"]
    deploy --> logs["bootstrap.log"]
    deploy --> ps["docker ps / compose ps"]
    env --> creds["credenciales Grafana/MySQL"]
  • Packer → AMI base con Docker Engine; EC2 con user-data bootstrap idempotente.
  • Reglas de entrada mínimas para HTTP/HTTPS y UIs de laboratorio.
  • Guías y costes documentados en memoria y en docs/ del repositorio.
16

Validación y pruebas

  • Funcionales (§7.1): registro, login, citaciones, noticias, consejos y administración.
  • Despliegue y monitorización (§7.2): arranque Docker, healthchecks, targets y dashboards.
  • Simulador: carga breve con diferenciación source=app vs source=simulator.
  • Matriz de pruebas (§7.3): trazabilidad requisito → evidencia.
17

Presupuesto anual orientativo (Tabla 14)

Concepto Coste anual
EC2 t3.small 24/7 300 EUR
EBS gp3 cifrado 50 GiB 60 EUR
Dominio propio 12 EUR
Backups / snapshots 60 EUR
Correo SMTP alertas 60 EUR
Implantación + mantenimiento 550 EUR
Contingencia 10 % 104 EUR
Total orientativo 1.146 EUR/año
18

Conclusiones y mejoras futuras

  • Consecución: web operativa, BD normalizada, Docker local/AWS, monitorización activa.
  • Límites del tiempo de proyecto (HTTPS definitivo, endurecimiento adicional).
  • Mejoras: RDS, CI/CD, backups en S3, políticas RGPD.
19

Demostración, preguntas y cierre

  • Checklist demo (operador técnico): app → docker compose ps → Grafana/Prometheus → carga breve.
  • Reserva ≥5 min para preguntas del tribunal (rúbrica: exposición oral 30 %).
  • Agradecimiento al tribunal y al tutor. ¿Preguntas?