diff --git a/.github/workflows/deploy-docker.yml b/.github/workflows/deploy-docker.yml new file mode 100644 index 00000000..80ccc4cc --- /dev/null +++ b/.github/workflows/deploy-docker.yml @@ -0,0 +1,49 @@ +name: Auto Deploy Docker to Server + +on: + push: + branches: + - main + workflow_dispatch: # Permite ejecutar manualmente + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout código + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build Docker image + run: | + docker build -t emerges-tes:latest . + + - name: Verificar imagen + run: | + docker images | grep emerges-tes + docker run --rm emerges-tes:latest ls -la /app/dist || exit 1 + + - name: Desplegar en servidor + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.SERVER_HOST }} + username: ${{ secrets.SERVER_USER }} + key: ${{ secrets.SERVER_SSH_KEY }} + port: ${{ secrets.SERVER_PORT || 22 }} + script: | + cd ${{ secrets.APP_PATH }} + ./deploy-docker.sh --skip-git + + - name: Notificar resultado + if: always() + run: | + if [ "${{ job.status }}" == "success" ]; then + echo "✅ Deploy Docker completado exitosamente" + else + echo "❌ Deploy Docker falló" + fi diff --git a/.gitignore b/.gitignore index 4d9e7ce6..d7eafa10 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,7 @@ __pycache__/ *.bak *.backup backup_manual_pre_limpieza/ + +# Docker +.docker/ +docker-compose.override.yml diff --git a/DEPLOYMENT_DOCKER.md b/DEPLOYMENT_DOCKER.md new file mode 100644 index 00000000..2fa2f8d9 --- /dev/null +++ b/DEPLOYMENT_DOCKER.md @@ -0,0 +1,382 @@ +# 🐳 Guía de Despliegue con Docker + +Esta guía explica cómo desplegar EMERGES TES usando Docker en tu servidor. + +--- + +## 📋 Requisitos Previos + +- **Docker** instalado (versión 20.10+) +- **Docker Compose** instalado (versión 2.0+) o Docker con compose plugin +- **Git** instalado +- **Puerto 8607** disponible +- **Acceso SSH** al servidor (para auto-deploy) + +--- + +## 🚀 Instalación Inicial + +### 1. Instalar Docker + +```bash +# Ubuntu/Debian +curl -fsSL https://get.docker.com -o get-docker.sh +sudo sh get-docker.sh + +# Verificar instalación +docker --version +docker compose version +``` + +### 2. Clonar el Repositorio + +```bash +cd /ruta/donde/quieres/la/app +git clone https://github.com/tu-usuario/guia-tes-digital.git +cd guia-tes-digital +``` + +### 3. Configurar Script de Deploy + +```bash +# Hacer ejecutable +chmod +x deploy-docker.sh + +# Probar el script manualmente +./deploy-docker.sh +``` + +--- + +## 🔧 Despliegue Manual + +### Opción 1: Script de Deploy (Recomendado) + +```bash +./deploy-docker.sh +``` + +Este script: +1. ✅ Actualiza código desde GitHub (`git pull`) +2. ✅ Detiene contenedor existente +3. ✅ Construye imagen Docker +4. ✅ Inicia contenedor en puerto 8607 + +### Opción 2: Docker Compose Directo + +```bash +# Construir e iniciar +docker-compose up -d --build + +# Ver logs +docker-compose logs -f + +# Detener +docker-compose down +``` + +### Opción 3: Docker Directo + +```bash +# Construir imagen +docker build -t emerges-tes:latest . + +# Ejecutar contenedor +docker run -d \ + --name emerges-tes \ + -p 8607:8607 \ + --restart unless-stopped \ + emerges-tes:latest + +# Ver logs +docker logs -f emerges-tes +``` + +--- + +## 🔄 Auto-Deploy desde GitHub + +### Configurar GitHub Actions + +1. **Añadir Secrets en GitHub:** + - Ve a: `Settings > Secrets and variables > Actions` + - Añade estos secrets: + ``` + SERVER_HOST = tu-servidor-ip-o-dominio + SERVER_USER = tu-usuario-ssh + SERVER_SSH_KEY = (contenido de tu clave privada SSH) + SERVER_PORT = 22 (o el puerto que uses) + APP_PATH = /ruta/completa/a/tu/app + ``` + +2. **El workflow ya está configurado:** + - Archivo: `.github/workflows/deploy-docker.yml` + - Se ejecuta automáticamente en cada push a `main` + +3. **Probar manualmente:** + - Ve a: `Actions > Auto Deploy Docker to Server > Run workflow` + +--- + +## 🛠️ Comandos Útiles + +### Gestión de Contenedores + +```bash +# Ver estado +docker ps | grep emerges-tes + +# Ver logs +docker logs emerges-tes + +# Ver logs en tiempo real +docker logs -f emerges-tes + +# Reiniciar contenedor +docker restart emerges-tes + +# Detener contenedor +docker stop emerges-tes + +# Iniciar contenedor +docker start emerges-tes + +# Eliminar contenedor +docker rm -f emerges-tes +``` + +### Gestión de Imágenes + +```bash +# Ver imágenes +docker images | grep emerges-tes + +# Eliminar imagen antigua +docker rmi emerges-tes:latest + +# Forzar rebuild +docker-compose build --no-cache +``` + +### Docker Compose + +```bash +# Iniciar +docker-compose up -d + +# Detener +docker-compose down + +# Reiniciar +docker-compose restart + +# Ver logs +docker-compose logs -f + +# Rebuild forzado +docker-compose up -d --build --force-recreate +``` + +--- + +## 🔍 Verificación y Monitoreo + +### Verificar que la App está Corriendo + +```bash +# Verificar contenedor +docker ps | grep emerges-tes + +# Verificar puerto +netstat -tlnp | grep 8607 +# O +ss -tlnp | grep 8607 + +# Verificar salud +curl http://localhost:8607 +``` + +### Health Check + +El contenedor incluye un health check automático: + +```bash +# Ver estado de salud +docker inspect emerges-tes | grep -A 10 Health +``` + +### Acceder a la Aplicación + +- **Local:** `http://localhost:8607` +- **Red:** `http://tu-servidor-ip:8607` +- **Dominio:** `http://tu-dominio.com:8607` + +--- + +## 🔒 Configurar Nginx como Reverse Proxy (Opcional) + +Si quieres usar un dominio y puerto 80/443: + +```nginx +server { + listen 80; + server_name tu-dominio.com; + + location / { + proxy_pass http://localhost:8607; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} +``` + +Luego: +```bash +sudo nginx -t +sudo systemctl reload nginx +``` + +--- + +## 🐛 Solución de Problemas + +### Error: "Docker no está instalado" + +```bash +# Instalar Docker +curl -fsSL https://get.docker.com -o get-docker.sh +sudo sh get-docker.sh +``` + +### Error: "docker-compose: command not found" + +```bash +# Docker Compose V2 (plugin) +docker compose version + +# O instalar Docker Compose V1 +sudo apt-get install docker-compose +``` + +### Error: "Puerto 8607 ya en uso" + +```bash +# Ver qué proceso usa el puerto +sudo lsof -i :8607 +# O +sudo netstat -tlnp | grep 8607 + +# Detener contenedor existente +docker stop emerges-tes +docker rm emerges-tes +``` + +### Error: "Build falla" + +```bash +# Limpiar caché de Docker +docker system prune -a + +# Rebuild sin caché +docker-compose build --no-cache +``` + +### Error: "Contenedor no inicia" + +```bash +# Ver logs detallados +docker logs emerges-tes + +# Verificar que dist/ existe en la imagen +docker run --rm emerges-tes:latest ls -la /app/dist + +# Verificar Dockerfile +cat Dockerfile +``` + +### La app no se actualiza automáticamente + +1. **Verificar GitHub Actions:** + - Ve a: `Actions` en GitHub + - Ver si el workflow se ejecutó + - Revisar logs + +2. **Verificar que el script se ejecutó:** + ```bash + # En el servidor + docker ps | grep emerges-tes + docker logs emerges-tes | tail -20 + ``` + +--- + +## 📊 Ventajas de Docker + +✅ **Aislamiento:** La app corre en su propio contenedor +✅ **Consistencia:** Mismo entorno en dev y producción +✅ **Fácil despliegue:** Un solo comando para desplegar +✅ **Rollback fácil:** Volver a imagen anterior +✅ **Escalabilidad:** Fácil de escalar horizontalmente +✅ **Mantenimiento:** Actualizar es tan simple como rebuild + +--- + +## 🔄 Actualización Manual + +```bash +# 1. Actualizar código +git pull origin main + +# 2. Rebuild y reiniciar +./deploy-docker.sh --rebuild + +# O manualmente: +docker-compose down +docker-compose build --no-cache +docker-compose up -d +``` + +--- + +## 📝 Checklist de Despliegue + +- [ ] Docker instalado y funcionando +- [ ] Docker Compose instalado +- [ ] Repositorio clonado +- [ ] `deploy-docker.sh` es ejecutable +- [ ] Primer deploy manual exitoso +- [ ] App accesible en `http://servidor:8607` +- [ ] Auto-deploy configurado (GitHub Actions) +- [ ] Health check funcionando +- [ ] Logs accesibles + +--- + +## 🔐 Seguridad + +- ✅ No exponer Docker socket públicamente +- ✅ Usar HTTPS si es posible (Let's Encrypt) +- ✅ Configurar firewall (solo puertos necesarios) +- ✅ Mantener Docker actualizado +- ✅ Usar secrets de GitHub para credenciales SSH +- ✅ Limitar acceso SSH (solo desde IPs conocidas) + +--- + +## 📞 Soporte + +Si tienes problemas: +1. Revisar logs: `docker logs emerges-tes` +2. Verificar estado: `docker ps | grep emerges-tes` +3. Probar deploy manual: `./deploy-docker.sh` +4. Verificar puerto: `netstat -tlnp | grep 8607` + +--- + +**Última actualización:** 2024-12-19 diff --git a/PLAN_LIMPIEZA_DOCKER.md b/PLAN_LIMPIEZA_DOCKER.md new file mode 100644 index 00000000..e89a2cec --- /dev/null +++ b/PLAN_LIMPIEZA_DOCKER.md @@ -0,0 +1,469 @@ +# 📁 PLAN DE LIMPIEZA Y OPTIMIZACIÓN DEL PROYECTO (Docker) + +**Proyecto:** EMERGES TES - Protocolo Rápido +**Base:** React 18 + TypeScript + Vite + TailwindCSS + **Docker** +**Fecha:** 2024-12-19 +**Ruta:** `/home/planetazuzu/protocolo-r-pido` + +--- + +## 🎯 OBJETIVOS DE LIMPIEZA + +- ✅ Eliminar archivos innecesarios (backups, duplicados, obsoletos) +- ✅ Optimizar estructura (organizar recursos pendientes) +- ✅ Reducir tamaño del proyecto sin afectar funcionalidad +- ✅ Mantener integridad de la aplicación PWA +- ✅ Consolidar documentación redundante +- ✅ **Optimizar para despliegue con Docker** + +--- + +## 🐳 DESPLIEGUE CON DOCKER (Nuevo) + +### Configuración Docker Creada + +- ✅ `Dockerfile` - Multi-stage build optimizado +- ✅ `docker-compose.yml` - Gestión simplificada +- ✅ `deploy-docker.sh` - Script de despliegue +- ✅ `.dockerignore` - Optimización de build +- ✅ `.github/workflows/deploy-docker.yml` - Auto-deploy +- ✅ `DEPLOYMENT_DOCKER.md` - Documentación completa + +### Ventajas de Docker + +- ✅ **Aislamiento:** App corre en su propio contenedor +- ✅ **Consistencia:** Mismo entorno en dev y producción +- ✅ **Fácil despliegue:** Un solo comando +- ✅ **Rollback fácil:** Volver a imagen anterior +- ✅ **Sin dependencias:** No requiere Node.js en servidor + +--- + +## 📂 ESTRUCTURA ACTUAL PARA LIMPIEZA + +### 1. 📦 ARCHIVOS DEL SISTEMA Y TEMPORALES (ELIMINAR) + +```bash +# Archivos del sistema operativo +find . -type f -name ".DS_Store" -delete +find . -type f -name "Thumbs.db" -delete +find . -type f -name ".localized" -delete +find . -type f -name "*.swp" -delete # Vim swap files +find . -type f -name "*.swo" -delete + +# Logs de npm/yarn +find . -type f -name "npm-debug.log*" -delete +find . -type f -name "yarn-debug.log*" -delete +find . -type f -name "yarn-error.log*" -delete + +# Archivos de IDE (pero mantener .vscode/extensions.json si existe) +rm -rf .idea/ +rm -rf *.iml +rm -rf *.sublime-* +``` + +### 2. 🗑️ CARPETAS DE BACKUP Y REDUNDANTES (MOVER/ELIMINAR) + +#### Carpeta principal a limpiar: `_BACKUP_MD/` (203 archivos) + +```bash +# Crear carpeta de archivos eliminados (por si acaso) +mkdir -p ../deleted_backups_$(date +%Y%m%d) + +# Mover archivos .md duplicados (ya existen en public/manual/) +find _BACKUP_MD/ -name "*.md" -exec mv {} ../deleted_backups_$(date +%Y%m%d)/ \; + +# Mover archivos .docx (no necesarios en producción) +find _BACKUP_MD/ -name "*.docx" -exec mv {} ../deleted_backups_$(date +%Y%m%d)/ \; + +# Mover scripts Python de backup +find _BACKUP_MD/ -name "*.py" -exec mv {} ../deleted_backups_$(date +%Y%m%d)/ \; + +# Finalmente eliminar carpeta vacía +rmdir _BACKUP_MD/ +``` + +#### Carpeta: `imagenes-pendientes/` (60 archivos) + +```bash +# Verificar qué imágenes son realmente necesarias +echo "=== IMÁGENES PENDIENTES ===" +find imagenes-pendientes/ -type f \( -name "*.png" -o -name "*.jpg" -o -name "*.svg" \) | wc -l + +# Mover imágenes que coinciden con nombres existentes en public/assets/ +for img in imagenes-pendientes/*; do + base=$(basename "$img") + if [ ! -f "public/assets/infografias/$base" ]; then + echo "Manteniendo pendiente: $base" + else + echo "Duplicado, moviendo: $base" + mv "$img" ../deleted_backups_$(date +%Y%m%d)/ + fi +done + +# Si la carpeta queda vacía, eliminar +rmdir imagenes-pendientes/ 2>/dev/null || echo "Carpeta con archivos restantes" +``` + +#### Carpeta: `MANUAL_TES_DIGITAL/` (110 archivos .md) + +```bash +# Esta carpeta parece duplicado de public/manual/ +# Mover fuera del proyecto +mv MANUAL_TES_DIGITAL/ ../backup_manual_completo_$(date +%Y%m%d)/ +``` + +### 3. 📝 DOCUMENTACIÓN REDUNDANTE (CONSOLIDAR) + +```bash +# Crear carpeta organizada para documentación +mkdir -p docs/consolidated/ +mkdir -p docs/archive/ + +# Archivos de deployment a mantener: +# - DEPLOYMENT_DOCKER.md (NUEVO - Docker) +# - DEPLOYMENT_SERVER.md (PM2) +# - VERCEL_DEPLOYMENT.md +# - DEPLOYMENT_GITHUB.md +# - RESUMEN_DEPLOY_8607.md + +# Archivos de desarrollo a mantener: +# - ESTADO_FUNCIONALIDADES.md +# - SPA_ROUTING_CONFIG.md +# - CHECKLIST_PWA_COMPLETA.md +# - VERIFICACION_PWA.md + +# Mover el resto a archive +find . -maxdepth 1 -name "*.md" ! -name "README.md" ! -name "DEPLOYMENT_*.md" ! -name "RESUMEN_*.md" ! -name "ESTADO_*.md" ! -name "SPA_*.md" ! -name "CHECKLIST_*.md" ! -name "VERIFICACION_*.md" -exec mv {} docs/archive/ \; +``` + +### 4. 🐍 SCRIPTS PYTHON OBSOLETOS + +```bash +# Crear carpeta para scripts de mantenimiento +mkdir -p scripts/maintenance/ +mkdir -p scripts/archive/ + +# Scripts que SÍ deben mantenerse (útiles): +# - scripts/verificar-manual.ts (TypeScript) + +# Mover scripts obsoletos a archive +mv analisis_profundo_contenido.py scripts/archive/ 2>/dev/null || true +mv buscar_multimedia_exhaustivo.py scripts/archive/ 2>/dev/null || true +mv copiar_archivos_manual.py scripts/archive/ 2>/dev/null || true +mv generar_documento_word.py scripts/archive/ 2>/dev/null || true +mv generar_reportes_app.py scripts/archive/ 2>/dev/null || true +mv mejorar_reporte_1.py scripts/archive/ 2>/dev/null || true +mv reorganizar_proyecto.sh scripts/archive/ 2>/dev/null || true +``` + +### 5. ⚙️ CONFIGURACIONES DE DESPLIEGUE + +#### Con Docker (NUEVO - Mantener) + +```bash +# Configuraciones Docker a MANTENER: +# - Dockerfile ✅ +# - docker-compose.yml ✅ +# - deploy-docker.sh ✅ +# - .dockerignore ✅ +# - .github/workflows/deploy-docker.yml ✅ +``` + +#### Sin Docker (Opcional - Mover a backup) + +```bash +# Configuraciones a MOVER a backup (pero mantener en repo): +mkdir -p configs/backup/ + +# PM2 (alternativa a Docker) +# - ecosystem.config.js (mantener por si acaso) +# - deploy.sh (mantener por si acaso) + +# Otras plataformas (mover a backup) +mv vercel.json configs/backup/ 2>/dev/null || true +mv netlify.toml configs/backup/ 2>/dev/null || true +mv nginx.conf.example configs/backup/ 2>/dev/null || true +mv public/.htaccess configs/backup/ 2>/dev/null || true +mv public/_redirects configs/backup/ 2>/dev/null || true +``` + +### 6. 🗂️ OPTIMIZAR ESTRUCTURA DE ARCHIVOS + +```bash +# 1. Limpiar node_modules (se reinstalarán en Docker build) +rm -rf node_modules +rm -f package-lock.json + +# 2. Verificar archivos grandes +find . -type f -size +5M 2>/dev/null | head -10 + +# 3. Limpiar posibles builds anteriores +rm -rf dist/ +rm -rf build/ +rm -rf .next/ +rm -rf out/ + +# 4. Limpiar imágenes Docker antiguas (opcional) +docker system prune -a --volumes 2>/dev/null || true +``` + +--- + +## 📋 SCRIPT COMPLETO DE LIMPIEZA (Docker) + +```bash +#!/bin/bash +# cleanup_project_docker.sh + +set -e # Detenerse en errores + +echo "🚀 INICIANDO LIMPIEZA DEL PROYECTO (Docker)" +echo "===========================================" + +# 1. Backup del estado actual +BACKUP_DIR="../project_backup_$(date +%Y%m%d_%H%M%S)" +echo "📦 Creando backup en: $BACKUP_DIR" +mkdir -p "$BACKUP_DIR" +tar -czf "$BACKUP_DIR/project_backup.tar.gz" . --exclude='node_modules' --exclude='dist' --exclude='.git' + +# 2. Archivos del sistema +echo "🗑️ Limpiando archivos del sistema..." +find . -type f \( -name ".DS_Store" -o -name "Thumbs.db" -o -name "*.swp" -o -name "*.swo" \) -delete + +# 3. Logs +echo "📝 Eliminando logs..." +find . -type f -name "*.log" -delete + +# 4. Carpetas de backup grandes +if [ -d "_BACKUP_MD" ]; then + echo "📚 Manejando _BACKUP_MD..." + mkdir -p "$BACKUP_DIR/backup_md" + mv _BACKUP_MD/* "$BACKUP_DIR/backup_md/" 2>/dev/null || true + rmdir _BACKUP_MD 2>/dev/null || true +fi + +# 5. Manual duplicado +if [ -d "MANUAL_TES_DIGITAL" ]; then + echo "📖 Manejando manual duplicado..." + mv MANUAL_TES_DIGITAL "$BACKUP_DIR/" +fi + +# 6. Imágenes pendientes (solo mover duplicados) +if [ -d "imagenes-pendientes" ]; then + echo "🖼️ Procesando imágenes pendientes..." + mkdir -p "$BACKUP_DIR/imagenes_pendientes" + for img in imagenes-pendientes/*; do + if [ -f "$img" ]; then + base=$(basename "$img") + if [ -f "public/assets/infografias/$base" ]; then + mv "$img" "$BACKUP_DIR/imagenes_pendientes/" + fi + fi + done +fi + +# 7. Limpiar node_modules (Docker los instalará) +echo "📦 Limpiando dependencias locales..." +rm -rf node_modules +rm -f package-lock.json + +# 8. Limpiar builds anteriores +echo "🏗️ Limpiando builds anteriores..." +rm -rf dist/ build/ .next/ out/ + +# 9. Organizar documentación +echo "📄 Organizando documentación..." +mkdir -p docs/consolidated +mkdir -p docs/archive + +# Mover archivos .md a archive (excepto esenciales) +find . -maxdepth 1 -name "*.md" ! -name "README.md" ! -name "DEPLOYMENT_*.md" ! -name "RESUMEN_*.md" ! -name "ESTADO_*.md" ! -name "SPA_*.md" ! -name "CHECKLIST_*.md" ! -name "VERIFICACION_*.md" -exec mv {} docs/archive/ \; + +# 10. Scripts de mantenimiento +echo "🐍 Organizando scripts..." +mkdir -p scripts/archive +mv *.py scripts/archive/ 2>/dev/null || true +mv *.sh scripts/archive/ 2>/dev/null || true + +# Mantener scripts esenciales en su lugar +if [ -f "scripts/verificar-manual.ts" ]; then + mv scripts/archive/verificar-manual.ts scripts/ 2>/dev/null || true +fi + +# Mantener scripts de deploy +if [ -f "deploy-docker.sh" ]; then + mv scripts/archive/deploy-docker.sh . 2>/dev/null || true +fi + +# 11. Verificar Docker +echo "🐳 Verificando Docker..." +if command -v docker &> /dev/null; then + echo "✅ Docker instalado" + docker --version +else + echo "⚠️ Docker no instalado (opcional para desarrollo local)" +fi + +echo "✅ LIMPIEZA COMPLETADA" +echo "======================" +echo "Espacio liberado aproximado:" +du -sh . "$BACKUP_DIR" +echo "" +echo "🎯 Proyecto listo para desarrollo con Docker" +echo "" +echo "📝 Próximos pasos:" +echo " 1. docker-compose up -d --build (construir y ejecutar)" +echo " 2. docker-compose logs -f (ver logs)" +echo " 3. ./deploy-docker.sh (deploy completo)" +``` + +--- + +## 🔍 VERIFICACIÓN POST-LIMPIEZA (Docker) + +```bash +# 1. Verificar que Docker funciona +docker --version +docker compose version + +# 2. Construir imagen Docker +docker-compose build + +# 3. Verificar que la imagen se construyó +docker images | grep emerges-tes + +# 4. Ejecutar contenedor +docker-compose up -d + +# 5. Verificar que la app funciona +curl http://localhost:8607 + +# 6. Ver logs +docker-compose logs -f + +# 7. Verificar tamaño del proyecto +du -sh . # Debería ser < 100MB (sin node_modules) + +# 7. Verificar estructura final +tree -L 2 -I 'node_modules|dist|build|.git' +``` + +--- + +## 🏗️ ESTRUCTURA FINAL OPTIMIZADA (Docker) + +``` +protocolo-r-pido/ +├── public/ # Archivos públicos (78 archivos) +│ ├── assets/ # Imágenes optimizadas +│ ├── manual/ # Manual médico (78 .md) +│ ├── manifest.json +│ ├── sw.js +│ └── favicon.svg +├── src/ # Código fuente (~136 archivos) +│ ├── components/ # Componentes React +│ ├── data/ # Datos TypeScript +│ ├── hooks/ # Custom hooks +│ ├── pages/ # Páginas +│ └── utils/ # Utilidades +├── docs/ # Documentación consolidada +│ ├── consolidated/ # Docs esenciales +│ └── archive/ # Docs antiguas +├── scripts/ # Scripts esenciales +│ └── verificar-manual.ts +├── .github/ # CI/CD +│ └── workflows/ +│ ├── deploy.yml # PM2 (alternativa) +│ └── deploy-docker.yml # Docker (principal) +├── Dockerfile # 🐳 Docker build +├── docker-compose.yml # 🐳 Docker compose +├── deploy-docker.sh # 🐳 Script deploy Docker +├── .dockerignore # 🐳 Docker ignore +├── package.json +├── vite.config.ts +├── tailwind.config.ts +├── tsconfig.*.json +└── README.md +``` + +--- + +## 📊 ESTIMACIÓN DE ESPACIO LIBERADO + +| Antes | Después | Liberado | +|-------|---------|----------| +| ~500 MB | ~150 MB | ~350 MB | +| 400+ archivos | ~250 archivos | ~150 archivos | + +**Con Docker:** +- ✅ No necesita `node_modules` en servidor +- ✅ Build se hace en contenedor +- ✅ Imagen Docker optimizada (~200MB) + +--- + +## ⚠️ PRECAUCIONES + +- ✅ **Backup primero:** El script crea backup automático +- ✅ **Probar Docker:** Verificar que `docker-compose build` funcione +- ✅ **Verificar PWA:** Service Worker y manifest deben funcionar +- ✅ **Manual médico:** No eliminar archivos de `public/manual/` +- ✅ **Imágenes esenciales:** No eliminar de `public/assets/` +- ✅ **Dockerfile:** No eliminar archivos Docker + +--- + +## 🔄 PROCESO RECOMENDADO (Docker) + +```bash +# 1. Backup manual extra (por si acaso) +cp -r /home/planetazuzu/protocolo-r-pido /home/planetazuzu/protocolo-backup + +# 2. Ejecutar limpieza +cd /home/planetazuzu/protocolo-r-pido +bash cleanup_project_docker.sh + +# 3. Verificar Docker +docker-compose build +docker-compose up -d + +# 4. Verificar que funciona +curl http://localhost:8607 + +# 5. Si todo está bien, eliminar backups viejos +# (Mantener solo el más reciente) +``` + +--- + +## 🐳 VENTAJAS DE DOCKER EN LIMPIEZA + +1. **No necesita node_modules local:** Docker los instala en build +2. **Build aislado:** No contamina el sistema +3. **Fácil rollback:** Volver a imagen anterior +4. **Reproducible:** Mismo resultado en cualquier servidor +5. **Limpieza automática:** `.dockerignore` excluye archivos innecesarios + +--- + +## 📝 CHECKLIST DE LIMPIEZA CON DOCKER + +- [ ] Backup creado +- [ ] Archivos del sistema eliminados +- [ ] Carpetas de backup movidas +- [ ] Documentación consolidada +- [ ] Scripts obsoletos archivados +- [ ] Configuraciones organizadas +- [ ] `node_modules` eliminado (Docker lo instalará) +- [ ] Builds anteriores eliminados +- [ ] Dockerfile verificado +- [ ] `docker-compose build` funciona +- [ ] `docker-compose up -d` funciona +- [ ] App accesible en `http://localhost:8607` +- [ ] Logs accesibles: `docker-compose logs -f` + +--- + +**Última actualización:** 2024-12-19 +**Despliegue:** Docker (puerto 8607)