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:

  1. instala as dependências e roda a suíte de testes (pytest);
  2. constrói a imagem Docker, para garantir que o build não quebrou;
  3. se tudo passou, conecta na VPS com uma chave dedicada, atualiza o código, reconstrói o contêiner e recarrega o nginx;
  4. 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.]