Despliegue por push
Despliega desde un directorio local con sh0 push. Sin repositorio Git requerido.
Qué es Push Deploy
sh0 push toma un directorio local, detecta el stack (Node.js, Python, Go, Rust, etc.), empaqueta los archivos, los sube a tu servidor, construye un contenedor y devuelve una URL en vivo. Todo el flujo ocurre en un comando.
Esta es la forma más rápida de ir del código a un despliegue en ejecución. Sin configuración Git, sin configuración de repositorio, sin integración de webhooks -- solo push y listo.
Uso básico
sh0 pushSalida:
Pushing my-app
Detected nodejs (Next.js) -- 85/100 health
Uploading 42 files (2.3 MB) ··· OK 0.8s
Building ··· OK 32.4s
Deploying ··· OK 2.1s
Live in 35.3s
-> https://my-app.sh0.appTambién puedes hacer push de un directorio específico o personalizar el nombre de la app:
sh0 push ~/projects/api --name my-api --port 3000Cómo funciona
El flujo de push tiene seis pasos:
- Resolver directorio -- Por defecto al directorio actual. Verifica que la ruta exista.
- Verificar vínculo -- Si
.sh0/link.jsonexiste, es un re-push a una app existente. - Detectar stack -- Identifica el framework y lenguaje (más de 20 stacks soportados).
- Ejecutar verificación de salud -- Puntúa el proyecto en mejores prácticas. Advierte sobre problemas bloqueantes.
- Empaquetar y subir -- Crea un ZIP en memoria, respetando patrones de exclusión. Sube vía formulario multipart.
- Construir y desplegar -- El servidor construye un contenedor, lo inicia y asigna un dominio. Los logs de build se transmiten en tiempo real.
Opciones
| Opción | Por defecto | Descripción |
|---|---|---|
| [path] | . | Directorio a subir |
| --name <name> | Nombre del directorio | Nombre de la app (minúsculas, alfanumérico, guiones) |
| --project <id> | Proyecto por defecto | Proyecto donde desplegar |
| --port <port> | Autodetectado | Puerto de la aplicación dentro del contenedor |
| --no-check | false | Omitir la verificación de salud |
| --timeout <secs> | 600 | Máximo de segundos a esperar para el despliegue |
.sh0ignore
Controla qué archivos se excluyen de la carga. Usa la misma sintaxis que .gitignore. Si no existe .sh0ignore, el CLI recurre a .dockerignore, luego .gitignore.
# Build artifacts
node_modules/
dist/
.next/
# Environment
.env
.env.*
# IDE
.vscode/
.idea/Los siguientes directorios se excluyen siempre, independientemente de los archivos de exclusión:
.git/,node_modules/,__pycache__/,.env*target/,.next/,.nuxt/,.svelte-kit/,dist/venv/,.venv/,.sh0/,.DS_Store
.sh0/link.json
Después del primer push, el CLI crea .sh0/link.json en tu directorio de proyecto. Este archivo vincula el directorio local a la app remota para que los pushes subsiguientes actualicen el mismo despliegue.
{
"app_id": "a1b2c3d4",
"app_name": "my-app",
"server_url": "https://panel.example.com"
}.sh0/ a tu .gitignore. El archivo de vínculo contiene información específica del servidor y no debe compartirse entre ambientes.Verificaciones de salud
Antes de subir, sh0 push ejecuta la misma verificación de salud del código disponible vía sh0 check. Puntúa tu proyecto de 0 a 100 y advierte sobre problemas que podrían causar fallos de build.
Omite la verificación de salud con --no-check si sabes lo que haces.
Comportamiento de re-push
Cuando .sh0/link.json existe, ejecutar sh0 push sube a la app existente en lugar de crear una nueva. El servidor crea un nuevo despliegue, construye el código actualizado y realiza un intercambio blue-green si está configurado.
Para desplegar como una nueva app, usa --name new-app-name o elimina .sh0/link.json.
Auto-Push con sh0 watch
Para desarrollo, usa sh0 watch para re-push automáticamente en cambios de archivos:
sh0 watch --debounce 3000Esto observa el directorio actual y re-push después de 3 segundos de inactividad. Respeta patrones .sh0ignore y ejecuta un push inicial al arrancar. Ver la Referencia de comandos para todas las opciones.
Integración CI/CD
Usa sh0 push en pipelines CI/CD para proyectos que no usan despliegue basado en Git. Aquí hay un ejemplo de GitHub Actions:
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install sh0
run: curl -fsSL https://get.sh0.dev | bash
- name: Deploy
env:
SH0_API_URL: ${{ secrets.SH0_API_URL }}
SH0_API_TOKEN: ${{ secrets.SH0_API_TOKEN }}
run: sh0 push --name my-app