Documentación/ Despliegue/ Entornos de vista previa

Entornos de vista previa

Cada pull request obtiene su propio despliegue en vivo con una URL única. Revisa cambios en un entorno real antes de fusionar, y limpia automáticamente cuando el PR se cierra.

¿Qué son los entornos de vista previa?

Los entornos de vista previa son despliegues temporales y completamente funcionales creados automáticamente para cada pull request. Te permiten probar cambios en un entorno aislado que refleja producción, sin afectar tu aplicación en vivo.

Cuando un miembro del equipo abre un PR, sh0 compila la rama, la despliega en una URL única y publica un comentario en el PR con un enlace a la vista previa. Cuando el PR se fusiona o se cierra, el entorno de vista previa se destruye automáticamente.

GitHub pull request with an sh0 bot comment showing the preview URL and deploy status

Habilitar vistas previas

Los entornos de vista previa se habilitan por aplicación. Navega a Configuración de la aplicación → Git → Entornos de vista previa y activa la función. Necesitarás un proveedor Git conectado (GitHub, GitLab o Bitbucket) con acceso de webhook.

Preview environment toggle in app settings

Una vez habilitados, sh0 escucha los eventos de pull request de tu proveedor Git:

  • PR abierto: Compilar y desplegar la rama
  • PR actualizado (nuevo push): Recompilar y redesplegar
  • PR fusionado o cerrado: Destruir el entorno de vista previa
Note
Los entornos de vista previa requieren que tu proveedor Git esté conectado vía OAuth para que sh0 pueda recibir eventos de PR y publicar actualizaciones de estado. Las configuraciones manuales de webhook no admiten entornos de vista previa.

Despliegues automáticos de PR

Cuando se abre un pull request, sh0 automáticamente:

  1. Clona la rama del PR
  2. Construye una imagen Docker usando el mismo pipeline de compilación que producción
  3. Inicia un nuevo contenedor con el código del PR
  4. Asigna una URL de vista previa única
  5. Publica un comentario en el PR con el enlace de vista previa y el estado de compilación
  6. Actualiza la verificación de estado del PR (marca verde o cruz roja)
Deployment in progress for a pull request with real-time build log

Cuando se envían nuevos commits a la rama del PR, sh0 automáticamente recompila y redespliega la vista previa. La URL permanece igual, por lo que los revisores siempre ven la última versión.

Tip
Puedes configurar sh0 para que solo construya vistas previas para PRs dirigidos a ramas específicas (por ejemplo, solo PRs hacia main). Esto evita compilaciones innecesarias para PRs entre ramas de características.

URLs de vista previa

Cada entorno de vista previa recibe una URL única basada en el nombre de la rama y el nombre de la aplicación:

Preview URL format
https://{branch-name}.{app-name}.your-domain.com

Por ejemplo, si tu aplicación se llama my-api y la rama del PR es feature/new-auth, la URL de vista previa sería:

Example preview URL
https://feature-new-auth.my-api.sh0.app

Los nombres de rama se sanitizan para su uso en URLs: las barras se reemplazan con guiones y los caracteres especiales se eliminan. Los certificados SSL se aprovisionan automáticamente para cada URL de vista previa vía Caddy.

Note
Si usas un registro DNS comodín para tu dominio (por ejemplo, *.my-api.your-domain.com), las URLs de vista previa funcionan de inmediato. De lo contrario, sh0 aprovisiona registros DNS individuales para cada vista previa.

Configuración de entornos de vista previa

Puedes personalizar el comportamiento de los entornos de vista previa:

  • Filtro de rama base: Solo construir vistas previas para PRs dirigidos a ramas específicas
  • Anulaciones de variables de entorno: Establece variables específicas de vista previa (por ejemplo, NODE_ENV=staging)
  • Límites de recursos: Limita CPU y memoria de los contenedores de vista previa para ahorrar recursos
  • TTL (tiempo de vida): Destruye automáticamente las vistas previas después de una duración especificada, incluso si el PR sigue abierto
  • Máximo de vistas previas concurrentes: Limita el número de entornos de vista previa activos para controlar el uso de recursos
Preview environment settings panel with filters, resource limits, and TTL configuration

Limpieza automática

Cuando un pull request se fusiona o se cierra, sh0 limpia automáticamente el entorno de vista previa:

  1. El contenedor de vista previa se detiene y se elimina
  2. La imagen Docker se elimina para liberar espacio en disco
  3. La ruta de Caddy se elimina
  4. El certificado SSL se limpia
  5. Los volúmenes específicos de la vista previa se eliminan (a menos que estén configurados para persistir)

También puedes destruir manualmente un entorno de vista previa desde el panel de control sin cerrar el PR. Esto es útil si una vista previa está consumiendo recursos y ya no se necesita para la revisión.

Warning
Los datos de los entornos de vista previa (bases de datos, archivos subidos) son efímeros por defecto. Si tus entornos de vista previa necesitan datos iniciales, usa un hook pre-despliegue para poblar la base de datos en cada despliegue.

Aislamiento de base de datos

Los entornos de vista previa se pueden configurar para usar bases de datos aisladas. sh0 admite dos estrategias:

  • Base de datos compartida: Los entornos de vista previa se conectan a la misma base de datos que staging o producción (se recomienda solo lectura). Configúralo mediante anulaciones de variables de entorno.
  • Base de datos aislada: sh0 levanta un contenedor de base de datos dedicado para cada vista previa. La base de datos se inicializa desde una instantánea o script de migración y se destruye con la vista previa.
Preview environment with isolated database
preview:
  enabled: true
  database_isolation: true
  seed_command: "pg_restore --dbname=$DATABASE_URL /seeds/staging.dump"
  max_concurrent: 5
  ttl: 72h
Tip
Para la mejor experiencia de revisión, combina entornos de vista previa con bases de datos aisladas y datos iniciales de tu entorno de staging. Esto brinda a los revisores una vista previa realista de cómo se comportarán los cambios en producción.