From c43e0355933089687a7ea2a68057484d295e6fae Mon Sep 17 00:00:00 2001 From: planetazuzu Date: Tue, 23 Dec 2025 10:04:35 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20optimizar=20.dockerignore=20y=20a=C3=B1?= =?UTF-8?q?adir=20documentaci=C3=B3n=20Docker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Actualizar .dockerignore para excluir archivos innecesarios - Excluir documentación, backups, scripts y configuraciones no Docker - Reducir tamaño de imagen Docker - Mantener solo archivos esenciales para build y ejecución --- DEPLOYMENT_DOCKER.md | 398 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 398 insertions(+) create mode 100644 DEPLOYMENT_DOCKER.md diff --git a/DEPLOYMENT_DOCKER.md b/DEPLOYMENT_DOCKER.md new file mode 100644 index 00000000..98e940ee --- /dev/null +++ b/DEPLOYMENT_DOCKER.md @@ -0,0 +1,398 @@ +# 🐳 Guía de Despliegue con Docker + +**Proyecto:** EMERGES TES - Protocolo Rápido +**Fecha:** 2024-12-19 +**Puerto:** 8607 + +--- + +## 📋 Requisitos Previos + +- **Docker** 20.10+ instalado +- **Docker Compose** 2.0+ instalado +- **Git** instalado +- **Puerto 8607** disponible + +--- + +## 🚀 Despliegue Rápido + +### Opción 1: Script de Deploy Automático (Recomendado) + +```bash +# Ejecutar script de deploy con Docker +./deploy-docker.sh +``` + +Este script: +1. ✅ Actualiza código desde GitHub +2. ✅ Construye imagen Docker +3. ✅ Inicia contenedores +4. ✅ Verifica que todo funciona + +--- + +### Opción 2: Comandos Manuales + +#### Desarrollo + +```bash +# Construir e iniciar contenedores +docker-compose up --build + +# O en modo detached (background) +docker-compose up -d --build + +# Ver logs +docker-compose logs -f + +# Detener +docker-compose down +``` + +#### Producción + +```bash +# Usar archivo de producción +docker-compose -f docker-compose.prod.yml up -d --build + +# Ver logs +docker-compose -f docker-compose.prod.yml logs -f + +# Detener +docker-compose -f docker-compose.prod.yml down +``` + +--- + +## 📁 Archivos Docker + +### Dockerfile + +**Ubicación:** `Dockerfile` + +**Características:** +- Multi-stage build (optimizado) +- Node.js 18 Alpine (imagen ligera) +- Build de producción con Vite +- Servidor `serve` en puerto 8607 +- Healthcheck configurado + +**Etapas:** +1. **Dependencies:** Instala dependencias npm +2. **Build:** Construye aplicación con Vite +3. **Production:** Imagen final con solo archivos necesarios + +--- + +### docker-compose.yml (Desarrollo) + +**Ubicación:** `docker-compose.yml` + +**Servicios:** +- `emerges-tes`: Aplicación principal + - Puerto: `8607:8607` + - Volúmenes: Código fuente montado (hot reload) + - Red: `emerges-network` + +**Uso:** +```bash +docker-compose up --build +``` + +--- + +### docker-compose.prod.yml (Producción) + +**Ubicación:** `docker-compose.prod.yml` + +**Características:** +- Sin volúmenes (imagen optimizada) +- Restart policy: `always` +- Healthcheck activado +- Logs configurados + +**Uso:** +```bash +docker-compose -f docker-compose.prod.yml up -d --build +``` + +--- + +## 🔧 Configuración + +### Variables de Entorno + +Crear archivo `.env` (opcional): + +```env +NODE_ENV=production +PORT=8607 +``` + +O usar variables en `docker-compose.yml`: + +```yaml +environment: + - NODE_ENV=production + - PORT=8607 +``` + +--- + +## 📊 Comandos Útiles + +### Gestión de Contenedores + +```bash +# Ver contenedores corriendo +docker ps + +# Ver logs en tiempo real +docker-compose logs -f emerges-tes + +# Ver logs de las últimas 100 líneas +docker-compose logs --tail=100 emerges-tes + +# Reiniciar contenedor +docker-compose restart emerges-tes + +# Detener y eliminar contenedores +docker-compose down + +# Detener y eliminar contenedores + volúmenes +docker-compose down -v + +# Eliminar imágenes también +docker-compose down --rmi all +``` + +### Build y Rebuild + +```bash +# Rebuild sin caché +docker-compose build --no-cache + +# Rebuild solo un servicio +docker-compose build emerges-tes + +# Ver tamaño de imágenes +docker images | grep emerges-tes +``` + +### Inspección + +```bash +# Ver configuración del servicio +docker-compose config + +# Ver procesos dentro del contenedor +docker-compose exec emerges-tes ps aux + +# Entrar al contenedor (shell) +docker-compose exec emerges-tes sh + +# Ver uso de recursos +docker stats emerges-tes +``` + +--- + +## 🔄 Auto-Deploy desde GitHub + +### Opción 1: GitHub Actions con Docker + +Actualizar `.github/workflows/deploy.yml`: + +```yaml +name: Auto Deploy Docker + +on: + push: + branches: [main] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + push: false + tags: emerges-tes:latest + + - name: Deploy to server + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.SERVER_HOST }} + username: ${{ secrets.SERVER_USER }} + key: ${{ secrets.SERVER_SSH_KEY }} + script: | + cd ${{ secrets.APP_PATH }} + ./deploy-docker.sh +``` + +--- + +### Opción 2: Webhook con Docker + +Actualizar `webhook-deploy.sh`: + +```bash +#!/bin/bash +cd /ruta/a/tu/app +./deploy-docker.sh +``` + +--- + +## 🐛 Solución de Problemas + +### Error: "Port 8607 is already in use" + +```bash +# Ver qué proceso usa el puerto +sudo lsof -i :8607 +# O +sudo netstat -tlnp | grep 8607 + +# Detener contenedor Docker +docker-compose down + +# O cambiar puerto en docker-compose.yml +ports: + - "8608:8607" # Puerto externo diferente +``` + +### Error: "Cannot connect to Docker daemon" + +```bash +# Verificar que Docker está corriendo +sudo systemctl status docker + +# Iniciar Docker +sudo systemctl start docker + +# Añadir usuario al grupo docker (si es necesario) +sudo usermod -aG docker $USER +# Luego cerrar sesión y volver a entrar +``` + +### Error: "Build failed" + +```bash +# Rebuild sin caché +docker-compose build --no-cache + +# Ver logs detallados +docker-compose build --progress=plain + +# Verificar Dockerfile +docker build -t test-image . +``` + +### Contenedor se detiene inmediatamente + +```bash +# Ver logs del contenedor +docker-compose logs emerges-tes + +# Verificar healthcheck +docker inspect emerges-tes | grep -A 10 Health + +# Ejecutar comando manualmente +docker-compose run --rm emerges-tes sh +``` + +--- + +## 📈 Optimización + +### Tamaño de Imagen + +**Estrategias:** +- ✅ Multi-stage build (ya implementado) +- ✅ Alpine Linux (imagen base ligera) +- ✅ Solo archivos necesarios en imagen final +- ✅ .dockerignore configurado + +**Verificar tamaño:** +```bash +docker images | grep emerges-tes +``` + +### Caché de Build + +Docker usa caché automáticamente. Para forzar rebuild completo: + +```bash +docker-compose build --no-cache +``` + +--- + +## 🔒 Seguridad + +### Buenas Prácticas + +1. ✅ No exponer credenciales en Dockerfile +2. ✅ Usar variables de entorno para secrets +3. ✅ Usar usuario no-root en contenedor (si es posible) +4. ✅ Mantener imágenes actualizadas +5. ✅ Escanear imágenes con `docker scan` + +### Escanear Vulnerabilidades + +```bash +docker scan emerges-tes:latest +``` + +--- + +## 📝 Checklist de Despliegue + +- [ ] Docker y Docker Compose instalados +- [ ] Puerto 8607 disponible +- [ ] Archivo `.env` configurado (opcional) +- [ ] `docker-compose.yml` revisado +- [ ] Build exitoso: `docker-compose build` +- [ ] Contenedor inicia: `docker-compose up -d` +- [ ] App accesible: `http://localhost:8607` +- [ ] Logs sin errores: `docker-compose logs` +- [ ] Healthcheck OK: `docker inspect` +- [ ] Auto-deploy configurado (opcional) + +--- + +## 🆚 Comparación: Docker vs PM2 + +| Característica | Docker | PM2 | +|---------------|--------|-----| +| Aislamiento | ✅ Completo | ❌ No | +| Portabilidad | ✅ Alta | ⚠️ Media | +| Gestión | ✅ docker-compose | ✅ PM2 | +| Recursos | ⚠️ Más uso | ✅ Menos uso | +| Escalabilidad | ✅ Fácil | ⚠️ Manual | +| Dependencias | ✅ Incluidas | ❌ Requiere Node | + +**Recomendación:** Usar Docker para producción, PM2 para desarrollo rápido. + +--- + +## 📞 Soporte + +Si tienes problemas: +1. Revisar logs: `docker-compose logs -f` +2. Verificar configuración: `docker-compose config` +3. Rebuild sin caché: `docker-compose build --no-cache` +4. Verificar puerto: `netstat -tlnp | grep 8607` + +--- + +**Última actualización:** 2024-12-19