/projects/ulbra-infra
← Todos os projetosUlbra Infra
De uma pessoa no servidor a um repositório e um pipeline.
Head de Tecnologia — design & implementação · Abr 2026 – Atual
Visão geral
A plataforma sob todos os outros sistemas deste grupo. Começou como servidores on-premise sem nenhuma automação — publicar significava uma pessoa na máquina, instalando um runtime e subindo a aplicação na mão. Hoje é um script de provisionamento, um orquestrador de contêineres, um proxy reverso, duas ferramentas de observabilidade com uma divisão declarada e um ciclo de entrega em que um alerta pode investigar a si mesmo e abrir um pull request.
O que eu fiz
Desenhei e construí a plataforma e o modelo de entrega que roda sobre ela.
- O script de provisionamento em uma execução e o cluster que ele produz.
- O proxy reverso e a convenção de roteamento que toda aplicação segue.
- A divisão entre observabilidade de aplicação e de host.
- O pipeline de CI e o ciclo alerta-para-pull-request construído sobre ele.
- O painel de entrega que lê o próprio rastreador de tarefas do time.
O problema
Tudo rodava on-premise sem nenhuma automação em volta. Colocar uma aplicação em produção significava conectar num servidor, instalar um runtime e subir o processo na mão — o que torna todo deploy um exercício de memória, todo servidor sutilmente diferente do anterior e toda queda um problema de arqueologia. Nada era medido, então nada podia ser melhorado de propósito.
Provisiona uma vez, depois por aplicação
O servidor é configurado numa execução; depois disso, publicar uma aplicação é um repositório e um pipeline.
- ProvisionUm script: runtime, firewall, cluster, redes overlay.
- PlatformO proxy reverso e as stacks de observabilidade sobem junto.
- PushA CI constrói a imagem e envia para o registry.
- DeployO pipeline publica a stack; o proxy pega a rota pelos labels.
- ObserveTraces, logs e métricas chegam só pelas variáveis de ambiente.
De um alerta a uma correção mesclada
O que o time automatizou é a investigação, não o julgamento.
- AlertA telemetria da aplicação cruza um limiar.
- InvestigateUm agente de código lê o trace e o código em volta.
- Pull requestUma correção proposta chega como uma mudança normal para revisar.
- ReviewUm engenheiro aceita, ajusta ou rejeita.
- MergeO mesmo pipeline por onde passa qualquer outra mudança.
O que uma aplicação declara
services:
my-app:
image: registry.example.internal/my-app:latest
networks: [proxy, monitoring]
environment:
- OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
- OTEL_SERVICE_NAME=my-app
deploy:
labels:
- "traefik.enable=true"
- "traefik.http.routers.myapp.rule=Host(`my-app.example.internal`)"O que faz
- Um script leva um servidor cru até pronto: runtime de contêiner, firewall, cluster, redes overlay, proxy e monitoramento.
- Uma aplicação nova precisa de um compose e um workflow — o roteamento e o certificado saem dos labels.
- A telemetria é opcional por variáveis de ambiente; nada mais precisa ser ligado.
- Um alerta pode ser investigado automaticamente e chegar como um pull request para um humano julgar.
Decisões de engenharia
Duas ferramentas de observabilidade, numa fronteira declarada
A telemetria de aplicação — logs, traces, métricas — vai para uma ferramenta via OpenTelemetry; métricas de host como CPU, memória e disco ficam em outra. Manter as duas parece deriva até se ler a regra escrita na configuração: aplicações não reportam para a stack de host. Cada ferramenta é boa em um dos dois trabalhos, e a alternativa considerada e descartada era uma só fazendo os dois mal.
Alertas se investigam; humanos ainda mesclam
Quando a telemetria de aplicação dispara um alerta, um agente de código lê o trace e o código em volta e abre um pull request com uma correção proposta. O que foi automatizado é a investigação — a parte mecânica e lenta às três da manhã. O merge não é automatizado, e de propósito: uma mudança que ninguém aprovou chegando em produção é uma falha pior do que uma correção lenta.
Um orquestrador do tamanho do time
Kubernetes era a resposta padrão e não foi adotado. O cluster é pequeno, on-premise, e operado por três engenheiros que também escrevem seis aplicações. O Swarm dá agendamento multi-nó, rolling update e rede overlay com uma fração da superfície operacional — e o custo do teto que ele impõe é muito menor que o de um control plane que ninguém tem tempo de operar.
O time se mede com o próprio pipeline
Um painel lê o rastreador de tarefas do time por um sidecar de ETL, então a entrega fica visível no mesmo lugar em que estão os números dos sistemas. É um encanamento pequeno carregando uma afirmação grande: um modelo de trabalho que é medido pode ser discutido com evidência, e um que é apenas afirmado, não.