- Actualizar fechaActualizacion en manual-index.ts (100+ capítulos) - Actualizar fechas en archivos .md del manual (public/manual/) - Actualizar fechas en documentación (docs/) - Actualizar fechas en páginas legales (Privacidad, Descargo, AvisoLegal) - Actualizar fechas en scripts de limpieza - Reemplazar todas las referencias de 2024-12-XX a 2025-12-23 - Reemplazar '19 de diciembre de 2024' a '23 de diciembre de 2025'
7.2 KiB
7.2 KiB
🐳 Guía de Despliegue con Docker
Proyecto: EMERGES TES - Protocolo Rápido
Fecha: 2025-12-23
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)
# Ejecutar script de deploy con Docker
./deploy-docker.sh
Este script:
- ✅ Actualiza código desde GitHub
- ✅ Construye imagen Docker
- ✅ Inicia contenedores
- ✅ Verifica que todo funciona
Opción 2: Comandos Manuales
Desarrollo
# 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
# 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
serveen puerto 8607 - Healthcheck configurado
Etapas:
- Dependencies: Instala dependencias npm
- Build: Construye aplicación con Vite
- 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
- Puerto:
Uso:
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:
docker-compose -f docker-compose.prod.yml up -d --build
🔧 Configuración
Variables de Entorno
Crear archivo .env (opcional):
NODE_ENV=production
PORT=8607
O usar variables en docker-compose.yml:
environment:
- NODE_ENV=production
- PORT=8607
📊 Comandos Útiles
Gestión de Contenedores
# 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
# 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
# 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:
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:
#!/bin/bash
cd /ruta/a/tu/app
./deploy-docker.sh
🐛 Solución de Problemas
Error: "Port 8607 is already in use"
# 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"
# 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"
# 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
# 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:
docker images | grep emerges-tes
Caché de Build
Docker usa caché automáticamente. Para forzar rebuild completo:
docker-compose build --no-cache
🔒 Seguridad
Buenas Prácticas
- ✅ No exponer credenciales en Dockerfile
- ✅ Usar variables de entorno para secrets
- ✅ Usar usuario no-root en contenedor (si es posible)
- ✅ Mantener imágenes actualizadas
- ✅ Escanear imágenes con
docker scan
Escanear Vulnerabilidades
docker scan emerges-tes:latest
📝 Checklist de Despliegue
- Docker y Docker Compose instalados
- Puerto 8607 disponible
- Archivo
.envconfigurado (opcional) docker-compose.ymlrevisado- 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:
- Revisar logs:
docker-compose logs -f - Verificar configuración:
docker-compose config - Rebuild sin caché:
docker-compose build --no-cache - Verificar puerto:
netstat -tlnp | grep 8607
Última actualización: 2025-12-23