🚀 GitHub Pages: publicar de graça
Coloque seu projeto no ar em minutos — gratuito, com HTTPS automático e CDN global. Ative Pages, configure o domínio, entenda cache e confirme que está no ar.
🌐 O que é GitHub Pages
Hospedagem gratuita de sites estáticos direto do seu repositório
🎯 GitHub Pages em 30 segundos
Você tem arquivos HTML/CSS/JS no GitHub. Pages os serve como site público com URL própria, HTTPS automático e CDN global — sem pagar nada, sem configurar servidor.
Push → build automático → CDN → site no ar. Processo todo gerenciado pelo GitHub.
✓ O que Pages inclui (grátis)
- ✓HTTPS automático (Let's Encrypt)
- ✓CDN global (Fastly)
- ✓URL usuario.github.io/repo
- ✓Deploys automáticos a cada push
✗ O que Pages NÃO faz
- ✗Backend/servidor (apenas estático)
- ✗Banco de dados
- ✗Node.js, PHP, Python em execução
- ✗Repos privados (plano gratuito)
⚙️ Ativar Pages
Branch/pasta ou GitHub Actions — 3 caminhos, 1 resultado
Via interface web (mais fácil)
- Abra o repositório no GitHub
- Vá em Settings → Pages
- Em "Source", selecione a branch (main) e pasta (/ ou /docs)
- Clique Save — aguarde 1-5 minutos
Via gh CLI (rápido e automático)
# Ativar Pages na branch main, pasta raiz
$ gh api repos/:owner/:repo/pages \
-X POST \
-f source='{"branch":"main","path":"/"}'
# Verificar status
$ gh api repos/:owner/:repo/pages | jq '.status, .html_url'
Branch gh-pages dedicada
# Criar e fazer push para branch gh-pages
$ git checkout --orphan gh-pages
$ git rm -rf . # limpa a branch
$ cp -r dist/* . # copia os arquivos de build
$ git add . && git commit -m "deploy: v1.0"
$ git push -u origin gh-pages
💡 Qual método usar?
Para projetos simples (HTML/CSS puro): branch main + pasta /. Para projetos com build (React, Vue, etc.): GitHub Actions faz o build e publica automaticamente. A pasta /docs é útil quando código e docs ficam no mesmo repo.
🔗 URL usuario.github.io
Endereço padrão — compartilhe em currículos e portfolios
📁 Project site (mais comum)
Repo: usuario/meu-projeto
URL: usuario.github.io/meu-projeto/
Precisa de index.html na raiz da branch/pasta configurada.
👤 User site (portfólio pessoal)
Repo: usuario/usuario.github.io
URL: usuario.github.io
Apenas 1 por conta. Serve da branch main automaticamente.
# Ver a URL do Pages do repo atual
$ gh api repos/:owner/:repo/pages --jq '.html_url'
# Abrir no browser diretamente
$ gh browse # abre o repositório
$ gh browse --settings # vai para Settings
# Testar com curl (headless)
$ curl -I https://usuario.github.io/meu-projeto/
# Deve retornar: HTTP/2 200
🌍 Domínio customizado e CNAME
meusite.com em vez de usuario.github.io — profissionalismo com ~R$50/ano
Criar arquivo CNAME no repo
# Na raiz do branch de Pages:
$ echo "meusite.com" > CNAME
$ git add CNAME && git commit -m "chore: adiciona domínio customizado"
$ git push
Configurar DNS no registrar
Para www (subdomínio):
Tipo: CNAME
Nome: www
Valor: usuario.github.io
Para apex domain (raiz):
Tipo: A | Nome: @ | Valor: 185.199.108.153
Tipo: A | Nome: @ | Valor: 185.199.109.153
Tipo: A | Nome: @ | Valor: 185.199.110.153
Tipo: A | Nome: @ | Valor: 185.199.111.153
Ativar HTTPS e verificar
Em Settings → Pages, configure o domínio e marque "Enforce HTTPS". Aguarde propagação DNS (até 48h).
# Testar propagação DNS
$ dig www.meusite.com CNAME
$ nslookup meusite.com
⏱️ Cache e atualização
Por que o site não atualizou? Entenda e resolva em segundos
🤔 "Fiz push mas o site não mudou!"
Isso acontece por cache em duas camadas: (1) o deploy do GitHub Pages leva 1-10 minutos; (2) seu browser cacheia os arquivos. Aguarde o build completar e faça hard refresh.
✓ Como verificar o build
- ✓Aba Actions no GitHub: status do workflow "pages build"
- ✓
gh run list --workflow pagesno terminal - ✓
gh run watchmonitora em tempo real - ✓Settings → Pages mostra "Your site is live at..."
🛠️ Forçar atualização no browser
- →Windows/Linux:
Ctrl+Shift+R - →macOS:
Cmd+Shift+R - →DevTools → Network → Disable cache (enquanto aberto)
- →Adicionar
?v=2na URL para testar
# Ver último run do Pages
$ gh run list --limit 3
STATUS TITLE WORKFLOW ID
✓ pages build and deployment pages 123456789
✓ pages build and deployment pages 123456788
# Assistir deploy em curso
$ gh run watch
Refreshing run status every 3 seconds. Press Ctrl+C to quit.
✓ build (3s)
✓ deploy (8s)
✓ Run pages build and deployment completed with 'success'
✅ Verificar que está no ar
Confirmar o deploy com comandos reais — sem suposições
# 1. Confirmar que Pages está ativo
$ gh api repos/:owner/:repo/pages --jq '{status:.status, url:.html_url}'
{"status":"built","url":"https://usuario.github.io/repo/"}
# 2. Testar HTTP status
$ curl -s -o /dev/null -w "%{http_code}" https://usuario.github.io/repo/
200
# 3. Verificar HTTPS redirect
$ curl -I http://usuario.github.io/repo/
HTTP/1.1 301 Moved Permanently
Location: https://usuario.github.io/repo/
# 4. Verificar conteúdo correto
$ curl -s https://usuario.github.io/repo/ | grep ""
<title>Meu Projeto</title>
📊 Monitoramento contínuo
Para projetos em produção, configure o UptimeRobot (gratuito) para pingar o site a cada 5 minutos e te avisar por email se cair. Também adicione o badge de status ao README: 
✓ Deploy bem-sucedido
- ✓Actions mostra círculo verde
- ✓curl retorna HTTP 200
- ✓HTTPS ativo (cadeado no browser)
- ✓Conteúdo mais recente visível
✗ Deploy com problema
- ✗Actions mostra X vermelho → veja os logs
- ✗404 → verifique se index.html existe na pasta certa
- ✗Site antigo → hard refresh + aguardar CDN
- ✗HTTPS não disponível → aguarde provisionamento
🎯 Resumo do módulo
O que você aprendeu
- ✓GitHub Pages: hospedagem gratuita de sites estáticos
- ✓3 formas de ativar: branch, /docs, ou gh-pages
- ✓URL padrão usuario.github.io/repo
- ✓Domínio customizado com CNAME + DNS
- ✓Cache: aguardar build + hard refresh
- ✓Verificação completa com curl e gh CLI
Próximo módulo
Seu projeto está no ar — agora é hora de evoluir, versionar releases, construir portfólio e manter o projeto vivo ao longo do tempo. Fechamento do curso.
Módulo 6.4 — Evoluir e divulgar→