Este directorio contiene los workflows de GitHub Actions para CI/CD del proyecto SISCOM Admin API.
Se ejecuta cuando:
- Se hace push a la rama
master - Se ejecuta manualmente desde GitHub Actions
Pasos:
- Verifica el código con Ruff y Black
- Construye la imagen Docker
- Copia la imagen al servidor EC2
- Despliega el contenedor en producción
- Verifica que el deployment fue exitoso
Se ejecuta cuando:
- Se crea o actualiza un Pull Request hacia
masterodevelop - Se hace push a la rama
develop
Pasos:
- Ejecuta linters (Ruff, Black)
- Ejecuta tests con pytest
- Construye y prueba la imagen Docker
Debes configurar los siguientes secrets en GitHub: Settings → Secrets and variables → Actions → New repository secret
EC2_HOST # IP o hostname del servidor EC2
EC2_USERNAME # Usuario SSH (ej: ubuntu, ec2-user)
EC2_SSH_KEY # Clave privada SSH (contenido completo)
EC2_SSH_PORT # Puerto SSH (generalmente 22)
DB_PASSWORD # Contraseña de PostgreSQL
COGNITO_USER_POOL_ID # ID del User Pool de Cognito (ej: us-east-1_XXXXXXXX)
COGNITO_CLIENT_ID # Client ID de Cognito
COGNITO_CLIENT_SECRET # Client Secret de Cognito
DEFAULT_USER_PASSWORD # Contraseña temporal por defecto para nuevos usuarios
💡 Nota sobre AWS Credentials: NO necesitas configurar AWS_ACCESS_KEY_ID ni AWS_SECRET_ACCESS_KEY si tu instancia EC2 tiene un IAM Role asignado con permisos para Cognito. Boto3 usará automáticamente las credenciales del IAM Role. Esta es la forma recomendada y más segura.
📖 Ver guía completa: Configuración de IAM Role para EC2
Configura estas variables en: Settings → Secrets and variables → Actions → Variables → New repository variable
| Variable | Valor de Ejemplo | Descripción |
|---|---|---|
PROJECT_NAME |
SISCOM Admin API |
Nombre del proyecto |
DB_HOST |
siscom-db.xxxxx.us-east-1.rds.amazonaws.com |
Endpoint de RDS |
DB_PORT |
5432 |
Puerto de PostgreSQL |
DB_USER |
siscom_admin |
Usuario de PostgreSQL |
DB_NAME |
siscom_admin |
Nombre de la base de datos |
COGNITO_REGION |
us-east-1 |
Nota Importante: COGNITO_REGION es crítica - si no está configurada o está vacía, el deployment fallará con error: Invalid endpoint: https://cognito-idp..amazonaws.com
El workflow de deploy usa el environment production. Debes crearlo en:
Settings → Environments → New environment
Nombre: production
Puedes configurar:
- Protection rules: Requerir aprobación antes de deploy
- Environment secrets: Secrets específicos para este environment
Antes de ejecutar el workflow por primera vez, asegúrate de que tu servidor EC2 tenga:
# Instalar Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
# Instalar Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-composedocker network create siscom-networkmkdir -p ~/siscom-admin-api# Permitir tráfico en el puerto 8100
sudo ufw allow 8100/tcp- Ve a Actions en tu repositorio de GitHub
- Selecciona el workflow Deploy to EC2
- Click en Run workflow
- Selecciona la rama
master - Click en Run workflow
Para probar el deployment localmente antes de hacer push:
# Construir la imagen
docker build -t siscom-admin-api:latest .
# Crear archivo .env para testing
cat > .env << EOF
PROJECT_NAME=SISCOM Admin API
DB_HOST=localhost
DB_PORT=5432
DB_USER=siscom
DB_PASSWORD=changeme
DB_NAME=siscom_admin
AWS_ACCESS_KEY_ID=your_key
AWS_SECRET_ACCESS_KEY=your_secret
COGNITO_REGION=us-east-1
COGNITO_USER_POOL_ID=your_pool_id
COGNITO_CLIENT_ID=your_client_id
COGNITO_CLIENT_SECRET=your_client_secret
DEFAULT_USER_PASSWORD=TempPass123!
EOF
# Levantar con docker-compose
docker-compose -f docker-compose.prod.yml up -d
# Ver logs
docker logs -f siscom-admin-api
# Verificar health
curl http://localhost:8100/healthPara problemas comunes y soluciones detalladas, consulta: 📖 Guía de Troubleshooting Completa
Solución Automática: Vuelve a ejecutar el workflow manualmente desde GitHub Actions.
Solución Manual: Ejecuta en el servidor:
cd ~/siscom-admin-api
./scripts/cleanup_deployment.sh- Verifica que los secrets estén configurados correctamente
- Asegúrate de que la clave SSH tenga los permisos correctos
- Revisa que el servidor EC2 sea accesible desde GitHub Actions
- Revisa los logs:
docker logs siscom-admin-api - Verifica que todas las variables de entorno estén configuradas
- Asegúrate de que la base de datos sea accesible desde el servidor
- Verifica que el security group de RDS permita conexiones desde el EC2
- Confirma que las credenciales de BD sean correctas
- Prueba la conexión manualmente desde el servidor EC2
Para más detalles y soluciones avanzadas, consulta la Guía de Troubleshooting
Para contribuir mejoras a los workflows:
- Crea una rama para tus cambios
- Prueba los workflows localmente cuando sea posible
- Crea un Pull Request
- El workflow de CI se ejecutará automáticamente