codigo0/PLAN_LIMPIEZA_DOCKER.md

14 KiB

📁 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)

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

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

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

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

# 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

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

# Configuraciones Docker a MANTENER:
# - Dockerfile ✅
# - docker-compose.yml ✅
# - deploy-docker.sh ✅
# - .dockerignore ✅
# - .github/workflows/deploy-docker.yml ✅

Sin Docker (Opcional - Mover a backup)

# 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

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

#!/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)

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

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