feat: añadir script de limpieza del proyecto
- Script cleanup_project.sh para limpieza automática - Organiza backups, documentación, scripts y configuraciones - Mantiene integridad de Docker, PM2 y GitHub Actions - Crea backups antes de mover archivos
This commit is contained in:
parent
aea4ec250d
commit
0d99807b24
|
|
@ -1,27 +1,21 @@
|
|||
# Dependencias
|
||||
# Dependencies
|
||||
node_modules
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
package-lock.json
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# Build outputs
|
||||
# Build output
|
||||
dist
|
||||
dist-ssr
|
||||
build
|
||||
.next
|
||||
out
|
||||
|
||||
# Desarrollo
|
||||
# Environment files
|
||||
.env
|
||||
.env.local
|
||||
.env.production
|
||||
.env.development
|
||||
.env.test
|
||||
|
||||
# Testing
|
||||
coverage
|
||||
.nyc_output
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
.env*.local
|
||||
|
||||
# IDE
|
||||
.vscode
|
||||
|
|
@ -33,37 +27,46 @@ logs
|
|||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
.localized
|
||||
|
||||
# Git
|
||||
.git
|
||||
.gitignore
|
||||
|
||||
# Backups y temporales
|
||||
# Documentation (opcional - descomentar si no quieres incluirlos)
|
||||
# *.md
|
||||
# !README.md
|
||||
|
||||
# Backups
|
||||
_BACKUP_MD
|
||||
backup_*
|
||||
deleted_*
|
||||
imagenes-pendientes
|
||||
MANUAL_TES_DIGITAL
|
||||
|
||||
# Documentación temporal
|
||||
docs/backup
|
||||
docs/archive
|
||||
*.md.bak
|
||||
# Temporary files
|
||||
*.bak
|
||||
*.backup
|
||||
*.tmp
|
||||
*.log
|
||||
|
||||
# Scripts de desarrollo
|
||||
# Scripts de desarrollo (no necesarios en producción)
|
||||
scripts/*.py
|
||||
*.py
|
||||
*.sh
|
||||
!deploy-docker.sh
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Configuraciones no necesarias en Docker
|
||||
ecosystem.config.js
|
||||
webhook-deploy.sh
|
||||
.github
|
||||
vercel.json
|
||||
netlify.toml
|
||||
nginx.conf.example
|
||||
# Imágenes pendientes (no necesarias en producción)
|
||||
imagenes-pendientes/
|
||||
|
||||
# Archivos de configuración de desarrollo
|
||||
.eslintrc*
|
||||
.prettierrc*
|
||||
.editorconfig
|
||||
|
||||
# Testing
|
||||
coverage
|
||||
.nyc_output
|
||||
|
||||
# Misc
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
|
||||
# Documentación (opcional, comentar si quieres incluirla)
|
||||
# docs/
|
||||
# *.md
|
||||
|
|
|
|||
49
.github/workflows/deploy-docker.yml
vendored
49
.github/workflows/deploy-docker.yml
vendored
|
|
@ -1,49 +0,0 @@
|
|||
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,7 +44,3 @@ __pycache__/
|
|||
*.bak
|
||||
*.backup
|
||||
backup_manual_pre_limpieza/
|
||||
|
||||
# Docker
|
||||
.docker/
|
||||
docker-compose.override.yml
|
||||
|
|
|
|||
|
|
@ -1,382 +0,0 @@
|
|||
# 🐳 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
|
||||
18
Dockerfile
18
Dockerfile
|
|
@ -1,6 +1,4 @@
|
|||
# Dockerfile para EMERGES TES
|
||||
# Multi-stage build para optimizar tamaño de imagen
|
||||
|
||||
# Multi-stage build para EMERGES TES
|
||||
# Stage 1: Build
|
||||
FROM node:18-alpine AS builder
|
||||
|
||||
|
|
@ -20,6 +18,7 @@ RUN npm run build
|
|||
|
||||
# Verificar que el build se completó
|
||||
RUN test -d dist || (echo "Error: dist directory not found" && exit 1)
|
||||
RUN test "$(ls -A dist)" || (echo "Error: dist directory is empty" && exit 1)
|
||||
|
||||
# Stage 2: Production
|
||||
FROM node:18-alpine AS production
|
||||
|
|
@ -27,18 +26,25 @@ FROM node:18-alpine AS production
|
|||
WORKDIR /app
|
||||
|
||||
# Instalar serve globalmente para servir archivos estáticos
|
||||
RUN npm install -g serve
|
||||
RUN npm install -g serve@14.2.1
|
||||
|
||||
# Copiar archivos build desde builder
|
||||
# Copiar archivos construidos desde builder
|
||||
COPY --from=builder /app/dist ./dist
|
||||
COPY --from=builder /app/public ./public
|
||||
|
||||
# Copiar package.json para mantener metadata (opcional)
|
||||
COPY --from=builder /app/package.json ./package.json
|
||||
|
||||
# Exponer puerto 8607
|
||||
EXPOSE 8607
|
||||
|
||||
# Variables de entorno
|
||||
ENV NODE_ENV=production
|
||||
ENV PORT=8607
|
||||
|
||||
# Health check
|
||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||
CMD node -e "require('http').get('http://localhost:8607', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
|
||||
|
||||
# Comando para servir la aplicación
|
||||
CMD ["serve", "-s", "dist", "-l", "8607"]
|
||||
|
||||
|
|
|
|||
|
|
@ -1,469 +0,0 @@
|
|||
# 📁 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)
|
||||
239
cleanup_project.sh
Normal file
239
cleanup_project.sh
Normal file
|
|
@ -0,0 +1,239 @@
|
|||
#!/bin/bash
|
||||
# cleanup_project.sh
|
||||
# Script de limpieza y optimización del proyecto EMERGES TES
|
||||
# Fecha: 2024-12-19
|
||||
|
||||
set -e # Detenerse en errores
|
||||
|
||||
# Colores para output
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${BLUE}════════════════════════════════════════════════${NC}"
|
||||
echo -e "${BLUE}🚀 LIMPIEZA Y OPTIMIZACIÓN DEL PROYECTO${NC}"
|
||||
echo -e "${BLUE}════════════════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
|
||||
# 1. Backup del estado actual
|
||||
BACKUP_DIR="../project_backup_$(date +%Y%m%d_%H%M%S)"
|
||||
echo -e "${YELLOW}📦 [1/10] Creando backup en: $BACKUP_DIR${NC}"
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
# Backup solo de archivos importantes (excluyendo node_modules, dist, etc.)
|
||||
tar --exclude='node_modules' \
|
||||
--exclude='dist' \
|
||||
--exclude='build' \
|
||||
--exclude='.next' \
|
||||
--exclude='out' \
|
||||
--exclude='.git' \
|
||||
-czf "$BACKUP_DIR/project_backup.tar.gz" . 2>/dev/null || {
|
||||
echo -e "${RED}⚠️ No se pudo crear backup completo, continuando...${NC}"
|
||||
}
|
||||
echo -e "${GREEN}✅ Backup creado${NC}"
|
||||
echo ""
|
||||
|
||||
# 2. Archivos del sistema
|
||||
echo -e "${YELLOW}🗑️ [2/10] Limpiando archivos del sistema...${NC}"
|
||||
find . -type f \( -name ".DS_Store" -o -name "Thumbs.db" -o -name ".localized" -o -name "*.swp" -o -name "*.swo" \) -delete 2>/dev/null || true
|
||||
echo -e "${GREEN}✅ Archivos del sistema eliminados${NC}"
|
||||
echo ""
|
||||
|
||||
# 3. Logs
|
||||
echo -e "${YELLOW}📝 [3/10] Eliminando logs...${NC}"
|
||||
find . -type f \( -name "*.log" -o -name "npm-debug.log*" -o -name "yarn-debug.log*" -o -name "yarn-error.log*" \) -delete 2>/dev/null || true
|
||||
echo -e "${GREEN}✅ Logs eliminados${NC}"
|
||||
echo ""
|
||||
|
||||
# 4. Carpetas de backup grandes
|
||||
if [ -d "_BACKUP_MD" ]; then
|
||||
echo -e "${YELLOW}📚 [4/10] Manejando _BACKUP_MD/ (203 archivos)...${NC}"
|
||||
mkdir -p "$BACKUP_DIR/backup_md"
|
||||
mv _BACKUP_MD/* "$BACKUP_DIR/backup_md/" 2>/dev/null || true
|
||||
rmdir _BACKUP_MD 2>/dev/null || true
|
||||
echo -e "${GREEN}✅ _BACKUP_MD/ movido a backup${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⏭️ [4/10] _BACKUP_MD/ no existe, saltando...${NC}"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 5. Manual duplicado
|
||||
if [ -d "MANUAL_TES_DIGITAL" ]; then
|
||||
echo -e "${YELLOW}📖 [5/10] Manejando MANUAL_TES_DIGITAL/ (110 archivos)...${NC}"
|
||||
mv MANUAL_TES_DIGITAL "$BACKUP_DIR/" 2>/dev/null || true
|
||||
echo -e "${GREEN}✅ MANUAL_TES_DIGITAL/ movido a backup${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⏭️ [5/10] MANUAL_TES_DIGITAL/ no existe, saltando...${NC}"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 6. Imágenes pendientes (solo mover duplicados)
|
||||
if [ -d "imagenes-pendientes" ]; then
|
||||
echo -e "${YELLOW}🖼️ [6/10] Procesando imágenes pendientes...${NC}"
|
||||
mkdir -p "$BACKUP_DIR/imagenes_pendientes"
|
||||
COUNT=0
|
||||
for img in imagenes-pendientes/*; do
|
||||
if [ -f "$img" ]; then
|
||||
base=$(basename "$img")
|
||||
# Buscar en todas las subcarpetas de infografias
|
||||
if find public/assets/infografias -name "$base" -type f | grep -q .; then
|
||||
echo " Duplicado encontrado: $base"
|
||||
mv "$img" "$BACKUP_DIR/imagenes_pendientes/" 2>/dev/null || true
|
||||
COUNT=$((COUNT + 1))
|
||||
fi
|
||||
fi
|
||||
done
|
||||
echo -e "${GREEN}✅ $COUNT imágenes duplicadas movidas a backup${NC}"
|
||||
echo -e "${YELLOW} (Carpeta imagenes-pendientes/ mantenida con archivos únicos)${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⏭️ [6/10] imagenes-pendientes/ no existe, saltando...${NC}"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 7. Limpiar builds anteriores
|
||||
echo -e "${YELLOW}🏗️ [7/10] Limpiando builds anteriores...${NC}"
|
||||
rm -rf dist/ build/ .next/ out/ 2>/dev/null || true
|
||||
echo -e "${GREEN}✅ Builds anteriores eliminados${NC}"
|
||||
echo ""
|
||||
|
||||
# 8. Organizar documentación
|
||||
echo -e "${YELLOW}📄 [8/10] Organizando documentación...${NC}"
|
||||
mkdir -p docs/consolidated
|
||||
mkdir -p docs/archive
|
||||
|
||||
# Archivos esenciales a mantener en raíz o docs/consolidated
|
||||
ESSENTIAL_DOCS=(
|
||||
"README.md"
|
||||
"DEPLOYMENT_SERVER.md"
|
||||
"VERCEL_DEPLOYMENT.md"
|
||||
"DEPLOYMENT_GITHUB.md"
|
||||
"RESUMEN_DEPLOY_8607.md"
|
||||
"VERIFICACION_PWA.md"
|
||||
"ESTADO_FUNCIONALIDADES.md"
|
||||
"SPA_ROUTING_CONFIG.md"
|
||||
"CHECKLIST_PWA_COMPLETA.md"
|
||||
"ANALISIS_TECNOLOGICO_PROYECTO.md"
|
||||
"PLAN_ESTRUCTURA_PSIQUIATRIA.md"
|
||||
"FASE_1_FALTANTE_DETALLADO.md"
|
||||
"SISTEMA_MEDIOS_VISUALES.md"
|
||||
)
|
||||
|
||||
# Mover todos los .md a archive primero
|
||||
find . -maxdepth 1 -name "*.md" -type f | while read -r file; do
|
||||
basename_file=$(basename "$file")
|
||||
is_essential=false
|
||||
for essential in "${ESSENTIAL_DOCS[@]}"; do
|
||||
if [ "$basename_file" == "$essential" ]; then
|
||||
is_essential=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ "$is_essential" = false ]; then
|
||||
mv "$file" docs/archive/ 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
# Mover archivos esenciales a consolidated (excepto README.md)
|
||||
for doc in "${ESSENTIAL_DOCS[@]}"; do
|
||||
if [ -f "$doc" ] && [ "$doc" != "README.md" ]; then
|
||||
mv "$doc" docs/consolidated/ 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
echo -e "${GREEN}✅ Documentación organizada${NC}"
|
||||
echo -e "${BLUE} - Esenciales en: docs/consolidated/${NC}"
|
||||
echo -e "${BLUE} - Archivados en: docs/archive/${NC}"
|
||||
echo ""
|
||||
|
||||
# 9. Scripts de mantenimiento
|
||||
echo -e "${YELLOW}🐍 [9/10] Organizando scripts...${NC}"
|
||||
mkdir -p scripts/archive
|
||||
|
||||
# Scripts esenciales a mantener
|
||||
ESSENTIAL_SCRIPTS=(
|
||||
"deploy.sh"
|
||||
"deploy-docker.sh"
|
||||
"webhook-deploy.sh"
|
||||
"scripts/verificar-manual.ts"
|
||||
)
|
||||
|
||||
# Mover scripts Python y shell de la raíz a archive
|
||||
for script in *.py *.sh 2>/dev/null; do
|
||||
if [ -f "$script" ]; then
|
||||
basename_script=$(basename "$script")
|
||||
is_essential=false
|
||||
for essential in "${ESSENTIAL_SCRIPTS[@]}"; do
|
||||
if [ "$basename_script" == "$(basename "$essential")" ]; then
|
||||
is_essential=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ "$is_essential" = false ]; then
|
||||
mv "$script" scripts/archive/ 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
echo -e "${GREEN}✅ Scripts organizados${NC}"
|
||||
echo -e "${BLUE} - Esenciales mantenidos en raíz${NC}"
|
||||
echo -e "${BLUE} - Otros movidos a: scripts/archive/${NC}"
|
||||
echo ""
|
||||
|
||||
# 10. Configuraciones de despliegue redundantes
|
||||
echo -e "${YELLOW}⚙️ [10/10] Organizando configuraciones...${NC}"
|
||||
mkdir -p configs/backup
|
||||
|
||||
# Configuraciones a mantener (Docker, PM2, GitHub Actions)
|
||||
# Configuraciones a mover a backup (pero mantener en repo)
|
||||
CONFIGS_TO_BACKUP=(
|
||||
"vercel.json"
|
||||
"netlify.toml"
|
||||
"nginx.conf.example"
|
||||
)
|
||||
|
||||
for config in "${CONFIGS_TO_BACKUP[@]}"; do
|
||||
if [ -f "$config" ]; then
|
||||
# Crear carpeta si no existe
|
||||
mkdir -p configs/backup
|
||||
# Mover pero mantener referencia en .gitignore si es necesario
|
||||
mv "$config" configs/backup/ 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
# Mover .htaccess y _redirects si existen
|
||||
if [ -f "public/.htaccess" ]; then
|
||||
mkdir -p configs/backup
|
||||
mv public/.htaccess configs/backup/ 2>/dev/null || true
|
||||
fi
|
||||
if [ -f "public/_redirects" ]; then
|
||||
mkdir -p configs/backup
|
||||
mv public/_redirects configs/backup/ 2>/dev/null || true
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}✅ Configuraciones organizadas${NC}"
|
||||
echo -e "${BLUE} - Docker, PM2, GitHub Actions mantenidos${NC}"
|
||||
echo -e "${BLUE} - Otras configuraciones en: configs/backup/${NC}"
|
||||
echo ""
|
||||
|
||||
# Resumen final
|
||||
echo -e "${GREEN}════════════════════════════════════════════════${NC}"
|
||||
echo -e "${GREEN}✅ LIMPIEZA COMPLETADA${NC}"
|
||||
echo -e "${GREEN}════════════════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE}📊 Resumen:${NC}"
|
||||
echo -e " Backup creado en: ${YELLOW}$BACKUP_DIR${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE}📁 Estructura optimizada:${NC}"
|
||||
echo -e " ✅ Documentación esencial: ${GREEN}docs/consolidated/${NC}"
|
||||
echo -e " ✅ Documentación archivada: ${YELLOW}docs/archive/${NC}"
|
||||
echo -e " ✅ Scripts esenciales: ${GREEN}raíz del proyecto${NC}"
|
||||
echo -e " ✅ Scripts archivados: ${YELLOW}scripts/archive/${NC}"
|
||||
echo -e " ✅ Configuraciones: ${GREEN}Docker, PM2, GitHub Actions${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}⚠️ IMPORTANTE:${NC}"
|
||||
echo -e " 1. Verificar que el proyecto funciona: ${BLUE}npm run build${NC}"
|
||||
echo -e " 2. Verificar Docker: ${BLUE}docker-compose up --build${NC}"
|
||||
echo -e " 3. Si todo está bien, puedes eliminar backups antiguos"
|
||||
echo ""
|
||||
echo -e "${GREEN}🎯 Proyecto listo para desarrollo${NC}"
|
||||
143
deploy-docker.sh
143
deploy-docker.sh
|
|
@ -1,9 +1,8 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Script de deploy con Docker para EMERGES TES
|
||||
# Uso: ./deploy-docker.sh [--skip-git] [--rebuild]
|
||||
# Requisitos: docker, docker-compose
|
||||
# Puerto: 8607
|
||||
# Uso: ./deploy-docker.sh [--rebuild] [--stop] [--logs]
|
||||
# Requisitos: Docker, Docker Compose
|
||||
|
||||
set -e # Salir si hay error
|
||||
|
||||
|
|
@ -15,55 +14,83 @@ BLUE='\033[0;34m'
|
|||
NC='\033[0m' # No Color
|
||||
|
||||
# Configuración
|
||||
PORT=8607
|
||||
CONTAINER_NAME="emerges-tes"
|
||||
IMAGE_NAME="emerges-tes"
|
||||
PORT=8607
|
||||
COMPOSE_FILE="docker-compose.yml"
|
||||
|
||||
echo -e "${BLUE}════════════════════════════════════════${NC}"
|
||||
echo -e "${BLUE}🐳 Deploy Docker de EMERGES TES (Puerto $PORT)${NC}"
|
||||
echo -e "${BLUE}🐳 Deploy Docker de EMERGES TES${NC}"
|
||||
echo -e "${BLUE}════════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
|
||||
# Verificar Docker
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo -e "${RED}❌ Error: Docker no está instalado${NC}"
|
||||
echo -e "${YELLOW} Instala Docker: https://docs.docker.com/get-docker/${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
|
||||
echo -e "${RED}❌ Error: docker-compose no está instalado${NC}"
|
||||
echo -e "${RED}❌ Error: Docker Compose no está instalado${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Detectar comando docker-compose
|
||||
if docker compose version &> /dev/null; then
|
||||
DOCKER_COMPOSE="docker compose"
|
||||
# Detectar comando de compose (docker-compose o docker compose)
|
||||
if command -v docker-compose &> /dev/null; then
|
||||
COMPOSE_CMD="docker-compose"
|
||||
else
|
||||
DOCKER_COMPOSE="docker-compose"
|
||||
COMPOSE_CMD="docker compose"
|
||||
fi
|
||||
|
||||
# Verificar si se debe saltar git pull
|
||||
SKIP_GIT=false
|
||||
echo -e "${GREEN}✅ Docker detectado: $(docker --version)${NC}"
|
||||
echo -e "${GREEN}✅ Docker Compose detectado${NC}"
|
||||
echo ""
|
||||
|
||||
# Procesar argumentos
|
||||
REBUILD=false
|
||||
STOP=false
|
||||
LOGS=false
|
||||
SKIP_GIT=false
|
||||
|
||||
for arg in "$@"; do
|
||||
case $arg in
|
||||
--skip-git)
|
||||
SKIP_GIT=true
|
||||
shift
|
||||
;;
|
||||
--rebuild)
|
||||
REBUILD=true
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
--stop)
|
||||
STOP=true
|
||||
shift
|
||||
;;
|
||||
--logs)
|
||||
LOGS=true
|
||||
shift
|
||||
;;
|
||||
--skip-git)
|
||||
SKIP_GIT=true
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
# Argumento desconocido
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Si se solicita detener
|
||||
if [ "$STOP" = true ]; then
|
||||
echo -e "${YELLOW}🛑 Deteniendo contenedor...${NC}"
|
||||
$COMPOSE_CMD down
|
||||
echo -e "${GREEN}✅ Contenedor detenido${NC}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Si se solicitan logs
|
||||
if [ "$LOGS" = true ]; then
|
||||
echo -e "${YELLOW}📋 Mostrando logs...${NC}"
|
||||
$COMPOSE_CMD logs -f
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 1. Actualizar código desde git (si no se salta)
|
||||
if [ "$SKIP_GIT" = false ]; then
|
||||
echo -e "${YELLOW}📥 [1/4] Actualizando código desde git...${NC}"
|
||||
|
|
@ -76,57 +103,59 @@ else
|
|||
echo -e "${YELLOW}⏭️ [1/4] Saltando actualización de git (--skip-git)${NC}"
|
||||
fi
|
||||
|
||||
# 2. Detener contenedor existente (si existe)
|
||||
echo -e "${YELLOW}🛑 [2/4] Deteniendo contenedor existente...${NC}"
|
||||
$DOCKER_COMPOSE down 2>/dev/null || true
|
||||
docker stop "$CONTAINER_NAME" 2>/dev/null || true
|
||||
docker rm "$CONTAINER_NAME" 2>/dev/null || true
|
||||
echo -e "${GREEN}✅ Contenedor detenido${NC}"
|
||||
# 2. Verificar que Dockerfile existe
|
||||
echo -e "${YELLOW}🔍 [2/4] Verificando Dockerfile...${NC}"
|
||||
if [ ! -f "Dockerfile" ]; then
|
||||
echo -e "${RED}❌ Error: Dockerfile no encontrado${NC}"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -f "$COMPOSE_FILE" ]; then
|
||||
echo -e "${RED}❌ Error: $COMPOSE_FILE no encontrado${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}✅ Archivos Docker encontrados${NC}"
|
||||
|
||||
# 3. Construir imagen Docker
|
||||
echo -e "${YELLOW}🔨 [3/4] Construyendo imagen Docker...${NC}"
|
||||
# 3. Construir imagen (si es necesario)
|
||||
if [ "$REBUILD" = true ]; then
|
||||
echo -e "${YELLOW} Forzando rebuild completo (--rebuild)${NC}"
|
||||
$DOCKER_COMPOSE build --no-cache
|
||||
echo -e "${YELLOW}🔨 [3/4] Reconstruyendo imagen Docker...${NC}"
|
||||
$COMPOSE_CMD build --no-cache
|
||||
echo -e "${GREEN}✅ Imagen reconstruida${NC}"
|
||||
else
|
||||
$DOCKER_COMPOSE build
|
||||
echo -e "${YELLOW}🔨 [3/4] Construyendo/actualizando imagen Docker...${NC}"
|
||||
$COMPOSE_CMD build
|
||||
echo -e "${GREEN}✅ Imagen lista${NC}"
|
||||
fi
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ Imagen construida exitosamente${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Error al construir imagen${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 4. Iniciar contenedor
|
||||
# 4. Iniciar/Reiniciar contenedor
|
||||
echo -e "${YELLOW}🚀 [4/4] Iniciando contenedor...${NC}"
|
||||
$DOCKER_COMPOSE up -d
|
||||
$COMPOSE_CMD up -d
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ Contenedor iniciado${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Error al iniciar contenedor${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Esperar un momento para que el contenedor inicie
|
||||
# Esperar a que el contenedor esté listo
|
||||
echo -e "${YELLOW}⏳ Esperando a que el contenedor esté listo...${NC}"
|
||||
sleep 3
|
||||
|
||||
# Verificar estado
|
||||
echo ""
|
||||
echo -e "${GREEN}✅ Deploy completado exitosamente${NC}"
|
||||
echo -e "${BLUE}📊 Estado del contenedor:${NC}"
|
||||
docker ps | grep "$CONTAINER_NAME" || docker ps -a | grep "$CONTAINER_NAME"
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}🌐 Aplicación disponible en: http://localhost:$PORT${NC}"
|
||||
echo -e "${GREEN}📝 Logs: docker logs $CONTAINER_NAME${NC}"
|
||||
echo -e "${GREEN}📊 Logs en tiempo real: docker logs -f $CONTAINER_NAME${NC}"
|
||||
echo -e "${GREEN}🛑 Detener: docker-compose down${NC}"
|
||||
echo -e "${GREEN}🔄 Reiniciar: docker-compose restart${NC}"
|
||||
if docker ps | grep -q "$CONTAINER_NAME"; then
|
||||
echo -e "${GREEN}✅ Contenedor iniciado correctamente${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Error: El contenedor no está corriendo${NC}"
|
||||
echo -e "${YELLOW}📋 Últimos logs:${NC}"
|
||||
$COMPOSE_CMD logs --tail=50
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Mostrar información
|
||||
echo ""
|
||||
echo -e "${GREEN}════════════════════════════════════════${NC}"
|
||||
echo -e "${GREEN}🎉 Deploy Docker completado!${NC}"
|
||||
echo -e "${GREEN}════════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE}📊 Estado del contenedor:${NC}"
|
||||
docker ps | grep "$CONTAINER_NAME" || true
|
||||
echo ""
|
||||
echo -e "${GREEN}🌐 Aplicación disponible en: http://localhost:$PORT${NC}"
|
||||
echo -e "${GREEN}📝 Logs: $COMPOSE_CMD logs -f${NC}"
|
||||
echo -e "${GREEN}📊 Estado: docker ps | grep $CONTAINER_NAME${NC}"
|
||||
echo -e "${GREEN}🛑 Detener: $COMPOSE_CMD down${NC}"
|
||||
echo ""
|
||||
|
||||
|
|
|
|||
|
|
@ -43,3 +43,4 @@ services:
|
|||
networks:
|
||||
emerges-network:
|
||||
driver: bridge
|
||||
|
||||
|
|
|
|||
|
|
@ -5,14 +5,13 @@ services:
|
|||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
target: production
|
||||
container_name: emerges-tes
|
||||
ports:
|
||||
- "8607:8607"
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- PORT=8607
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "node", "-e", "require('http').get('http://localhost:8607', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"]
|
||||
interval: 30s
|
||||
|
|
@ -20,11 +19,12 @@ services:
|
|||
retries: 3
|
||||
start_period: 5s
|
||||
labels:
|
||||
- "com.emerges-tes.description=EMERGES TES - Protocolo Rápido"
|
||||
- "com.emerges-tes.version=1.0"
|
||||
- "com.emerges.app=emerges-tes"
|
||||
- "com.emerges.version=1.0"
|
||||
networks:
|
||||
- emerges-network
|
||||
|
||||
networks:
|
||||
emerges-network:
|
||||
driver: bridge
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 20 KiB |
Loading…
Reference in a new issue