Deploy automático desde GitHub con rollback instantáneo

El sistema de deploy automático conecta tus repositorios de GitHub con tu hosting, desplegando código sin downtime y con rollback instantáneo a versiones anteriores. Cada deploy crea una nueva versión en el servidor y el cambio entre versiones es inmediato mediante enlaces simbólicos.

Accede a la herramienta desde el área de clientes en Hosting → selecciona tu servicio → Deploy.

Agregar repositorio

Agregar nuevo repositorio

Haz click en Agregar repositorio y completa los siguientes campos:

  • Nombre del repositorio: Un identificador descriptivo para tu referencia, como "Mi proyecto Laravel" o "Web principal".
  • Token de acceso de GitHub: Token personal de GitHub que siempre es obligatorio, tanto para repositorios públicos como privados. Créalo en GitHub Settings → Tokens con permisos repo (tokens classic) o Contents: Read-only + Metadata: Read-only (tokens fine-grained). Una vez validado, el sistema cargará automáticamente todos tus repositorios.
  • Seleccionar repositorio: Después de validar el token, aparece la lista de tus repositorios. Busca y selecciona el que quieres desplegar, ya sea público o privado.
  • Rama: Elige la rama a desplegar. Si el sistema detectó las ramas del repositorio aparecerán en un selector, si no puedes escribirla manualmente. Ejemplos comunes: main, master, production.
  • Ruta: Especifica dónde se desplegará el código. Ejemplos: public_html para el dominio principal, subdomains/blog/public_html para un subdominio, o public_html/app para un subdirectorio. Por norma general usarás la misma ruta a la que apunte el dominio o subdominio que quieras usar.

Configuración avanzada (opcional):

  • Releases a mantener: Cuántas versiones previas conservar para rollback, por defecto 5
  • Directorio public: Activa si tu aplicación tiene carpeta /public (Laravel, Symfony, etc.)
  • Auto-deploy: Ejecuta el despliegue automáticamente con cada push a la rama que realices sobre GitHub.

Proximamente daremos compatibilidad a otros servicios como GitLab.

Ejecutar deploy

Al hacer click en Agregar Repositorio, el sistema verifica el acceso SSH (activándolo automáticamente si es necesario), valida la configuración y guarda el repositorio. Ahora aparece en la lista con un botón Deploy.

Haz click en Deploy para el primer despliegue. Verás en tiempo real la conexión SSH, clonado del repositorio, configuración de archivos compartidos, ejecución de scripts (si los configuraste), activación de la nueva versión y limpieza de versiones antiguas.

Scripts personalizados

La mayoría de proyectos necesitan ejecutar comandos durante el deploy para instalar dependencias o compilar assets. Accede al editor haciendo click en el menú del repositorio (tres puntos) → Editar script.

Ejemplos prácticos según tipo de proyecto:

Laravel con Composer y npm:

composer install --no-dev --optimize-autoloader
php artisan config:cache
php artisan route:cache
php artisan view:cache

npm install
npm run build

WordPress con npm:

npm install
npm run build

Proyecto PHP simple:

composer install --no-dev

Los scripts se ejecutan en la nueva versión antes de activarla, por lo que si algo falla la versión anterior permanece activa. El sistema filtra automáticamente comandos peligrosos como sudo o rm -rf / por seguridad.

Si necesitas Node.js o npm, primero debes instalarlos desde el Gestor de paquetes.

Archivos compartidos y .env

El archivo .env se preserva automáticamente entre deploys. Para compartir archivos o carpetas adicionales, accede a Archivos compartidos (menú → Archivos compartidos) y especifica las rutas relativas, una por línea.

Por ejemplo:

storage/app
storage/logs
uploads

Los archivos compartidos se guardan en ~/deploy/nombre-repo/shared/ y se enlazan automáticamente en cada versión. Puedes editar el .env directamente desde el menú → Editar .env, los cambios se aplican inmediatamente y se limpian cachés automáticamente en aplicaciones Laravel.

Si por ejemplo el archivo no existe en el primer deploy pero lo creas después, cuando hagas el siguiente deploy al tenerlo añadido en el listado, el sistema lo copiará a "shared" para que persista en sucesivos despliegues.

Historial y rollback

El Historial muestra todos los deploys con fecha, forma de ejecución (manual/webhook/rollback), commit desplegado, duración y estado. Haz click en Ver Log para ver el output completo y depurar problemas.

Para hacer rollback a una versión anterior, localiza el deploy en el historial y haz click en Rollback. El sistema verifica que la versión existe, cambia el enlace simbólico para apuntar a ella y actualiza el directorio. Tarda solo segundos porque no clona código nuevo, solo cambia qué versión está activa.

Si un deploy está en progreso y necesitas cancelarlo, haz click en Cancelar Deploy. El sistema detendrá el proceso, limpiará archivos parciales y mantendrá la versión anterior activa.

Cómo funciona la herramienta de deploy

El sistema crea una estructura en ~/deploy/nombre-repo/ con tres directorios principales: releases/ contiene cada versión desplegada con timestamp, current es un enlace simbólico a la versión activa, y shared/ contiene archivos compartidos como .env y storage/. Tu directorio web (public_html u otro) apunta a current, que a su vez apunta a la versión activa en releases/.

Cuando ejecutas un deploy, se crea una nueva carpeta en releases/, se clona el código, se ejecutan los scripts y cuando todo está listo se actualiza current para apuntar a la nueva versión. Este cambio de enlace simbólico es instantáneo y sin downtime. El rollback funciona igual, simplemente cambia current a una versión anterior que ya existe.

Solución de problemas

Credenciales SSH incorrectas: La contraseña puede haber cambiado, actualízala desde el área de clientes para el servicio de hosting ya que es esencial para que funcione esta herramienta. Ya existe un deploy en progreso: Solo puede haber un deploy activo por repositorio, espera a que termine o cancélalo. Scripts personalizados fallan: Revisa la sintaxis de los comandos en bash y consulta el output del deploy para identificar qué comando falló. Recuerda que cualquier error detiene el deploy manteniendo la versión anterior activa. Webhook no se activa: Verifica en GitHub (Settings → Webhooks) que está configurado correctamente y revisa las entregas recientes.