Rascunho: revise, ajuste com a sua voz e adicione prints antes de publicar.
De onde eu parti
Este site começou como HTML estático publicado no GitHub Pages e depois no Firebase Hosting. Funcionava bem para um portfólio parado, mas eu queria escrever artigos sem editar HTML na mão, receber mensagens de contato e entender quem visita. Era hora de transformar o site em uma aplicação de verdade, e de usá-lo como laboratório do que eu estudo em DevOps.
A aplicação
O backend é Flask, organizado em blueprints: páginas principais, blog e analytics. Os artigos ficam num banco SQLite (via SQLAlchemy), escritos em Markdown num editor com pré-visualização, rascunhos e upload de imagens. Para um site pessoal, SQLite é suficiente: um arquivo só, fácil de copiar para backup, e nenhum servidor de banco para manter.
Contêiner e servidor
A aplicação roda em Docker, com gunicorn servindo o Flask. Ela compartilha a VPS com outros projetos meus, como o BookCase, e todos ficam atrás de um único nginx, que termina o HTTPS (certificados Let's Encrypt) e encaminha cada domínio para o contêiner certo pela rede interna do Docker.
O banco, as imagens enviadas e as bases de geolocalização ficam num volume montado fora do contêiner. Assim, cada deploy reconstrói a imagem do zero sem perder nada.
Deploy automático
No começo, o deploy era um script que eu rodava na minha máquina: conectava por SSH, atualizava o código e reconstruía o contêiner. Funcionava, mas dependia de mim e não rodava testes.
Hoje cada push na branch main dispara um pipeline no GitHub Actions:
- instala as dependências e roda a suíte de testes (pytest);
- constrói a imagem Docker, para garantir que o build não quebrou;
- se tudo passou, conecta na VPS com uma chave dedicada, atualiza o código, reconstrói o contêiner e recarrega o nginx;
- confere se o site respondeu HTTP 200.
Se um teste falha, nada vai para produção. O mesmo script de deploy é usado pelo pipeline e pelo deploy manual, então os dois caminhos nunca divergem.
Analytics próprio, sem cookies
Eu queria saber quantas pessoas visitam, de onde vêm e o que leem, sem colocar Google Analytics e sem banner de cookies. A solução foi coletar no próprio servidor:
- Visitantes anônimos: cada visitante vira um hash do IP com o navegador e um sal que muda todo dia. Dá para contar pessoas únicas por dia sem guardar o IP.
- Localização e rede: as bases gratuitas da DB-IP dizem a cidade aproximada e a organização dona do IP. Isso também permite filtrar acessos vindos de datacenters, que quase sempre são robôs.
- Cliques e leitura: um script pequeno registra cliques em links e, ao sair da página, quanto tempo a pessoa ficou e até onde rolou.
Tudo isso aparece num painel com mapa, funil de contato e tempo de leitura por artigo.
O que eu aprendi
- Automatizar cedo vale a pena. O pipeline levou pouco tempo para montar e acabou com o medo de quebrar o site num deploy.
- Simples primeiro. SQLite e um script de deploy resolveram por muito tempo; a complexidade entrou só quando fez falta.
- Privacidade e métricas não são opostos. Dá para medir o que importa sem rastrear ninguém.
Próximos passos
[Complete: o que você quer evoluir, por exemplo backups automáticos do banco para fora da VPS, monitoramento com alertas ou migração para PostgreSQL.]
Comentários
Nenhum comentário ainda. Seja o primeiro!
Deixar um comentário