Docs/ CLI/ Deploy por push

Deploy por push

Faça deploy de um diretório local com sh0 push. Sem necessidade de repositório Git.

O que é Push Deploy

sh0 push pega um diretório local, detecta a stack (Node.js, Python, Go, Rust, etc.), empacota os arquivos, envia ao seu servidor, constrói um container e retorna uma URL online. Todo o fluxo acontece em um comando.

Esta é a forma mais rápida de ir do código a um deploy rodando. Sem configuração Git, sem configuração de repositório, sem integração de webhook — apenas push e pronto.

Uso Básico

Deploy current directory
sh0 push

Saída:

Output
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.app

Você também pode fazer push de um diretório específico ou personalizar o nome do app:

Custom options
sh0 push ~/projects/api --name my-api --port 3000

Como Funciona

O fluxo de push tem seis etapas:

  1. Resolver diretório — Padrão é o diretório atual. Verifica se o caminho existe.
  2. Verificar vínculo — Se .sh0/link.json existe, é um re-push para um app existente.
  3. Detectar stack — Identifica o framework e linguagem (mais de 20 stacks suportadas).
  4. Executar verificação de saúde — Pontua o projeto em boas práticas. Alerta sobre problemas bloqueantes.
  5. Empacotar e enviar — Cria um ZIP em memória, respeitando padrões de ignore. Envia via multipart form.
  6. Construir e fazer deploy — O servidor constrói um container, inicia-o e atribui um domínio. Logs de build são transmitidos em tempo real.

Opções

FlagPadrãoDescrição
[path].Diretório para enviar
--name <name>Nome do diretórioNome do app (minúsculas, alfanumérico, hífens)
--project <id>Projeto padrãoProjeto para fazer deploy
--port <port>AutodetectadaPorta da aplicação dentro do container
--no-checkfalsePular a verificação de saúde
--timeout <secs>600Segundos máximos para aguardar o deploy

.sh0ignore

Controle quais arquivos são excluídos do envio. Usa a mesma sintaxe do .gitignore. Se nenhum .sh0ignore existir, o CLI usa como fallback .dockerignore, depois .gitignore.

.sh0ignore
# Build artifacts
node_modules/
dist/
.next/

# Environment
.env
.env.*

# IDE
.vscode/
.idea/

Os seguintes diretórios são sempre excluídos, independente de arquivos de ignore:

  • .git/, node_modules/, __pycache__/, .env*
  • target/, .next/, .nuxt/, .svelte-kit/, dist/
  • venv/, .venv/, .sh0/, .DS_Store

Após o primeiro push, o CLI cria .sh0/link.json no diretório do seu projeto. Este arquivo vincula o diretório local ao app remoto para que pushes subsequentes atualizem o mesmo deploy.

.sh0/link.json
{
  "app_id": "a1b2c3d4",
  "app_name": "my-app",
  "server_url": "https://panel.example.com"
}
Tip
Adicione .sh0/ ao seu .gitignore. O arquivo de vínculo contém informações específicas do servidor e não deve ser compartilhado entre ambientes.

Verificações de Saúde

Antes de enviar, sh0 push executa a mesma Verificação de Saúde do Código disponível via sh0 check. Pontua seu projeto de 0 a 100 e alerta sobre problemas que podem causar falhas de build.

Pule a verificação de saúde com --no-check se souber o que está fazendo.

Comportamento de Re-push

Quando .sh0/link.json existe, executar sh0 push envia para o app existente em vez de criar um novo. O servidor cria um novo deploy, constrói o código atualizado e realiza uma troca blue-green se configurado.

Para fazer deploy como um novo app, use --name novo-nome-do-app ou exclua .sh0/link.json.

Auto-Push com sh0 watch

Para desenvolvimento, use sh0 watch para refazer push automaticamente em mudanças de arquivo:

Watch mode
sh0 watch --debounce 3000

Isso monitora o diretório atual e refaz push após 3 segundos de inatividade. Respeita padrões .sh0ignore e executa um push inicial ao iniciar. Veja a Referência de Comandos para todas as opções.

Integração CI/CD

Use sh0 push em pipelines CI/CD para projetos que não usam deploy baseado em Git. Aqui está um exemplo com GitHub Actions:

.github/workflows/deploy.yml
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