Esta configuração permite desenvolver e testar o site Jekyll sem instalar Ruby localmente.
# Build da imagem Docker
docker-compose build
# Iniciar servidor de desenvolvimento
docker-compose up jekyll
# Acessar: http://localhost:4000# Servidor com hot-reload e livereload (recomendado)
docker-compose down # Parar containers anteriores
docker-compose up jekyll
# Acesse: http://localhost:4000
# Alterações no código recarregam automaticamente no navegadorNota sobre configuração:
- O serviço
jekyllusa_config.yml,_config.dev.yml _config.dev.ymlsobrescreveurlparahttp://localhost:4000ebaseurlpara vazio- Isso evita redirects absolutos e mantém links relativos funcionais localmente
- A produção continua usando
url: https://pivotphp.github.ioebaseurl: /website
# Build de produção
docker-compose run --rm jekyll-build
# Testar build de produção localmente
docker-compose up jekyll-production
# Script completo de validação
./validate-site.shmake docker-serve # Desenvolvimento
make docker-build # Build produção
make docker-prod # Testar produção
make docker-validate # Validar tudo
make docker-clean # Limpar cacheBaseado em ruby:3.1-slim com:
- Build essentials
- Git
- Bundler 2.4.22
- Todas as gems do Gemfile
Três serviços configurados:
- jekyll: Desenvolvimento com hot-reload
- jekyll-build: Build de produção
- jekyll-production: Servidor de produção para testes
volumes:
bundle_cache: # Cache de gems entre rebuildsO script validate-site.sh verifica:
- ✅ Build sem erros
- ✅ Redirects configurados (~27 esperados)
- ✅ Estrutura PT-BR presente
- ✅ Links internos funcionando
# Executar validação completa
./validate-site.sh
# Verificar manualmente
docker-compose run --rm jekyll-build
ls -la _site/pt/docs/
find _site -name "*.html" -path "*docs*" | wc -lDNS para baixar imagens base não pode ser configurado via Dockerfile. Ele é responsabilidade do daemon do Docker no host.
Use o script de configuração:
cd website/
sudo ./setup-docker-dns.sh
# Opcional: definir servidores DNS
sudo DNS_LIST="1.1.1.1,8.8.8.8" ./setup-docker-dns.sh
# Depois, re-tente o build
docker-compose buildSe preferir, configure manualmente em /etc/docker/daemon.json:
{
"dns": ["8.8.8.8", "8.8.4.4"]
}Reinicie o serviço:
sudo systemctl restart docker || sudo service docker restart# Cache das gems está funcionando?
docker volume ls | grep bundle_cache
# Reconstruir do zero se necessário
docker-compose build --no-cache# Ajustar permissões do _site
sudo chown -R $USER:$USER _site .jekyll-cache# Verificar processos
lsof -i :4000
# Ou usar porta diferente
docker-compose run --rm -p 4001:4000 jekyllSe houver erro ao baixar imagens Docker:
# Verificar conectividade
ping docker.io
# Verificar DNS
cat /etc/resolv.conf
# Reconstruir com cache local
docker-compose buildInstaladas automaticamente via Gemfile:
- github-pages (~228): Inclui Jekyll + plugins permitidos
- jekyll-redirect-from: Para redirects 301
- webrick (~1.7): Servidor web para Ruby 3+
- faraday-retry: Compatibilidade Faraday v2.0+
# 1. Iniciar container
docker-compose up jekyll
# 2. Editar arquivos normalmente
# 3. Ver mudanças em tempo real
# 4. Ctrl+C para parar# 1. Validar antes de commit
./validate-site.sh
# 2. Verificar build de produção
docker-compose run --rm jekyll-build
# 3. Commit e push
git add .
git commit -m "Atualizar documentação"
git push origin main
# 4. GitHub Pages faz deploy automático# Desenvolvimento
JEKYLL_ENV=development
- Drafts habilitados
- Source maps CSS
- Mensagens debug
# Produção
JEKYLL_ENV=production
- Assets minificados
- URLs absolutas
- Otimizações ativas- Volume Persistente: Gems ficam em cache entre builds
- Hot Reload: Mudanças aparecem automaticamente no browser
- Force Polling: Necessário para sistemas de arquivos virtualizados
- Incremental Build: Rebuild apenas arquivos modificados