docs: añadir plan de limpieza optimizado para Docker
This commit is contained in:
parent
6211f51f36
commit
aea4ec250d
49
.github/workflows/deploy-docker.yml
vendored
Normal file
49
.github/workflows/deploy-docker.yml
vendored
Normal file
|
|
@ -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
|
||||
4
.gitignore
vendored
4
.gitignore
vendored
|
|
@ -44,3 +44,7 @@ __pycache__/
|
|||
*.bak
|
||||
*.backup
|
||||
backup_manual_pre_limpieza/
|
||||
|
||||
# Docker
|
||||
.docker/
|
||||
docker-compose.override.yml
|
||||
|
|
|
|||
382
DEPLOYMENT_DOCKER.md
Normal file
382
DEPLOYMENT_DOCKER.md
Normal file
|
|
@ -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
|
||||
469
PLAN_LIMPIEZA_DOCKER.md
Normal file
469
PLAN_LIMPIEZA_DOCKER.md
Normal file
|
|
@ -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)
|
||||
Loading…
Reference in a new issue