# 11 - Checklist: Primer Deploy

> Lista de verificación de todo lo que debe estar listo antes de hacer el primer despliegue de `proyectosacc`.

---

## 1. Infraestructura AWS

1. [ ] La instancia **EC2 T3.small** con **Ubuntu 22.04** está creada y encendida.
2. [ ] La **EC2** tiene un **Security Group** que permite:
   - Puerto `22` (SSH) desde IPs confiables.
   - Puerto `80` (HTTP) desde cualquier lugar (solo para la API).
   - Puerto `443` (HTTPS) desde cualquier lugar (solo para la API).
3. [ ] La **RDS MariaDB** (`db.t3.micro`) está creada y accesible desde la VPC.
4. [ ] El **bucket S3** para artefactos de la API está creado y la EC2 tiene permisos para leer/escribir en él.
5. [ ] El **bucket S3 para el frontend React** está creado con **Static Website Hosting** habilitado.
6. [ ] El bucket S3 del frontend tiene **versionamiento de objetos** habilitado.
7. [ ] La **distribución CloudFront** está creada, apunta al bucket S3 del frontend, tiene HTTPS y un behavior `/api/*` que apunta a la EC2.
8. [ ] El registro **Route 53** `sacc.ccsoft.mx` apunta a **CloudFront** (no a la IP de la EC2).
9. [ ] El certificado **ACM** para `sacc.ccsoft.mx` está emitido, válido y adjunto a **CloudFront**.
10. [ ] El bucket S3 del frontend tiene un **bucket policy** que permite leer objetos solo a CloudFront (OAI/OAC).

---

## 2. Servidor EC2 (configuración interna)

11. [ ] El usuario `ubuntu` puede conectarse por SSH.
12. [ ] El usuario `thoth` está creado con su directorio `/home/thoth`.
13. [ ] El usuario `osiris` está creado con su directorio `/home/osiris`.
14. [ ] Los directorios de despliegue existen:
    ```
    /home/thoth/deploy/artifacts/backup
    /home/thoth/deploy/artifacts/current
    /home/thoth/deploy/artifacts/logs
    /home/thoth/deploy/artifacts/pids
    ```
15. [ ] **Nginx** está instalado, configurado como proxy inverso **solo para la API** (`/api` → `localhost:8080`) y corriendo.
16. [ ] **Java** (`openjdk-21-jdk`) está instalado.
17. [ ] **AWS CLI** está instalado y configurado.
18. [ ] Los permisos de carpetas están correctos (`thoth` y `osiris` pueden acceder donde deben).

---

## 3. Llaves SSH

15. [ ] Se generó el **par de llaves SSH dedicado** para `proyectosacc` (no se reutilizan llaves de otros proyectos).
16. [ ] La **llave privada** está codificada en base64 y guardada en **Bitbucket Repository Variables** (`PROYECTOSACC_SSH_KEY`).
17. [ ] La **llave pública** está en `/home/thoth/.ssh/authorized_keys` (inyectada vía Terraform `user_data`).
18. [ ] Se generó el par de llaves SSH para que `thoth` clone repositorios desde Bitbucket.
19. [ ] Las **Access Keys** correspondientes están configuradas en los repositorios de Bitbucket (`ci-cd-commons`, `ci-cd-saac4`).
20. [ ] Se probó la conexión SSH desde el pipeline (o manualmente) y funciona.

---

## 4. Base de datos

21. [ ] La base de datos RDS está accesible desde la EC2.
22. [ ] Se creó el esquema o las tablas necesarias para la aplicación.
23. [ ] La aplicación tiene configurada la URL de conexión a la base de datos.
24. [ ] Las credenciales de la base de datos están guardadas de forma segura (no en el código fuente).

---

## 5. Pipeline de Bitbucket

30. [ ] El archivo `bitbucket-pipelines.yml` está en la raíz del repositorio.
31. [ ] Los 7 pasos del pipeline están configurados correctamente:
    - Paso 4 compila tanto el frontend React (`npm run build`) como la API backend.
    - Paso 5 sube el frontend a S3 y el `.jar` de la API a S3.
    - Paso 7 invalida la caché de CloudFront y reinicia la API.
32. [ ] Las **variables de entorno** están creadas en Bitbucket:
    - `PROYECTOSACC_SSH_KEY`
    - `PROYECTOSACC_SERVER_IP`
    - `PROYECTOSACC_SSH_PORT`
    - `PROYECTOSACC_SERVER_USER`
    - `PROYECTOSACC_TELEGRAM_BOT_TOKEN`
    - `PROYECTOSACC_TELEGRAM_CHAT_ID`
    - `AWS_ACCESS_KEY_ID`
    - `AWS_SECRET_ACCESS_KEY`
    - `CLOUDFRONT_DISTRIBUTION_ID`
    - `S3_FRONTEND_BUCKET`
33. [ ] Todas las variables sensibles están marcadas como **Secured** 🔒.
34. [ ] El pipeline puede clonar los repositorios necesarios (`ci-cd-commons`, `ci-cd-saac4`, etc.).

---

## 6. Scripts de despliegue

35. [ ] El script `deploy-frontend-s3.sh` existe y puede subir archivos a S3 + invalidar CloudFront.
36. [ ] El script `setup/deploy.sh` existe en el servidor y tiene permisos de ejecución (solo para la API).
37. [ ] El script `health-check.sh` existe y funciona correctamente.
38. [ ] El script `rollback.sh` existe y tiene al menos un backup de prueba de la API.
39. [ ] El script `notify-telegram.sh` envía mensajes de prueba exitosamente.

---

## 7. Aplicación SACC

40. [ ] El código fuente del **frontend React** compila sin errores (`npm run build`).
41. [ ] El código fuente de la **API backend** compila sin errores localmente.
42. [ ] El pipeline puede generar el artefacto final del frontend (`build/`) y de la API (`.jar`).
43. [ ] El artefacto de la API se puede ejecutar manualmente en la EC2.
44. [ ] La API responde en `http://localhost:8080/actuator/health` cuando corre localmente en la EC2.

---

## 8. Dominio y SSL

45. [ ] El dominio `sacc.ccsoft.mx` resuelve a **CloudFront** (verifica con `dig` o `nslookup`).
46. [ ] **CloudFront** sirve el frontend React por HTTPS sin errores de certificado.
47. [ ] **Nginx** en la EC2 redirige las peticiones de la API correctamente (`/api` → `localhost:8080`).
48. [ ] El endpoint `https://sacc.ccsoft.mx/api/actuator/health` responde correctamente.
49. [ ] Al entrar a `https://sacc.ccsoft.mx` se ve la interfaz de SACC (o al menos una página de prueba del frontend).

---

## 9. Seguridad

50. [ ] El archivo `.env` (si existe) está en `.gitignore`.
51. [ ] No hay contraseñas, tokens ni llaves privadas en el código del repositorio.
52. [ ] No se usa `sshpass` ni acceso SSH por contraseña.
53. [ ] El puerto SSH (22) del Security Group no está abierto a `0.0.0.0/0`.
54. [ ] La base de datos RDS no es pública (solo accesible desde la VPC).
55. [ ] El bucket S3 del frontend NO es público directamente; solo CloudFront accede a él (OAI/OAC).
56. [ ] Los logs sensibles no se imprimen en los archivos de configuración del pipeline.

---

## 10. Comunicación y documentación

57. [ ] El equipo de desarrollo sabe que el primer deploy se va a realizar.
58. [ ] Hay un canal de comunicación activo (Telegram, Slack, etc.) para alertas.
59. [ ] Este checklist ha sido revisado por al menos una persona más.
60. [ ] Se tiene planificado un horario de bajo tráfico para el primer deploy.

---

## ¿Listo?

Si marcaste **todas** las 60 casillas, estás listo para hacer el primer deploy. 🚀

Si te falta alguna, resuélvela antes de continuar. Es mejor tardar un poco más y hacerlo bien, que apurarse y dejar el servicio caído.

---

*Anterior: [`10-runbook-rollback.md`](10-runbook-rollback.md)*
