Documentação / Primeiros Passos / Sua Primeira Implantação

Sua Primeira Implantação

Coloque o seu próprio código no ar a partir de um diretório da sua máquina, sem repositório Git. Cada comando abaixo foi executado num servidor sh0, com a saída real.

Visão Geral

O sh0 faz o deploy de uma aplicação a partir de quatro origens. Este guia segue a primeira, que serve para a maioria dos projetos:

  • Um diretório da sua máquina, enviado por sh0 push como arquivo compactado -- o seu código, com um Dockerfile ou uma stack detectada (Node.js, Python, Go, Rust, PHP…).
  • Um arquivo ZIP enviado pelo painel.
  • Um repositório Git, público ou privado, clonado pelo servidor.
  • Um modelo do catálogo (bancos de dados, CMS, ferramentas).

Etapa 1: preparar o diretório

Um Dockerfile na raiz dá controle total sobre a imagem. Sem ele, o sh0 detecta a stack pelos arquivos do projeto. A aplicação precisa escutar numa porta, aqui a 3000:

Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY server.js .
EXPOSE 3000
CMD ["node","server.js"]

sh0 check pontua o diretório antes de qualquer envio e aponta o que corrigir. sh0 push faz a mesma verificação e para diante de um problema bloqueante (exceto com --no-check); avisos não o interrompem:

Terminal
$ sh0 check .
  Scanning /home/you/my-api
  Detected:  Dockerfile

  Health Score: 95/100
  Complexity:   2 (Simple)

  [~] Warnings (1):
      - Missing .dockerignore
        Fix: Create a .dockerignore file with: node_modules, .git, dist, .env

  1 issue(s): 0 blocking, 1 warnings, 0 auto-fix, 0 info

Etapa 2: conectar a CLI

Instale a CLI na sua máquina (veja Instalação da CLI) e execute sh0 login --url https://panel.example.com com o endereço do seu painel. Ela pede o seu e-mail e a sua senha (e o código 2FA, se ativado) e grava uma chave de API em ~/.sh0/config.toml.

Verifique a conexão:

Terminal
$ sh0 whoami
  Server:  https://panel.example.com
  User:    [email protected]
  Role:    owner

Etapa 3: enviar

A partir do diretório do projeto:

Terminal
$ sh0 push -n my-api --port 3000
  Deploying my-api
  Detected dockerfile -- 95/100 health
  2 files (0.0 MB) packaged
  Uploading OK 5ms
  Routing OK 10.0s

[ok] Live in 10.0s
  -> https://my-api-<instance>.sh0.app
  • -n dá nome à aplicação; sem ele, usa-se o nome do diretório. O mesmo nome depois atualiza a mesma aplicação.
  • --port é a porta em que a sua aplicação escuta dentro do contêiner.
  • Um arquivo compactado é limitado a 500 MB. Adicione um .dockerignore para excluir node_modules, .git e os artefatos de build; veja Deploy com push para os outros limites.

Etapa 4: verificar

A última linha de sh0 push é o endereço da aplicação. Num servidor ligado ao proxy em nuvem do sh0, é um subdomínio *.sh0.app com HTTPS; para o seu próprio domínio, veja a etapa 6.

Terminal
$ sh0 status my-api
  App: my-api
  ------------------------------
  ID:         85aab295-4166-470a-9538-807b46e8bec3
  Status:     running
  ...
  Latest Deployment
  ------------------------------
  ID:         551c1602-5a46-49eb-93df-70ee831cfea3
  Status:     running
  Duration:   37.9s
  When:       39s ago

$ curl -s https://my-api-<instance>.sh0.app/
{"db":true,"version":2,"greeting":"salut"}

Se a aplicação não responder, leia os logs com sh0 logs my-api --tail 100, ou abra a aplicação no painel e veja o log de build do deploy.

Etapa 5: atualizar

Altere o código e execute de novo o mesmo sh0 push -n my-api --port 3000: o sh0 constrói uma imagem nova e substitui o contêiner em execução quando o novo estiver pronto. A atualização acima levou 38 segundos, e a aplicação respondeu com a nova versão.

Etapa 6: o seu próprio domínio

Aponte um registro A do seu domínio para o endereço IP do servidor e adicione-o à aplicação, pela aba Domínios da aplicação ou com sh0 domains my-api add api.example.com. O sh0 solicita o certificado TLS ao Let's Encrypt. Detalhes em Domínios personalizados.

Warning
Adicione o domínio depois que o registro DNS já apontar para o servidor. Antes disso, a solicitação do certificado falha, e o Let's Encrypt limita falhas repetidas.

Pelo painel

Abra Implantar na barra lateral e escolha uma origem:

  • Enviar arquivo -- um arquivo ZIP do seu projeto.
  • URL Git ou GitHub -- um repositório e um branch.
  • Modelo -- uma aplicação do catálogo.
Note
Para um repositório privado, informe um token de acesso no campo correspondente, ou use uma chave SSH adicionada ao servidor; veja Deploy pelo Git.

Próximos Passos

A sua aplicação está no ar. Próximos passos: