# 🚀 CI/CD con Gitea Actions - Francia Ocupada ## 📋 Configuración Actual ### Runner Configurado - **Nombre**: `runner-01-ci-vm` - **Etiqueta**: `production-ready:host` - **URL Gitea**: `http://gitea.local:3000` - **Estado**: ✅ Corriendo sin problemas ### Workflow Creado - **Ubicación**: `.gitea/workflows/deployment.yml` - **Trigger**: Push a `main` o `master`, o ejecución manual - **Acciones**: Build y deploy automático con Docker Compose ## 🔄 Flujo de Despliegue El workflow ejecuta los siguientes pasos: 1. **🚀 Checkout del Código**: Descarga el código del repositorio 2. **⚙️ Configurar Node.js**: Instala Node.js 20 para las acciones 3. **🛑 Detener Contenedores Anteriores**: Para y elimina los contenedores existentes 4. **🧹 Limpiar Imágenes Antiguas**: Elimina imágenes Docker sin usar 5. **🔨 Construir Imágenes Docker**: Construye las imágenes con `docker-compose_prod.yml` 6. **📦 Desplegar Aplicación**: Levanta los contenedores en modo producción 7. **✅ Verificar Despliegue**: Comprueba que los contenedores están corriendo 8. **📋 Mostrar Logs Recientes**: Muestra logs para debugging ## 🧪 Cómo Hacer Pruebas de Despliegue ### Opción 1: Push a la rama principal (Automático) ```bash # Hacer algún cambio en el código echo "# Test CI/CD" >> README.md # Commit y push git add . git commit -m "test: Prueba de CI/CD automático" git push origin main # o master, según tu rama principal ``` ### Opción 2: Ejecución Manual desde Gitea 1. Ve a tu repositorio en Gitea: `http://gitea.local:3000/[tu-usuario]/resistencia` 2. Navega a la pestaña **Actions** 3. Selecciona el workflow **"CI/CD - Francia Ocupada (La Resistencia)"** 4. Haz clic en **"Run workflow"** 5. Selecciona la rama y confirma ### Opción 3: Forzar un push vacío (sin cambios) ```bash # Esto dispara el workflow sin hacer cambios reales git commit --allow-empty -m "test: Trigger CI/CD workflow" git push origin main ``` ## 📊 Monitorear el Despliegue ### Desde Gitea Web UI 1. Ve a **Actions** en tu repositorio 2. Verás el workflow ejecutándose en tiempo real 3. Haz clic en el workflow para ver los logs detallados de cada paso ### Desde el Servidor (SSH) ```bash # Ver estado de los contenedores docker compose -f docker-compose_prod.yml ps # Ver logs en tiempo real docker compose -f docker-compose_prod.yml logs -f # Ver logs de un servicio específico docker compose -f docker-compose_prod.yml logs -f client docker compose -f docker-compose_prod.yml logs -f server docker compose -f docker-compose_prod.yml logs -f db # Ver imágenes Docker docker images | grep resistencia ``` ## 🔧 Solución de Problemas ### El workflow falla en el checkout **Problema**: Error de autenticación con Gitea **Solución**: - Verifica que el token de registro del runner sea correcto - Asegúrate de que el runner tenga acceso al repositorio ### El workflow falla en la construcción **Problema**: Error al construir las imágenes Docker **Solución**: ```bash # En el servidor, construir manualmente para ver el error cd /ruta/al/proyecto docker compose -f docker-compose_prod.yml build --no-cache ``` ### Los contenedores no inician **Problema**: Los contenedores se detienen inmediatamente **Solución**: ```bash # Ver logs de error docker compose -f docker-compose_prod.yml logs # Verificar configuración docker compose -f docker-compose_prod.yml config ``` ### Puerto ya en uso **Problema**: Los puertos 3000, 4000 o 5432 están ocupados **Solución**: ```bash # Ver qué está usando los puertos sudo lsof -i :3000 sudo lsof -i :4000 sudo lsof -i :5432 # Detener contenedores anteriores docker compose -f docker-compose_prod.yml down ``` ## 🎯 Verificación Post-Despliegue Después de un despliegue exitoso, verifica: 1. **Frontend accesible**: https://franciaocupada.martivich.es 2. **API accesible**: https://api.franciaocupada.martivich.es 3. **Contenedores corriendo**: ```bash docker compose -f docker-compose_prod.yml ps ``` Deberías ver 3 contenedores: `client`, `server`, `db` 4. **Logs sin errores**: ```bash docker compose -f docker-compose_prod.yml logs --tail=100 ``` ## 📝 Notas Importantes - **Rama principal**: El workflow se activa en push a `main` o `master` - **Etiqueta del runner**: Debe ser `production-ready` (configurada en tu runner) - **Docker Compose**: Usa `docker-compose_prod.yml` para producción - **Variables de entorno**: Configuradas en `docker-compose_prod.yml`: - `NEXT_PUBLIC_API_URL=https://api.franciaocupada.martivich.es` - `CORS_ORIGIN=https://franciaocupada.martivich.es` ## 🔐 Seguridad - El workflow usa el token de Gitea automáticamente (`${{ gitea.token }}`) - No es necesario configurar secrets adicionales para este workflow básico - Si necesitas secrets (API keys, passwords), agrégalos en: - Gitea → Repositorio → Settings → Secrets ## 🚀 Próximos Pasos Recomendados 1. **Pruebas automatizadas**: Agregar tests antes del deploy 2. **Notificaciones**: Configurar notificaciones de éxito/fallo 3. **Rollback automático**: Implementar rollback si el deploy falla 4. **Health checks**: Verificar que la app responde correctamente 5. **Backup de DB**: Hacer backup antes de cada deploy