codigo0/scripts/deploy/README_DEPLOY.md
planetazuzu f3f2ab3c55 docs: añadir plan de conversión SCORM y scripts de deploy
- Plan completo de conversión progresiva a SCORM
- Guía rápida de inicio SCORM
- Scripts de despliegue automático mejorados
2026-01-02 10:28:38 +01:00

6.6 KiB

🚀 Sistema de Despliegue Automático - EMERGES TES

Sistema de despliegue automático usando Git hooks (post-receive) en repositorio bare.


📋 ARQUITECTURA

┌─────────────────┐
│  Máquina Local  │
│  (desarrollo)   │
└────────┬────────┘
         │ git push production main
         ▼
┌─────────────────┐
│  Servidor       │
│                 │
│  /var/repos/    │
│  emerges-tes.git│ ◄── Repositorio bare
│    └─ hooks/    │
│       └─ post-  │
│          receive│ ◄── Hook que se ejecuta automáticamente
└────────┬────────┘
         │
         │ Ejecuta: checkout → npm install → npm run build
         ▼
┌─────────────────┐
│  /var/www/      │
│  emerges-tes/   │ ◄── Directorio de trabajo
│    ├─ .git/     │
│    ├─ src/      │
│    ├─ dist/     │ ◄── Build de producción (servir con Nginx)
│    └─ ...       │
└─────────────────┘

🔧 CONFIGURACIÓN INICIAL (Solo una vez)

Paso 1: Subir el hook al servidor

Desde tu máquina local:

cd /home/planetazuzu/guia-tes

# Copiar el hook al servidor
scp scripts/deploy/post-receive root@207.180.226.141:/tmp/post-receive

Paso 2: Configurar en el servidor

Conectarse al servidor:

ssh root@207.180.226.141

En el servidor, ejecutar:

# Variables
GIT_DIR="/var/repos/emerges-tes.git"
APP_DIR="/var/www/emerges-tes"
HOOK_FILE="$GIT_DIR/hooks/post-receive"

# 1. Copiar el hook
cp /tmp/post-receive "$HOOK_FILE"

# 2. Dar permisos de ejecución
chmod +x "$HOOK_FILE"

# 3. Verificar que el directorio de trabajo existe
if [ ! -d "$APP_DIR" ]; then
    mkdir -p "$APP_DIR"
    # Si el directorio está vacío, clonar
    if [ ! -d "$APP_DIR/.git" ]; then
        git clone "$GIT_DIR" "$APP_DIR"
    fi
fi

# 4. Crear archivo de logs
touch /var/log/emerges-tes-deploy.log
chmod 666 /var/log/emerges-tes-deploy.log

🧪 PROBAR EL DESPLIEGUE

Desde tu máquina local:

cd /home/planetazuzu/guia-tes

# Hacer un cambio pequeño (opcional)
echo "# Test deploy $(date)" >> README.md
git add README.md
git commit -m "test: probar despliegue automático"

# Hacer push (esto activará el hook automáticamente)
git push production main

En el servidor, verificar logs:

# Ver logs en tiempo real
tail -f /var/log/emerges-tes-deploy.log

# O ver las últimas líneas
tail -n 50 /var/log/emerges-tes-deploy.log

Verificar que el build se creó:

# Verificar que dist/ existe
ls -la /var/www/emerges-tes/dist/

# Verificar que hay archivos HTML/JS
ls -la /var/www/emerges-tes/dist/assets/

📝 QUÉ HACE EL HOOK

El hook post-receive se ejecuta automáticamente después de cada git push y realiza:

  1. Detecta el push en la rama main
  2. Hace fetch de los últimos cambios
  3. Checkout limpio (git reset --hard) para asegurar que el código coincide exactamente con el repositorio
  4. Limpia archivos no rastreados (git clean -fd)
  5. Instala dependencias (npm install)
  6. Construye la aplicación (npm run build)
  7. Verifica que el directorio dist/ se creó correctamente
  8. Registra todo en /var/log/emerges-tes-deploy.log

🔍 TROUBLESHOOTING

El hook no se ejecuta

# Verificar que el hook existe y es ejecutable
ls -la /var/repos/emerges-tes.git/hooks/post-receive

# Debe mostrar: -rwxr-xr-x (permisos de ejecución)
# Si no, ejecutar:
chmod +x /var/repos/emerges-tes.git/hooks/post-receive

Error: "npm: command not found"

# Instalar Node.js y npm en el servidor
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs

# Verificar instalación
node --version
npm --version

Error: "Permission denied"

# Verificar permisos del directorio de trabajo
ls -la /var/www/emerges-tes

# Ajustar propietario si es necesario
sudo chown -R $USER:$USER /var/www/emerges-tes

El build falla

# Ver logs detallados
tail -f /var/log/emerges-tes-deploy.log

# Probar manualmente en el servidor
cd /var/www/emerges-tes
npm install
npm run build

Verificar que el hook se ejecutó

# Ver los últimos logs
tail -n 100 /var/log/emerges-tes-deploy.log

# Buscar errores
grep -i error /var/log/emerges-tes-deploy.log

🔄 FLUJO COMPLETO DE DESPLIEGUE

1. Desarrollador hace cambios localmente
   └─ git add .
   └─ git commit -m "mensaje"
   └─ git push production main

2. Git envía cambios al servidor
   └─ Se activa el hook post-receive

3. Hook ejecuta automáticamente:
   ├─ git fetch origin main
   ├─ git reset --hard origin/main
   ├─ git clean -fd
   ├─ npm install
   ├─ npm run build
   └─ Verifica dist/

4. Aplicación actualizada en /var/www/emerges-tes/dist/
   └─ Servir con Nginx/Apache

📊 CONFIGURACIÓN NGINX (Opcional)

Si quieres servir la app con Nginx:

server {
    listen 80;
    server_name tu-dominio.com;

    root /var/www/emerges-tes/dist;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    # Cache para assets estáticos
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}

VERIFICACIÓN FINAL

Después de configurar, verifica:

# 1. Hook existe y es ejecutable
test -x /var/repos/emerges-tes.git/hooks/post-receive && echo "✅ Hook OK" || echo "❌ Hook no ejecutable"

# 2. Directorio de trabajo existe
test -d /var/www/emerges-tes && echo "✅ Directorio OK" || echo "❌ Directorio no existe"

# 3. Logs se pueden escribir
test -w /var/log/emerges-tes-deploy.log && echo "✅ Logs OK" || echo "❌ Logs no escribibles"

# 4. Node.js instalado
command -v node >/dev/null && echo "✅ Node.js OK" || echo "❌ Node.js no instalado"

🎯 COMANDOS RÁPIDOS

# Ver logs en tiempo real
tail -f /var/log/emerges-tes-deploy.log

# Ver último despliegue
tail -n 50 /var/log/emerges-tes-deploy.log

# Forzar despliegue manual (desde servidor)
cd /var/www/emerges-tes
git pull origin main
npm install
npm run build

# Verificar build
ls -la /var/www/emerges-tes/dist/

Sistema listo para producción

Cada git push production main desde tu máquina local actualizará automáticamente la aplicación en el servidor.