Documentación/ Despliegue/ Despliegue Git

Despliegue Git

Conecta cualquier repositorio Git y despliega automáticamente en cada push. sh0 se encarga de clonar, compilar y desplegar tu aplicación sin configuración.

Conectar un repositorio

Para desplegar desde Git, navega a tu stack en el panel de control de sh0 y selecciona Nueva aplicación → Repositorio Git. Puedes conectar un repositorio ingresando su URL o vinculando tu cuenta del proveedor Git para acceso a repositorios privados.

New app creation dialog showing the Git Repository option

Para repositorios públicos, pega la URL de clonación HTTPS directamente. Para repositorios privados, necesitarás conectar tu cuenta del proveedor Git o agregar una clave SSH en Configuración → Claves SSH.

Repository URL
https://github.com/your-org/your-app.git

Proveedores compatibles

sh0 funciona con cualquier proveedor Git que admita webhooks y clonación SSH/HTTPS:

  • GitHub -- Integración OAuth para vinculación de repositorios con un clic
  • GitLab -- Autoalojado y GitLab.com compatibles
  • Bitbucket -- Ediciones Cloud y Server
  • Gitea / Forgejo -- Forjas Git autoalojadas
  • Cualquier servidor Git -- Cualquier repositorio accesible vía SSH o HTTPS
Git provider selection screen with GitHub, GitLab, and Bitbucket options
Tip
Conectar tu cuenta de GitHub vía OAuth permite que sh0 liste tus repositorios, configure webhooks automáticamente y reporte el estado de compilación en tus pull requests.

Configuración de webhook

Los webhooks habilitan el despliegue al hacer push. Cuando haces push de código a tu repositorio, tu proveedor Git envía una notificación a sh0, que activa una nueva compilación y despliegue.

Si conectaste tu proveedor Git vía OAuth, los webhooks se configuran automáticamente. Para configuración manual, agrega un webhook en la configuración de tu repositorio con la siguiente URL:

Webhook URL
https://your-sh0-server.com:9000/api/hooks/git/{app_id}

Configura el webhook para activarse en eventos de push. sh0 genera un secreto de webhook para cada aplicación, que puedes encontrar en Configuración de la aplicación → Git → Secreto del webhook. Agrega este secreto a tu proveedor Git para verificar los payloads entrantes.

Webhook configuration panel showing the webhook URL and secret
Note
sh0 valida las firmas de webhook usando HMAC-SHA256. Esto garantiza que solo los push genuinos de tu repositorio activen despliegues.

Selección de rama

Por defecto, sh0 despliega desde la rama main. Puedes cambiar la rama de despliegue en la configuración de tu aplicación para desplegar desde cualquier rama de tu repositorio.

Branch selection dropdown in app Git settings

Las configuraciones comunes incluyen:

  • Producción: Desplegar desde main o production
  • Staging: Desplegar desde develop o staging
  • Ramas de características: Usa Entornos de vista previa para despliegues automáticos de PR

Configuración de compilación

sh0 detecta automáticamente el stack de tu aplicación y configura el pipeline de compilación en consecuencia. También puedes anular estos ajustes manualmente.

Detección automática de Dockerfile

Si tu repositorio contiene un Dockerfile, sh0 lo usa automáticamente. También puedes especificar una ruta de Dockerfile personalizada y un contexto de compilación:

Build configuration
dockerfile: ./deploy/Dockerfile
context: .
build_args:
  NODE_ENV: production
  API_URL: https://api.example.com

sh0 admite compilaciones multi-etapa, argumentos de compilación y contextos de compilación personalizados. La compilación se ejecuta en tu servidor, por lo que las imágenes grandes no generan costos de transferencia.

Buildpacks

Si tu repositorio no incluye un Dockerfile, sh0 analiza tu código y genera un Dockerfile optimizado automáticamente. Detecta más de 15 frameworks y lenguajes:

  • Node.js: Next.js, Nuxt, SvelteKit, Remix, Express, Fastify
  • Python: Django, Flask, FastAPI
  • Go: Módulos Go estándar
  • Rust: Proyectos basados en Cargo
  • PHP: Laravel, Symfony
  • Ruby: Rails, Sinatra
  • Sitios estáticos: HTML, Astro, Hugo, Jekyll
Auto-detected build settings showing Node.js with Next.js framework
Tip
Puedes anular los ajustes detectados automáticamente en cualquier momento. Navega a Configuración de la aplicación → Compilación para personalizar el Dockerfile, el comando de compilación o el comando de instalación.

Desplegar al hacer push

Con los webhooks configurados, cada push a tu rama de despliegue activa automáticamente un nuevo despliegue. El flujo de trabajo es:

  1. Haces push de código a la rama configurada
  2. Tu proveedor Git envía un webhook a sh0
  3. sh0 descarga el código más reciente de tu repositorio
  4. La imagen Docker se construye a partir de tu Dockerfile (o uno generado automáticamente)
  5. Se despliega un nuevo contenedor usando despliegue blue-green
  6. El tráfico se cambia al nuevo contenedor una vez que las verificaciones de salud pasan

También puedes desactivar los despliegues automáticos y activarlos manualmente desde el panel de control o vía la API:

Trigger deploy via API
curl -X POST https://your-sh0-server.com:9000/api/apps/{app_id}/deploy \
  -H "Authorization: Bearer YOUR_TOKEN"

Ver registros de compilación

Cada despliegue genera un registro completo de compilación que puedes transmitir en tiempo real desde el panel de control. Los registros de compilación incluyen:

  • Salida de clonación y checkout de Git
  • Pasos de compilación de la imagen Docker (cada capa)
  • Resultados de inicio del contenedor y verificaciones de salud
  • Confirmación del cambio de tráfico
Real-time build log streaming in the sh0 dashboard

Los registros de compilación se almacenan para cada despliegue y se pueden acceder desde la pestaña Despliegues en cualquier momento. Si una compilación falla, sh0 mantiene la versión anterior en ejecución y marca el despliegue como fallido con un mensaje de error detallado.

Warning
Si tu compilación falla repetidamente, revisa los Registros de compilación en busca de dependencias faltantes o comandos de compilación incorrectos. También puedes conectarte por SSH a un contenedor de depuración usando Acceso a terminal para solucionar problemas.