Files
proyectosacc-mirror/docs/02-arquitectura-general.md
2026-04-14 14:53:05 -06:00

9.0 KiB

02 - Arquitectura General

Cómo se conectan todas las piezas de proyectosacc.


1. Diagrama general

Aquí tienes un diagrama en texto que muestra el flujo completo:

┌─────────────────────────────────────────────────────────────────────────┐
│                         INTERNET (usuarios)                             │
│                              ▼                                          │
│                    https://sacc.ccsoft.mx                               │
└─────────────────────────────────────────────────────────────────────────┘
                                     │
                                     ▼
┌─────────────────────────────────────────────────────────────────────────┐
│  AWS Route 53                                                          │
│  (traduce el dominio al destino correcto)                              │
└─────────────────────────────────────────────────────────────────────────┘
                                     │
                                     ▼
┌─────────────────────────────────────────────────────────────────────────┐
│  AWS CloudFront + ACM (SSL)                                            │
│  (distribuye el frontend globalmente y pone el candadito verde HTTPS)  │
└─────────────────────────────────────────────────────────────────────────┘
                                     │
                                     ▼
┌─────────────────────────────────────────────────────────────────────────┐
│  S3 Static Website Hosting                                             │
│  (almacena y sirve el frontend React compilado)                        │
└─────────────────────────────────────────────────────────────────────────┘


FLUJO DE LA API (desde el navegador o la app)
=============================================

┌─────────────────┐      ┌─────────────────┐      ┌─────────────────┐
│  Navegador/app  │─────▶│  EC2 T3.small   │─────▶│  RDS MariaDB    │
│  (llama a /api) │      │  (API backend)  │      │  (base de datos)│
└─────────────────┘      └─────────────────┘      └─────────────────┘
                              │
                              │ Nginx Proxy (solo API, puerto 8080)
                              ▼
                       Servicio systemd
                       (usuario osiris)


OTRO FLUJO: El pipeline de despliegue
=====================================

┌──────────────┐     ┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  Bitbucket   │────▶│  Pipeline    │────▶│  S3 Buckets  │────▶│  EC2 T3      │
│  (código)    │     │  (7 pasos)   │     │  (frontend + │     │  (API)       │
│              │     │              │     │  artefactos) │     │              │
└──────────────┘     └──────────────┘     └──────────────┘     └──────────────┘
                                          │                      ▲
                                          │                      │
                                          ▼                      │
                                    CloudFront invalidation      │
                                    (actualiza cache global)     │

2. Explicación de cada pieza

💡 Dato clave: aunque CloudFront sirve principalmente el frontend desde S3, también tiene una regla especial (/api/*) que envía las peticiones de la API directamente a la EC2. Así todo el tráfico de sacc.ccsoft.mx pasa por un solo punto.

🔷 Bitbucket

Es el "banco" donde se guarda el código fuente de SACC.

  • Los desarrolladores suben sus cambios aquí.
  • Cuando hay un cambio nuevo, Bitbucket "despierta" el pipeline.

🔷 Pipeline de Bitbucket (7 pasos)

Es el robot que hace todo el trabajo:

  1. Prepara la imagen de compilación.
  2. Descarga los repositorios.
  3. Instala dependencias.
  4. Compila el frontend React (npm run build) y la API backend (./gradlew bootJar).
  5. Sube el frontend al bucket S3 y el artefacto de la API a S3.
  6. Se conecta por SSH al servidor EC2 para desplegar la API.
  7. Invalida la caché de CloudFront, reinicia la API y verifica que todo esté saludable.

🔷 S3 Bucket

Es un "almacén" de AWS con dos trabajos en proyectosacc:

  1. Sirve el frontend React como un sitio web estático.
  2. Guarda los artefactos de la API generados por el pipeline.
  • También sirve como respaldo de versiones anteriores.

🔷 CloudFront

Es la red de distribución de contenido (CDN) de AWS.

  • Rol: Toma los archivos del frontend desde S3 y los distribuye por todo el mundo de forma rápida y segura.
  • También maneja el HTTPS con el certificado de ACM.

🔷 EC2 T3.small

Es el servidor virtual de AWS donde solo vive la API/backend.

  • Tipo: t3.small (2 vCPU, 2 GB RAM).
  • Sistema operativo: Ubuntu 22.04 LTS.
  • Rol: Ejecuta el servicio de la API (Java) en el puerto 8080.
  • Nginx en la EC2 solo actúa como proxy hacia la API, no sirve el frontend React.

🔷 RDS MariaDB

Es la base de datos gestionada por AWS.

  • Tipo: db.t3.micro.
  • Rol: Guarda toda la información de la aplicación (clientes, facturas, usuarios, etc.).
  • La EC2 se conecta a ella por la red interna de AWS.

🔷 Route 53

Es el servicio de DNS de AWS.

  • Rol: Cuando un usuario escribe sacc.ccsoft.mx, Route 53 le dice al navegador que debe ir a CloudFront (no directamente a la EC2).
  • Es como la "guía telefónica" de internet.

🔷 ACM (AWS Certificate Manager)

Es el servicio que gestiona los certificados SSL.

  • Rol: Permite que https://sacc.ccsoft.mx funcione con el candadito verde.
  • El certificado se adjunta a CloudFront, no a Nginx en la EC2.

3. Integración con proyectos CI/CD compartidos

proyectosacc se conecta con otros repositorios de CI/CD de Cómputo Contable Soft que le prestan "herramientas y ladrillos" ya hechos:

  • ci-cd-commons: scripts base, utilerías como telegram_alert.sh y logger_bash.sh, y buenas prácticas de pipeline.
  • ci-cd-saac4: módulos de Terraform, patrones de infraestructura AWS y scripts de despliegue adaptados para la familia de aplicaciones SACC.

Esto evita reinventar la rueda en cada proyecto y mantiene todo alineado con los estándares de la empresa.


4. ¿Por qué cada pieza existe?

Pieza ¿Por qué la necesitamos?
Bitbucket Para guardar el código y activar el pipeline automáticamente.
Pipeline Para que nadie tenga que copiar archivos a mano.
S3 Para servir el frontend React y guardar los artefactos de la API de forma segura.
CloudFront Para distribuir el frontend rápidamente por todo el mundo con HTTPS.
EC2 T3 Es el servidor donde corre la API backend. Sin él, no hay dónde procesar las peticiones de datos.
RDS Es mejor que instalar la base de datos en la misma EC2 porque AWS la respalda, actualiza y monitorea automáticamente.
Route 53 Para que los usuarios no tengan que memorizar una IP numérica.
ACM Para que la conexión sea segura (HTTPS) y proteger los datos de los usuarios.
Nginx Para recibir las peticiones a la API y pasarlas al servicio backend en el puerto 8080.

Anterior: 01-que-es-proyectosacc.md
Siguiente: 03-infraestructura-aws.md