# Implantações

> Entenda as implantações na W8 Hub: histórico e rollback de deploys, GitHub com deploy automático a cada push e os modos de build (Nixpacks, Dockerfile).

_Fonte: https://w8hub.com.br/docs/implantacoes_

Uma **implantação** (deploy) é uma versão da sua aplicação que a W8 Hub **construiu e publicou**. Nesta aba você acompanha o histórico dessas versões, conecta o **GitHub** para deploys automáticos a cada push e escolhe **como** a W8 Hub monta a imagem.

## Como funciona o deploy

Cada implantação gera uma nova versão da instalação. No painel você acompanha o histórico e abre o **detalhe de cada uma**, com os [logs](https://w8hub.com.br/docs/logs) de build e publicação.

- **Disparar deploy:** manualmente (botão *Novo Deploy*) ou a partir de um push no GitHub conectado.
- **Histórico:** veja todas as versões, com commit, status, autor e duração.
- **Voltar versão:** reimplante um deployment anterior quando precisar reverter uma mudança.

> A lista mostra só os commits que viraram implantação — não todo commit do repositório. Um commit só aparece aqui quando dispara um deploy. Se o deploy automático estiver ligado, cada push na branch conectada gera uma implantação; se estiver desligado, só aparecem os deploys que você disparar manualmente (ou ao reimplantar uma versão).

![Histórico de implantações de uma instalação na W8 Hub, com commit, status (sucesso/falhou), autor, duração e acesso aos logs.](https://w8hub.com.br/assets/docs-07-deploys.webp)

_Histórico de implantações — cada versão com commit, status, autor, duração e logs._

Clique em uma implantação para abrir o **detalhe**: ali ficam os **logs completos** de build e publicação, o commit, a duração e as ações de **reimplantar** ou **cancelar**.

![Detalhe de uma implantação na W8 Hub: logs completos de build e publicação em tempo real, commit, status, duração e ações de reimplantar e cancelar.](https://w8hub.com.br/assets/docs-52-deploy-modal.webp)

_Detalhe da implantação — logs completos de build e publicação, com commit, duração e ações._

## Conectar o GitHub

Conecte o GitHub à sua organização para fazer deploy de repositórios privados e sincronizar branches.

1. **Faça a integração do GitHub primeiro (obrigatório).** Conecte e autorize a conta/organização do GitHub nas [Integrações](https://w8hub.com.br/docs/integracoes) (via GitHub App). Sem essa integração, seus repositórios — sobretudo os privados — **não aparecem** na hora de criar a instalação.
2. **Escolha o repositório** e a **branch** — a W8 Hub lê a árvore de arquivos e as branches direto do GitHub. A **branch precisa já existir no repositório**; a plataforma não cria branches para você.
3. **Crie a instalação** a partir do repositório dentro de um projeto.
4. **Faça deploy** a partir de uma branch/commit; a cada push naquela branch, um novo deploy roda automaticamente.

> ⚠️ Pré-requisitos do GitHub: (1) integração do GitHub conectada e (2) a branch escolhida já existente no repositório. Faltando qualquer um, não dá para criar a instalação a partir do GitHub.

![Configuração do GitHub na W8 Hub: repositório privado ou público, conta do GitHub App, seleção de repositório e branch.](https://w8hub.com.br/assets/docs-17-github.webp)

_Conectar o GitHub — repositório privado (via GitHub App) ou público, com escolha de repositório e branch._

## Modos de build

Ao criar uma instalação a partir de um repositório, você escolhe o **Build Pack** (no passo *Configurar* do assistente de nova instalação) — é como a W8 Hub monta a imagem:

| Build Pack | Como funciona | Quando usar |
| --- | --- | --- |
| Nixpacks | Detecção automática de linguagem e framework — builda sem você escrever Dockerfile. | A maioria dos apps (Node, Python, Go, Ruby, PHP…). |
| Dockerfile | Usa o Dockerfile existente no repositório. | Quando você precisa de controle total do ambiente. |
| Static | Serve um site estático (HTML, CSS, JS). | Sites e landing pages já compilados. |
| Static SPA | Single Page Application, com fallback de rotas para o index. | React, Vue, Angular e afins. |

> O Build Pack (Nixpacks, Dockerfile, Static ou Static SPA) só aparece quando a origem da instalação é um repositório GitHub — é aí que a W8 Hub precisa montar a imagem. Em Imagem Docker a imagem já vem pronta (não há build) e em Template o build já vem configurado.

Ou seja: na maioria dos casos você **não precisa de Dockerfile** — o Nixpacks detecta e builda. O **Dockerfile** só é necessário quando você quer controle total do ambiente (e, novamente, apenas em instalações a partir do [GitHub](https://w8hub.com.br/docs/implantacoes#conectar-o-github)).

![Seleção do Build Pack na W8 Hub: Nixpacks, Dockerfile, Static ou Static SPA, com detecção automática de linguagem e framework.](https://w8hub.com.br/assets/docs-16-modos-build.webp)

_Build Pack — o Nixpacks detecta a stack e builda sem Dockerfile; ou use Dockerfile, Static ou Static SPA._

## Exemplos de Dockerfile por stack

Ao escolher o Build Pack **Dockerfile** (origem GitHub), a W8 Hub builda a imagem a partir do arquivo `Dockerfile` na raiz do repositório. Em todos os exemplos, garanta que o container **escute na mesma porta** configurada na instalação. Alguns modelos por linguagem:

#### Node.js / Next.js

```
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
```

#### Python (Django, Flask ou FastAPI)

```
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
# WSGI (Django/Flask): gunicorn app:app
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
```

#### PHP / WordPress

```
FROM php:8.2-apache
RUN docker-php-ext-install pdo pdo_mysql
COPY . /var/www/html/
EXPOSE 80
# Para WordPress, basta a imagem oficial:
# FROM wordpress:php8.2-apache
```

#### Go (build multi-stage)

```
FROM golang:1.22-alpine AS build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o /app/server .

FROM alpine:3.20
COPY --from=build /app/server /server
EXPOSE 8080
CMD ["/server"]
```

#### .NET

```
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app

FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app .
EXPOSE 8080
CMD ["dotnet", "MinhaApi.dll"]
```
