diff --git a/.dockerignore b/.dockerignore index 1c384f94..075e6140 100644 --- a/.dockerignore +++ b/.dockerignore @@ -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 diff --git a/.github/workflows/deploy-docker.yml b/.github/workflows/deploy-docker.yml deleted file mode 100644 index 80ccc4cc..00000000 --- a/.github/workflows/deploy-docker.yml +++ /dev/null @@ -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 diff --git a/.gitignore b/.gitignore index d7eafa10..4d9e7ce6 100644 --- a/.gitignore +++ b/.gitignore @@ -44,7 +44,3 @@ __pycache__/ *.bak *.backup backup_manual_pre_limpieza/ - -# Docker -.docker/ -docker-compose.override.yml diff --git a/DEPLOYMENT_DOCKER.md b/DEPLOYMENT_DOCKER.md deleted file mode 100644 index 2fa2f8d9..00000000 --- a/DEPLOYMENT_DOCKER.md +++ /dev/null @@ -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 diff --git a/Dockerfile b/Dockerfile index 4f534f5f..01a0b690 100644 --- a/Dockerfile +++ b/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"] + diff --git a/PLAN_LIMPIEZA_DOCKER.md b/PLAN_LIMPIEZA_DOCKER.md deleted file mode 100644 index e89a2cec..00000000 --- a/PLAN_LIMPIEZA_DOCKER.md +++ /dev/null @@ -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) diff --git a/cleanup_project.sh b/cleanup_project.sh new file mode 100644 index 00000000..1e6a1f5e --- /dev/null +++ b/cleanup_project.sh @@ -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}" diff --git a/deploy-docker.sh b/deploy-docker.sh index d4c92255..a6d921f2 100755 --- a/deploy-docker.sh +++ b/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 "" + diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 8a082bb8..63103760 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -43,3 +43,4 @@ services: networks: emerges-network: driver: bridge + diff --git a/docker-compose.yml b/docker-compose.yml index f71fff4f..fd2ae93c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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 + diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index 3c01d697..00000000 Binary files a/public/favicon.ico and /dev/null differ