Initial commit: Terraform infrastructure, pipelines, docs and scripts
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
# 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)*
|
||||
Reference in New Issue
Block a user