Documentação: Deploy de aplicação Next.js com GitHub + Hostinger
Todo push vira site no ar sem painel de hospedagem: ligar o GitHub à Hostinger, as configurações de build que quebram e as checagens após cada deploy.
- deploy
- github

Sumário
- 1. Visão geral: como funciona o fluxo
- 2. Pré-requisitos
- 3. Etapa 0 — Verificações iniciais (no terminal)
- 4. Etapa 1 — Preparação do projeto (no VS Code / terminal)
- 5. Etapa 2 — Criar o repositório (no site do GitHub)
- 6. Etapa 3 — Enviar o código para o GitHub (no terminal)
- 7. Etapa 4 — Deploy na Hostinger (no painel hPanel)
- 8. Etapa 5 — Sincronização automática e fluxo do dia a dia
- 9. Solução de problemas
- 10. Referência rápida
- 11. Glossário
1. Visão geral: como funciona o fluxo
O objetivo desta configuração é que toda alteração no código seja publicada no site automaticamente, sem upload manual de arquivos. O fluxo é este:
Seu computador (código) ──git push──> GitHub (guarda o código) ──deploy automático──> Hostinger (roda o site)- Você edita o código no seu computador (VS Code).
- Envia as mudanças para o GitHub com o comando
git push. - A Hostinger detecta o push sozinha, recompila o projeto e atualiza o site no ar (2 a 5 minutos).
Você nunca precisa tocar no painel da Hostinger para atualizar o site.
Onde cada coisa acontece
| Local | O que é | O que se faz lá |
|---|---|---|
| Terminal | Tela de comandos (abrir no VS Code com Ctrl + ') | Comandos Git: add, commit, push |
| Site do GitHub | github.com — repositório do código na nuvem | Criar repositório, conferir arquivos enviados |
| Painel da Hostinger | hpanel.hostinger.com | Configuração inicial do deploy (feita 1 única vez) |
2. Pré-requisitos
- Git instalado no computador. Verificar com
git --versionno terminal. Se não estiver instalado, baixar em https://git-scm.com/downloads. - Conta no GitHub (github.com).
- Plano Hostinger com suporte a Web Apps / Node.js. No nosso caso, o plano Cloud Startup, que inclui 10 Web Apps e suporta Next.js com Node.js 18.x, 20.x, 22.x e 24.x. Os planos compartilhados mais básicos não têm esse recurso.
- Projeto Next.js funcionando localmente (roda com
npm run dev).
3. Etapa 0 — Verificações iniciais (no terminal)
Feitas uma única vez, antes de tudo.
3.1 Verificar se o Git está instalado
git --version- Resposta esperada: algo como
git version 2.43.0. - Se aparecer "git não é reconhecido": instalar o Git e reabrir o VS Code.
3.2 Verificar se o projeto já tem Git inicializado
git status- Apareceu uma lista de arquivos (ou "nothing to commit") → o Git já existe na pasta. Não rodar
git init. - Apareceu
fatal: not a git repository→ rodargit initna Etapa 5.
Como saber se o projeto foi criado com create-next-app: abrir o package.json e verificar se existe "next" dentro de "dependencies". Outro sinal: o .gitignore padrão do create-next-app (com seções # next.js, # vercel etc.).
3.3 Identificar-se para o Git (feito 1 vez por computador)
O Git carimba cada alteração com nome e e-mail:
git config --global user.name "Seu Nome"
git config --global user.email "seuemail@exemplo.com"Usar o mesmo e-mail da conta do GitHub. Nenhuma mensagem de confirmação aparece; se não deu erro, funcionou.
4. Etapa 1 — Preparação do projeto (no VS Code / terminal)
4.1 O arquivo .gitignore
O .gitignore é uma lista de arquivos que NÃO devem ir para o GitHub. Ele existe por dois motivos:
- Segurança: arquivos
.envguardam senhas e chaves secretas. Não podem ficar expostos no repositório. - Tamanho/necessidade: pastas como
node_modules(bibliotecas) e.next(resultado do build) são geradas automaticamente. A Hostinger recria as duas sozinha no servidor.
O create-next-app já gera o arquivo pronto. Conteúdo mínimo necessário:
# dependencies
/node_modules
# next.js
/.next/
/out/
# production
/build
# env files
.env*
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# misc
.DS_Store
*.pem
.vercel
*.tsbuildinfo
next-env.d.tsObservação: a linha .env* bloqueia qualquer arquivo que comece com .env, inclusive um eventual .env.example. Se um dia o time quiser versionar um arquivo modelo (sem senhas reais), basta adicionar !.env.example ao .gitignore (o ! significa "exceto este").
4.2 Conferir o package.json
A Hostinger usa os scripts do package.json para instalar, compilar e ligar o site. Confirmar que existem:
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
}Também garantir que next, react e react-dom estão em dependencies (não em devDependencies).
4.3 Testar o build de produção localmente
npm run buildEste comando compila o projeto do mesmo jeito que a Hostinger vai compilar. Se falhar localmente, vai falhar no deploy. O modo npm run dev tolera erros (tipos, ESLint, páginas dinâmicas) que o build de produção não perdoa. Corrigir qualquer erro antes de prosseguir.
5. Etapa 2 — Criar o repositório (no site do GitHub)
Um repositório é a "pasta do projeto na nuvem", com histórico de todas as mudanças.
- Acessar https://github.com e fazer login.
- Clicar no
+no canto superior direito → New repository. - Preencher: - Repository name: nome sem espaços e sem acentos (no nosso caso,
zumkai). - Visibilidade: Private 🔒 (só você vê o código; a Hostinger acessa mesmo assim, porque será autorizada depois). - NÃO marcar nada em "Initialize this repository with" (nem README, nem .gitignore, nem license). Motivo: o projeto já existe no computador; se o GitHub criar arquivos por conta própria, o primeiro push dá conflito de "histórias diferentes". - Clicar em Create repository.
- Na página "Quick setup" que abre, copiar a URL do repositório (deixar a opção HTTPS selecionada):
https://github.com/sergioarantes/zumkai.git6. Etapa 3 — Enviar o código para o GitHub (no terminal)
Comandos executados um por vez, com Enter após cada um.
6.1 git init (somente se necessário)
git initTransforma a pasta em um projeto Git. Pular se o git status da Etapa 0 já funcionava (nosso caso).
6.2 Preparar todos os arquivos
git add .Tradução: "Git, prepare TODOS os arquivos da pasta para serem salvos" (o ponto significa "tudo"). Os arquivos listados no .gitignore são ignorados automaticamente. Este comando não mostra resposta — silêncio é sucesso.
6.3 Salvar uma "foto" do projeto
git commit -m "Primeira versao do projeto"Salva o estado atual do projeto com a descrição entre aspas. Cada commit é um ponto na história ao qual se pode voltar. A resposta mostra um resumo, tipo 5 files changed, 28 insertions(+).
6.4 Renomear a branch principal para main
git branch -M mainO padrão atual do GitHub é main; projetos antigos usam master. Rodar mesmo que já se chame main (não faz mal).
6.5 Conectar a pasta ao repositório do GitHub
Primeiro, verificar se já existe conexão:
git remote -v- Nada aparece → conectar com a URL copiada na Etapa 2:
git remote add origin https://github.com/sergioarantes/zumkai.git- Já aparece uma URL errada → corrigir com:
git remote set-url origin https://github.com/sergioarantes/zumkai.gitTradução: "o endereço remoto deste projeto, apelidado de origin, é este".
6.6 Enviar de verdade (primeiro push)
git push -u origin main- Na primeira vez, abre uma janela/navegador pedindo login no GitHub → clicar em Sign in with your browser e autorizar. Nas próximas vezes não pede mais.
- O
-u origin mainsó é necessário no primeiro push; depois, bastagit push.
Saída de sucesso (exemplo real do nosso deploy):
Writing objects: 100% (845/845), 4.52 MiB | 3.01 MiB/s, done.
To https://github.com/sergioarantes/zumkai.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.6.7 Conferir no site do GitHub
Abrir a página do repositório e apertar F5. Verificar:
- ✅ Os arquivos do projeto aparecem
- ✅
node_modules/NÃO está lá - ✅
.next/NÃO está lá - ✅ Nenhum arquivo
.envestá lá - ✅
.claude/settings.local.jsonNÃO está lá
7. Etapa 4 — Deploy na Hostinger (no painel hPanel)
Configuração feita uma única vez.
7.1 Iniciar o deploy
- Acessar https://hpanel.hostinger.com e fazer login.
- Menu lateral → Websites → botão + Add Website.
- Escolher Deploy Web App ("Deploy your app from GitHub or upload files").
7.2 Conectar o GitHub
- Escolher a opção de importar via GitHub (não "upload files").
- O GitHub abre pedindo autorização → clicar em Authorize. - Se perguntar entre "All repositories" e "Only select repositories", escolher Only select repositories e marcar apenas o repositório do projeto (mais seguro).
- De volta à Hostinger, selecionar o repositório (zumkai) e a branch (main).
7.3 Revisar as configurações de build
A Hostinger detecta o framework automaticamente. Configuração usada no nosso deploy:
| Campo | Valor | Observação |
|---|---|---|
| Framework preset | Next.js | Detectado automaticamente |
| Branch | main | Branch que dispara o deploy |
| Node version | 22.x | Versão LTS, compatível com Next.js |
| Root directory | ./ | Porque o package.json está na raiz do repositório |
| Build and output settings | Default for Next.js | Não alterar. O padrão executa npm ci + npm run build + npm start |
7.4 Variáveis de ambiente
- Se o projeto NÃO tem arquivo
.env(nosso caso) → não preencher nada nesta seção. - Se o projeto TEM
.envcom conteúdo → cadastrar cada linha na seção Environment variables (Add): o que vem antes do=é o Name, o que vem depois é o Value. Necessário porque o.gitignoreimpede (de propósito) que o.envvá para o GitHub, então a Hostinger não conhece esses valores. - Atenção: variáveis
NEXT_PUBLIC_*são embutidas no momento do build. Se alterar alguma no painel, é preciso disparar um novo deploy para valer.
7.5 Executar o deploy
- Clicar no botão Deploy →.
- Acompanhar o log (instalação → build → start). Leva de 2 a 5 minutos. Não fechar a página.
- Ao final, aparece "Deployment completed!" com um preview do site no ar.
- O domínio (zumkai.com) já fica apontado para a aplicação.
8. Etapa 5 — Sincronização automática e fluxo do dia a dia
A partir daqui, todo push na branch main atualiza o site automaticamente. A Hostinger detecta, recompila e publica sozinha.
8.1 Os 3 comandos para toda atualização
git add .
git commit -m "descreva aqui o que mudou"
git push| Comando | O que faz | Resposta esperada |
|---|---|---|
git add . | Junta todas as alterações (modificados, novos, excluídos) | Nada (silêncio = sucesso) |
git commit -m "..." | Salva com uma descrição. Trocar o texto a cada vez, descrevendo a mudança real | Resumo: X files changed... |
git push | Envia ao GitHub → Hostinger atualiza o site em 2–5 min | Várias linhas terminando em main -> main |
Versão em uma linha só (o && só executa o próximo se o anterior deu certo):
git add . && git commit -m "descreva aqui o que mudou" && git push8.2 Rotina recomendada antes de cada push
npm run dev→ testar a mudança no navegador local.npm run build→ confirmar que compila sem erro (o que falha aqui, falha no deploy).git status→ conferir o que vai ser enviado. Ogit add .leva tudo que estiver alterado na pasta, não só o último arquivo mexido.git add .→git commit -m "..."→git push.
8.3 Como acompanhar um deploy
No hPanel → dashboard do Web App → área Deployments: mostra cada deploy com status (In progress / Completed / Failed), branch, commit e data. Clicar em um deploy abre o log completo.
8.4 Como conferir se o site atualizou
Abrir o site e recarregar ignorando o cache: Ctrl + Shift + R. Para um teste 100% limpo, usar uma janela anônima (Ctrl + Shift + N).
9. Solução de problemas
Deploy falhou na Hostinger (status "Failed")
Abrir o log do deploy na área Deployments. Causas mais comuns:
- Erro de build → reproduzir localmente com
npm run builde corrigir. É a causa nº 1. - Variável de ambiente faltando → cadastrar no painel e redeployar.
- Dependência em
devDependenciesque deveria estar emdependenciesnopackage.json(o build de produção não instala devDependencies).
Site não atualizou depois do push
- Conferir no GitHub se o commit chegou (a página do repositório mostra "X minutes ago").
- Conferir a área Deployments no hPanel (o deploy pode estar em andamento ou ter falhado).
- Recarregar com
Ctrl + Shift + R(cache do navegador é causa frequente de "não mudou nada"). - Se o site atualizou mas ficou sem estilo/quebrado, ver o caso da CDN logo abaixo.
Site aparece "quebrado" / sem estilo após um deploy (⚠️ caso real que aconteceu neste projeto)
Sintoma: logo após um push/deploy, o site carrega só o conteúdo "pelado" — textos e links aparecem, mas sem cores, fontes ou layout. O Ctrl + Shift + R não resolve.
Causa: descasamento de versões causado pelo cache da CDN da Hostinger. Funciona assim: a cada build, o Next.js gera os arquivos de CSS e JS com nomes únicos (ex.: 3z2vuf_k-6jbb.css) que mudam a cada compilação. A CDN (rede que guarda cópias do site para entregá-lo mais rápido) pode continuar servindo o HTML da versão antiga, que pede arquivos com nomes antigos — e esses arquivos já não existem no servidor. Resultado: erros 404 e site sem estilo. O Ctrl + Shift + R não resolve porque ele limpa o cache do navegador, não o cache do servidor/CDN.
Como confirmar o diagnóstico (2 minutos):
- Abrir o site no Chrome e apertar F12 (ferramentas de desenvolvedor).
- Ir na aba Console (ou Network/Rede e recarregar com
Ctrl + R). - Se aparecerem erros como este, é exatamente esse problema:
GET https://seusite.com/_next/static/chunks/xxxxx.css 404 (Not Found)
GET https://seusite.com/_next/static/chunks/xxxxx.js 404 (Not Found)Vale conferir também o log do deploy em Deployments: neste cenário ele aparece Completed, com Compiled successfully — ou seja, o código está saudável; o problema é só de cache.
Solução (na ordem):
- Redeploy: no painel do Web App, clicar no botão Redeploy e aguardar concluir. Isso republica HTML e arquivos estáticos da mesma versão.
- Limpar o cache da CDN: no hPanel, ir em Websites → [seu site] → Performance → CDN e clicar em Flush cache.
- Aguardar 1 a 2 minutos e testar em janela anônima (
Ctrl + Shift + N), que garante zero interferência do cache do navegador.
Observações sobre a tela da CDN: o botão Development mode desliga temporariamente o cache da CDN por algumas horas (útil em períodos de muitos testes seguidos); Disable desativa a CDN de vez (não recomendado, pois ela acelera o site). O aviso amarelo no Console sobre "resource was preloaded using link preload" é inofensivo e desaparece junto quando os 404 são resolvidos.
Vulnerabilidades detectadas pela Hostinger (⚠️ caso real que aconteceu neste projeto)
Sintoma: o painel Websites → [site] → Security → Vulnerabilities mostra vulnerabilidades com aviso "Requires manual patching", listando pacotes (ex.: postcss, sharp), severidade e a versão corrigida.
O que significa: não é invasão nem erro no seu código. São falhas descobertas em bibliotecas de terceiros que o projeto usa. As correções já existem em versões mais novas; "manual patching" significa apenas "atualize as versões no seu projeto". A correção é feita no terminal, e o deploy automático leva a correção ao servidor.
Passo a passo da correção:
- Garantir que está tudo commitado (
git status), para poder voltar atrás com facilidade se algo der errado. - Ver as vulnerabilidades localmente:
npm auditÉ a mesma base de dados que a Hostinger usa. Anote os pacotes e as versões-alvo.
- Tentar a correção automática segura:
npm audit fixSe o npm audit zerar depois disso, pular para o passo 6.
- Descobrir se o pacote vulnerável é dependência direta ou "de carona":
npm ls nome-do-pacoteO comando mostra a árvore. Caso real deste projeto: postcss@8.4.31 e sharp@0.34.5 apareciam dentro de next@16.2.11 — ou seja, não eram dependências diretas, vieram de carona com o Next.
- Atualizar do jeito certo, conforme o caso:
- Dependência direta (aparece no
package.json) → atualizar direto:
npm install nome-do-pacote@^versao-corrigida- Dependência "de carona" (não aparece no
package.json) → adicionar um blocooverridesnopackage.json, no mesmo nível dedependencies(nunca dentro), e rodarnpm install. Exemplo real usado neste projeto:
"overrides": {
"postcss": "^8.5.12",
"sharp": "^0.35.0"
}O overrides significa: "não importa quem pediu essas bibliotecas — nem mesmo o Next — use no mínimo essas versões".
- Verificar se aplicou:
npm ls nome-do-pacote # deve mostrar a versão nova (pode aparecer "overridden"/"deduped")
npm audit # esperado: found 0 vulnerabilities- Testar antes de subir (não pular):
npm run buildPacotes como postcss (CSS) e sharp (imagens) mexem com a parte visual — vale também rodar npm run dev e conferir o site localmente.
- Subir a correção:
git add .
git commit -m "Corrige vulnerabilidades de dependencias"
git pushO commit deve mostrar 2 files changed (package.json + package-lock.json). Se mostrar "nothing to commit", a atualização não aconteceu de fato — voltar ao passo 5.
- Conferir no painel: o scan de Security → Vulnerabilities não é instantâneo; pode levar algumas horas para zerar. A confirmação técnica imediata é o
found 0 vulnerabilitiesdonpm audit.
Rotina preventiva: rodar npm audit de tempos em tempos e acompanhar os alertas do painel da Hostinger ou do Dependabot no GitHub (mesma base). Vulnerabilidades novas em dependências são rotina em qualquer projeto, não sinal de erro de quem desenvolveu.
git push pede senha e recusa
O GitHub não aceita senha comum no terminal. Soluções:
- Usar o login pelo navegador quando a janela abrir (recomendado); ou
- Criar um token em GitHub → Settings → Developer settings → Personal access tokens e usá-lo no lugar da senha.
remote origin already exists ao rodar git remote add
Já existe uma conexão. Corrigir a URL com:
git remote set-url origin https://github.com/usuario/repositorio.gitAvisos "LF will be replaced by CRLF"
Não é erro. Normalização de fim de linha entre Windows e Linux/Mac. Ignorar.
Um arquivo que não deveria foi para o GitHub
- Adicionar o caminho dele ao
.gitignore. - Removê-lo do controle do Git (sem apagar do computador):
git rm --cached caminho/do/arquivo- Commitar e dar push.
10. Referência rápida
Comandos usados uma única vez (configuração)
git --version # verificar instalação do Git
git config --global user.name "Seu Nome"
git config --global user.email "email@exemplo.com"
git init # só se git status der "not a git repository"
git branch -M main # renomear branch para main
git remote add origin URL # conectar ao repositório do GitHub
git push -u origin main # primeiro envioComandos do dia a dia (toda atualização)
git add .
git commit -m "descricao da mudanca"
git pushComandos de consulta (não alteram nada)
git status # o que está modificado / pendente
git remote -v # a qual repositório a pasta está conectada
git log --oneline # histórico de commits resumido
npm audit # vulnerabilidades nas dependências do projeto
npm ls pacote # onde/qual versão de um pacote está instalada11. Glossário
| Termo | Significado |
|---|---|
| Terminal | Tela de comandos. No VS Code: Ctrl + ' ou menu Terminal → New Terminal |
| Git | Programa que controla versões do código no seu computador |
| GitHub | Site que hospeda repositórios Git na nuvem |
| Repositório | A "pasta do projeto na nuvem", com todo o histórico |
| Commit | Uma "foto" salva do projeto em um momento, com descrição |
| Branch | Uma linha de desenvolvimento. A principal se chama main |
| Push | Enviar commits do computador para o GitHub |
| Origin | Apelido padrão da conexão com o repositório remoto |
| Deploy | Processo de publicar a aplicação no servidor |
| Build | Compilação do projeto para a versão otimizada de produção |
.gitignore | Lista de arquivos que o Git deve ignorar (nunca enviar) |
| Variável de ambiente | Valor de configuração (ex.: senha de banco) definido fora do código |
| CI/CD | Nome técnico do que montamos: integração e entrega contínuas |
Documentação gerada a partir do processo real de configuração do projeto zumkai, em 23/07/2026.
Leia também
Motion •
View Transitions no Next.js 16: as três camadas
Uma é Baseline, outra não roda no Firefox e a terceira é experimental no React. Saber qual você está usando decide o que vai para produção.
- next.js
- react
Next.js •
Next.js 16: o que quebra na migração
São 21 mudanças que quebram e o codemod oficial cobre cinco. O resto derruba o build sem aviso — incluindo uma que atinge quem usa scroll suave.
- next.js
- migração
Motions premium em Next.js: os 18 padrões do site da Plantica, passo a passo
O scroll vira CSS custom property e o CSS faz o resto: os 18 padrões de motion do site da Plantica em Next.js, com o prompt de implementação pronto de cada um.
- motion
- gsap


