383 lines
7 KiB
Markdown
383 lines
7 KiB
Markdown
# 🐳 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
|