Numa VM, sem contêiner
A unidade systemd endurecida, o nginx na frente com TLS — e o que o Kiln não faz sozinho.
Nem todo serviço precisa de um cluster. Uma VM pequena com systemd e nginx atende a maioria dos projetos — e tem menos peças para quebrar. dataforge devops systemd e dataforge devops nginx escrevem as duas.
bash
dataforge devops systemd --usuario=loja
dataforge devops nginx --dominio=loja.exemplo.com
sudo useradd --system --home /srv/loja loja
sudo cp loja.service /etc/systemd/system/
sudo systemctl enable --now loja
sudo cp deploy/nginx.conf /etc/nginx/sites-enabled/loja
sudo certbot --nginx -d loja.exemplo.comO endurecimento da unidade#
| Diretiva | O que ela contém |
|---|---|
User= sem privilégio | a aplicação comprometida não é root |
NoNewPrivileges=true | nem um binário setuid devolve o root |
ProtectSystem=strict | o sistema de arquivos inteiro é somente-leitura… |
ReadWritePaths=/srv/app/dados | …menos a pasta de dados, que é a única que ela escreve |
ProtectHome / PrivateTmp | as pastas dos usuários somem, e o /tmp é só dela |
Restart=on-failure | a queda às 3h volta sozinha, e o log diz por quê |
Por que o nginx na frente#
O Kiln roda sobre o http.server do Python: não tem HTTP/2 nem TLS. Em produção pública, o nginx (ou Caddy) termina o TLS, serve os estáticos, limita o corpo e repassa para o Kiln em 127.0.0.1. O gerador já escreve o repasse de WebSocket e de SSE — sem os cabeçalhos de Upgrade, o tempo real para de funcionar atrás do proxy.
Volte para DevOps ou veja Observabilidade.