Files
FranciaOcupada/CI-CD-README.md
Resistencia Dev 273a228a1c
Some checks failed
CI/CD - Francia Ocupada (La Resistencia) / build-and-deploy (push) Failing after 40s
feat: Configuración CI/CD con Gitea Actions
- Agregado workflow de deployment automático (.gitea/workflows/deployment.yml)
- Workflow configurado para runner 'production-ready'
- Build y deploy automático con docker-compose_prod.yml
- Verificación de estado post-despliegue
- Documentación completa en CI-CD-README.md
2025-12-13 14:26:38 +01:00

168 lines
5.1 KiB
Markdown

# 🚀 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