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
sh0 pushSaída:
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.appVocê também pode fazer push de um diretório específico ou personalizar o nome do app:
sh0 push ~/projects/api --name my-api --port 3000Como Funciona
O fluxo de push tem seis etapas:
- Resolver diretório — Padrão é o diretório atual. Verifica se o caminho existe.
- Verificar vínculo — Se
.sh0/link.jsonexiste, é um re-push para um app existente. - Detectar stack — Identifica o framework e linguagem (mais de 20 stacks suportadas).
- Executar verificação de saúde — Pontua o projeto em boas práticas. Alerta sobre problemas bloqueantes.
- Empacotar e enviar — Cria um ZIP em memória, respeitando padrões de ignore. Envia via multipart form.
- 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
| Flag | Padrão | Descrição |
|---|---|---|
| [path] | . | Diretório para enviar |
| --name <name> | Nome do diretório | Nome do app (minúsculas, alfanumérico, hífens) |
| --project <id> | Projeto padrão | Projeto para fazer deploy |
| --port <port> | Autodetectada | Porta da aplicação dentro do container |
| --no-check | false | Pular a verificação de saúde |
| --timeout <secs> | 600 | Segundos 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.
# 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
.sh0/link.json
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.
{
"app_id": "a1b2c3d4",
"app_name": "my-app",
"server_url": "https://panel.example.com"
}.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:
sh0 watch --debounce 3000Isso 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:
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