Hospedagem estática
Um site Chinaski construído é uma árvore simples de HTML/CSS/imagens preparada para servimento estático; o deployment típico, novamente, é um reverse proxy ou um host estático lendo essa saída. Esta página cobre o servimento com nginx ou Caddy, como funcionam os arquivos de redirecionamento (hospedagem estilo Netlify) e quais rotas um site “estático” ainda precisa encaminhar ao CMS.
A saída construída
Um diretório por idioma (ou uma raiz única para sites monolíngues):
index.htmlpor diretório, com semântica de try-files traduzindo URLs em caminhos._redirects: as regras de redirecionamento estilo Netlify que o builder gera a cada build (redirecionamentos de slug com seus códigos de status configurados)._redirects.caddy: um arquivo complementar com os mesmos redirecionamentos na sintaxe nativa do Caddy, pronto para incluir em um Caddyfile.- Arquivos de PWA (
sw.js, manifest, página offline) com suas próprias diretivas de cache. - Imposição completa de domínio canônico: um bloco gerado no
_redirectsque aplica 301 ao host alternativo www/nu para o que corresponde à sua URL de Site (veja a página de domínio canônico para a sintaxe exata).
As rotas que um site estático ainda precisa encaminhar
Duas famílias de URL não podem ser servidas estaticamente e precisam de reverse proxy para o daemon do CMS:
/forms/*: páginas públicas de formulários e os POSTs de submissão. Sem encaminhamento, cada envio de formulário retorna 404./documents/*: downloads de documentos (contagem de downloads, bloqueio por estado de publicação). Sem encaminhamento, cada URL de documento dá 404.
Ambos os exemplos embarcados fazem exatamente isso
O repositório traz vhosts prontos para copiar e editar:
- nginx (
deploy/chinaski.nginx.examplee seu irmão mais completo-conf.example): serve por document root, encaminha/forms/e/documents/para127.0.0.1:<porta do CMS>, define long-cache para fontes/assets, no-cache para o service worker, short-cache no HTML, além dos headers de segurança de nível de app como cinto-e-suspensório. TLS: rode o certbot contra o vhost habilitado. - Caddy (
deploy/chinaski.Caddyfile.example): um bloco por instância, proxy da porta do CMS no loopback, define X-Forwarded-For/Proto/Host explicitamente, adiciona políticas de cache espelhando as do nginx e roteia caminhos de honeypot de scanner (/.env, /.git/config, sondagens wp-login…) ao CMS para que sejam registrados e retidos (tarpit) em vez de respondidos pelo servidor web.
O proxy pelo loopback é deliberado: proxies conectando a partir de 127.0.0.1 são confiáveis por padrão, então nenhuma CHINASKI_TRUSTED_PROXIES extra é necessária. Se o seu proxy está a um salto de rede de contêiner de distância, adicione essa rede à CHINASKI_TRUSTED_PROXIES.
A sincronização da root do nginx no deploy.sh
A cada deploy o script sincroniza a document root do nginx com o modo de idioma atual: para output/ em sites monolíngues ou output/<idioma padrão> caso contrário, editando apenas configs que referenciam essa instalação. Ele roda nginx -t antes do reload e avisa, saindo em segurança, se o teste de configuração falha.
Os arquivos de redirecionamento
O builder emite três arquivos gerados na raiz da saída relativos a redirecionamentos. Veja a página de formatos de redirecionamento para o detalhamento arquivo por arquivo, incluindo a linha específica do Caddy para domínio canônico.
Hospedagem estilo Netlify
O builder escreve regras de redirecionamento no formato _redirects do Netlify (linhas simples slug-antigo → slug-novo com o código de status escolhido por você). Duas coisas para saber antes de apontar o Netlify para a saída:
- Redirecionamentos com padrão (curingas
*com placeholders de captura) são deliberadamente não escritos no_redirects; o formato simples de arquivo não pode expressá-los com segurança; eles vivem na configuração do seu proxy. - O bloco gerado de domínio canônico usa a sintaxe de força
301!do Caddy no mesmo arquivo. Um parser estrito de_redirectsdo Netlify rejeitará essa linha; confira/edite-a antes de enviar o arquivo a um host não-Caddy, ou sobrescreva-a.
Nota de cinto-e-suspensório: os headers de segurança definidos pelo app do CMS também estão presentes nos vhosts de exemplo, porque um proxy pode servir respostas em cache antes que o app tenha chance de responder.
Nesta seção
Também em Hospedagem estática
Sirva a árvore estática gerada com Caddy e TLS automático: o que o exemplo de Caddyfile incluído configura e o que editar em cada instância.
Sirva a árvore estática com nginx: os dois vhosts de exemplo, o proxy de /forms/ e /documents/ para o daemon do CMS e a sincronização da raiz.
Os arquivos de redirecionamento que cada build grava na raiz da saída, seus formatos para Netlify e Caddy, e a linha que só funciona no Caddy.