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
|
node_modules
|
||||||
npm-debug.log
|
npm-debug.log*
|
||||||
yarn-error.log
|
yarn-debug.log*
|
||||||
package-lock.json
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
|
||||||
# Build outputs
|
# Build output
|
||||||
dist
|
dist
|
||||||
|
dist-ssr
|
||||||
build
|
build
|
||||||
.next
|
|
||||||
out
|
|
||||||
|
|
||||||
# Desarrollo
|
# Environment files
|
||||||
|
.env
|
||||||
.env.local
|
.env.local
|
||||||
|
.env.production
|
||||||
.env.development
|
.env.development
|
||||||
.env.test
|
.env*.local
|
||||||
|
|
||||||
# Testing
|
|
||||||
coverage
|
|
||||||
.nyc_output
|
|
||||||
|
|
||||||
# Logs
|
|
||||||
logs
|
|
||||||
*.log
|
|
||||||
|
|
||||||
# IDE
|
# IDE
|
||||||
.vscode
|
.vscode
|
||||||
|
|
@ -33,37 +27,46 @@ logs
|
||||||
# OS
|
# OS
|
||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
.localized
|
|
||||||
|
|
||||||
# Git
|
# Git
|
||||||
.git
|
.git
|
||||||
.gitignore
|
.gitignore
|
||||||
|
|
||||||
# Backups y temporales
|
# Documentation (opcional - descomentar si no quieres incluirlos)
|
||||||
|
# *.md
|
||||||
|
# !README.md
|
||||||
|
|
||||||
|
# Backups
|
||||||
_BACKUP_MD
|
_BACKUP_MD
|
||||||
backup_*
|
backup_*
|
||||||
deleted_*
|
|
||||||
imagenes-pendientes
|
|
||||||
MANUAL_TES_DIGITAL
|
|
||||||
|
|
||||||
# Documentación temporal
|
# Temporary files
|
||||||
docs/backup
|
*.bak
|
||||||
docs/archive
|
*.backup
|
||||||
*.md.bak
|
*.tmp
|
||||||
|
*.log
|
||||||
|
|
||||||
# Scripts de desarrollo
|
# Scripts de desarrollo (no necesarios en producción)
|
||||||
|
scripts/*.py
|
||||||
*.py
|
*.py
|
||||||
*.sh
|
__pycache__/
|
||||||
!deploy-docker.sh
|
*.pyc
|
||||||
|
|
||||||
# Configuraciones no necesarias en Docker
|
# Imágenes pendientes (no necesarias en producción)
|
||||||
ecosystem.config.js
|
imagenes-pendientes/
|
||||||
webhook-deploy.sh
|
|
||||||
.github
|
# Archivos de configuración de desarrollo
|
||||||
vercel.json
|
.eslintrc*
|
||||||
netlify.toml
|
.prettierrc*
|
||||||
nginx.conf.example
|
.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
|
*.bak
|
||||||
*.backup
|
*.backup
|
||||||
backup_manual_pre_limpieza/
|
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 EMERGES TES
|
||||||
# Multi-stage build para optimizar tamaño de imagen
|
|
||||||
|
|
||||||
# Stage 1: Build
|
# Stage 1: Build
|
||||||
FROM node:18-alpine AS builder
|
FROM node:18-alpine AS builder
|
||||||
|
|
||||||
|
|
@ -20,6 +18,7 @@ RUN npm run build
|
||||||
|
|
||||||
# Verificar que el build se completó
|
# Verificar que el build se completó
|
||||||
RUN test -d dist || (echo "Error: dist directory not found" && exit 1)
|
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
|
# Stage 2: Production
|
||||||
FROM node:18-alpine AS production
|
FROM node:18-alpine AS production
|
||||||
|
|
@ -27,18 +26,25 @@ FROM node:18-alpine AS production
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Instalar serve globalmente para servir archivos estáticos
|
# 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/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
|
# Exponer puerto 8607
|
||||||
EXPOSE 8607
|
EXPOSE 8607
|
||||||
|
|
||||||
|
# Variables de entorno
|
||||||
|
ENV NODE_ENV=production
|
||||||
|
ENV PORT=8607
|
||||||
|
|
||||||
# Health check
|
# Health check
|
||||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
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)})"
|
CMD node -e "require('http').get('http://localhost:8607', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
|
||||||
|
|
||||||
# Comando para servir la aplicación
|
# Comando para servir la aplicación
|
||||||
CMD ["serve", "-s", "dist", "-l", "8607"]
|
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
|
#!/bin/bash
|
||||||
|
|
||||||
# Script de deploy con Docker para EMERGES TES
|
# Script de deploy con Docker para EMERGES TES
|
||||||
# Uso: ./deploy-docker.sh [--skip-git] [--rebuild]
|
# Uso: ./deploy-docker.sh [--rebuild] [--stop] [--logs]
|
||||||
# Requisitos: docker, docker-compose
|
# Requisitos: Docker, Docker Compose
|
||||||
# Puerto: 8607
|
|
||||||
|
|
||||||
set -e # Salir si hay error
|
set -e # Salir si hay error
|
||||||
|
|
||||||
|
|
@ -15,55 +14,83 @@ BLUE='\033[0;34m'
|
||||||
NC='\033[0m' # No Color
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
# Configuración
|
# Configuración
|
||||||
PORT=8607
|
|
||||||
CONTAINER_NAME="emerges-tes"
|
CONTAINER_NAME="emerges-tes"
|
||||||
IMAGE_NAME="emerges-tes"
|
IMAGE_NAME="emerges-tes"
|
||||||
|
PORT=8607
|
||||||
COMPOSE_FILE="docker-compose.yml"
|
COMPOSE_FILE="docker-compose.yml"
|
||||||
|
|
||||||
echo -e "${BLUE}════════════════════════════════════════${NC}"
|
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 -e "${BLUE}════════════════════════════════════════${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# Verificar Docker
|
# Verificar Docker
|
||||||
if ! command -v docker &> /dev/null; then
|
if ! command -v docker &> /dev/null; then
|
||||||
echo -e "${RED}❌ Error: Docker no está instalado${NC}"
|
echo -e "${RED}❌ Error: Docker no está instalado${NC}"
|
||||||
echo -e "${YELLOW} Instala Docker: https://docs.docker.com/get-docker/${NC}"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Detectar comando docker-compose
|
# Detectar comando de compose (docker-compose o docker compose)
|
||||||
if docker compose version &> /dev/null; then
|
if command -v docker-compose &> /dev/null; then
|
||||||
DOCKER_COMPOSE="docker compose"
|
COMPOSE_CMD="docker-compose"
|
||||||
else
|
else
|
||||||
DOCKER_COMPOSE="docker-compose"
|
COMPOSE_CMD="docker compose"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Verificar si se debe saltar git pull
|
echo -e "${GREEN}✅ Docker detectado: $(docker --version)${NC}"
|
||||||
SKIP_GIT=false
|
echo -e "${GREEN}✅ Docker Compose detectado${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Procesar argumentos
|
||||||
REBUILD=false
|
REBUILD=false
|
||||||
|
STOP=false
|
||||||
|
LOGS=false
|
||||||
|
SKIP_GIT=false
|
||||||
|
|
||||||
for arg in "$@"; do
|
for arg in "$@"; do
|
||||||
case $arg in
|
case $arg in
|
||||||
--skip-git)
|
|
||||||
SKIP_GIT=true
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
--rebuild)
|
--rebuild)
|
||||||
REBUILD=true
|
REBUILD=true
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
*)
|
--stop)
|
||||||
|
STOP=true
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
--logs)
|
||||||
|
LOGS=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--skip-git)
|
||||||
|
SKIP_GIT=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Argumento desconocido
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
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)
|
# 1. Actualizar código desde git (si no se salta)
|
||||||
if [ "$SKIP_GIT" = false ]; then
|
if [ "$SKIP_GIT" = false ]; then
|
||||||
echo -e "${YELLOW}📥 [1/4] Actualizando código desde git...${NC}"
|
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}"
|
echo -e "${YELLOW}⏭️ [1/4] Saltando actualización de git (--skip-git)${NC}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 2. Detener contenedor existente (si existe)
|
# 2. Verificar que Dockerfile existe
|
||||||
echo -e "${YELLOW}🛑 [2/4] Deteniendo contenedor existente...${NC}"
|
echo -e "${YELLOW}🔍 [2/4] Verificando Dockerfile...${NC}"
|
||||||
$DOCKER_COMPOSE down 2>/dev/null || true
|
if [ ! -f "Dockerfile" ]; then
|
||||||
docker stop "$CONTAINER_NAME" 2>/dev/null || true
|
echo -e "${RED}❌ Error: Dockerfile no encontrado${NC}"
|
||||||
docker rm "$CONTAINER_NAME" 2>/dev/null || true
|
exit 1
|
||||||
echo -e "${GREEN}✅ Contenedor detenido${NC}"
|
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
|
# 3. Construir imagen (si es necesario)
|
||||||
echo -e "${YELLOW}🔨 [3/4] Construyendo imagen Docker...${NC}"
|
|
||||||
if [ "$REBUILD" = true ]; then
|
if [ "$REBUILD" = true ]; then
|
||||||
echo -e "${YELLOW} Forzando rebuild completo (--rebuild)${NC}"
|
echo -e "${YELLOW}🔨 [3/4] Reconstruyendo imagen Docker...${NC}"
|
||||||
$DOCKER_COMPOSE build --no-cache
|
$COMPOSE_CMD build --no-cache
|
||||||
|
echo -e "${GREEN}✅ Imagen reconstruida${NC}"
|
||||||
else
|
else
|
||||||
$DOCKER_COMPOSE build
|
echo -e "${YELLOW}🔨 [3/4] Construyendo/actualizando imagen Docker...${NC}"
|
||||||
|
$COMPOSE_CMD build
|
||||||
|
echo -e "${GREEN}✅ Imagen lista${NC}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
# 4. Iniciar/Reiniciar contenedor
|
||||||
echo -e "${GREEN}✅ Imagen construida exitosamente${NC}"
|
|
||||||
else
|
|
||||||
echo -e "${RED}❌ Error al construir imagen${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 4. Iniciar contenedor
|
|
||||||
echo -e "${YELLOW}🚀 [4/4] Iniciando contenedor...${NC}"
|
echo -e "${YELLOW}🚀 [4/4] Iniciando contenedor...${NC}"
|
||||||
$DOCKER_COMPOSE up -d
|
$COMPOSE_CMD up -d
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
# Esperar a que el contenedor esté listo
|
||||||
echo -e "${GREEN}✅ Contenedor iniciado${NC}"
|
echo -e "${YELLOW}⏳ Esperando a que el contenedor esté listo...${NC}"
|
||||||
else
|
|
||||||
echo -e "${RED}❌ Error al iniciar contenedor${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Esperar un momento para que el contenedor inicie
|
|
||||||
sleep 3
|
sleep 3
|
||||||
|
|
||||||
# Verificar estado
|
# Verificar estado
|
||||||
echo ""
|
if docker ps | grep -q "$CONTAINER_NAME"; then
|
||||||
echo -e "${GREEN}✅ Deploy completado exitosamente${NC}"
|
echo -e "${GREEN}✅ Contenedor iniciado correctamente${NC}"
|
||||||
echo -e "${BLUE}📊 Estado del contenedor:${NC}"
|
else
|
||||||
docker ps | grep "$CONTAINER_NAME" || docker ps -a | grep "$CONTAINER_NAME"
|
echo -e "${RED}❌ Error: El contenedor no está corriendo${NC}"
|
||||||
|
echo -e "${YELLOW}📋 Últimos logs:${NC}"
|
||||||
echo ""
|
$COMPOSE_CMD logs --tail=50
|
||||||
echo -e "${GREEN}🌐 Aplicación disponible en: http://localhost:$PORT${NC}"
|
exit 1
|
||||||
echo -e "${GREEN}📝 Logs: docker logs $CONTAINER_NAME${NC}"
|
fi
|
||||||
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}"
|
|
||||||
|
|
||||||
|
# Mostrar información
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${GREEN}════════════════════════════════════════${NC}"
|
echo -e "${GREEN}════════════════════════════════════════${NC}"
|
||||||
echo -e "${GREEN}🎉 Deploy Docker completado!${NC}"
|
echo -e "${GREEN}🎉 Deploy Docker completado!${NC}"
|
||||||
echo -e "${GREEN}════════════════════════════════════════${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:
|
networks:
|
||||||
emerges-network:
|
emerges-network:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,13 @@ services:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
target: production
|
|
||||||
container_name: emerges-tes
|
container_name: emerges-tes
|
||||||
ports:
|
ports:
|
||||||
- "8607:8607"
|
- "8607:8607"
|
||||||
restart: unless-stopped
|
|
||||||
environment:
|
environment:
|
||||||
- NODE_ENV=production
|
- NODE_ENV=production
|
||||||
- PORT=8607
|
- PORT=8607
|
||||||
|
restart: unless-stopped
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "node", "-e", "require('http').get('http://localhost:8607', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"]
|
test: ["CMD", "node", "-e", "require('http').get('http://localhost:8607', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
|
|
@ -20,11 +19,12 @@ services:
|
||||||
retries: 3
|
retries: 3
|
||||||
start_period: 5s
|
start_period: 5s
|
||||||
labels:
|
labels:
|
||||||
- "com.emerges-tes.description=EMERGES TES - Protocolo Rápido"
|
- "com.emerges.app=emerges-tes"
|
||||||
- "com.emerges-tes.version=1.0"
|
- "com.emerges.version=1.0"
|
||||||
networks:
|
networks:
|
||||||
- emerges-network
|
- emerges-network
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
emerges-network:
|
emerges-network:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 20 KiB |
Loading…
Reference in a new issue