# 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)*