Sistema de inteligência preditiva de combustíveis para Salvador/BA, correlacionando o mercado de petróleo Brent (Londres) com os preços nas bombas da cidade.
O SoteroPetro monitora em tempo real o preço do barril de petróleo Brent e correlaciona com os preços praticados nos postos de Salvador, usando um modelo preditivo que estima quando e quanto o reajuste da Refinaria de Mataripe (Acelen) chegará ao consumidor final.
Contexto real: Em março de 2026, com o Brent ultrapassando US$ 89 e instabilidade no Estreito de Ormuz, a diferença de preço entre postos de Salvador chegou a R$ 1,16/L — o sistema identifica onde está o combustível mais barato em tempo real.
sotetropetro/
├── cmd/
│ ├── ingestor/ # Worker: coleta Brent (Yahoo Finance) + preços dos postos
│ ├── predictor/ # Engine preditivo: correlação Brent → bomba Salvador
│ └── api/ # REST API + serve o dashboard estático
├── internal/
│ ├── models/ # Structs compartilhadas entre os serviços
│ └── repository/ # Camada de acesso ao PostgreSQL
├── frontend/ # Dashboard HTML com Chart.js
├── deploy/
│ ├── chart/ # Helm Chart com PostgreSQL (PVC) + Redis + 3 deployments
│ └── values/
│ └── prod.yml # Values de produção (AWS)
└── gitlab-aws-terraform/ # Infraestrutura AWS provisionada com Terraform
| Serviço | Função | Intervalo |
|---|---|---|
ingestor |
Coleta Brent (Yahoo Finance BZ=F) + câmbio USD/BRL (USDBRL=X); calcula preços da bomba via fórmula calibrada ANP × ICE |
5 min |
predictor |
Calcula previsão de reajuste usando coeficiente Acelen (0.42x) | 10 min |
api |
Serve dashboard + endpoints REST com cache Redis | Contínuo |
Um único Dockerfile compila os 3 binários (multi-stage build) e a variável SERVICE seleciona qual executar no pod.
O ambiente de produção roda inteiramente na AWS (região us-east-2 — Ohio) com 3 VMs EC2 t3.medium, cada uma com Elastic IP fixo (IP que não muda mesmo ao desligar a VM) e domínio via Route 53.
AWS — us-east-2 (Ohio)
├── VPC: 10.0.0.0/16
│
├── EC2: gitlab.mateusassis.com (Elastic IP fixo)
│ └── GitLab CE — HTTPS via Let's Encrypt
│
├── EC2: registry.mateusassis.com (Elastic IP fixo)
│ ├── Docker Registry (sem senha) — HTTPS via nginx + Let's Encrypt
│ └── GitLab Runner (Docker executor + kubectl + helm)
│
└── EC2: k8s.mateusassis.com (Elastic IP fixo)
└── MicroK8s 1.29
└── Namespace: sotetropetro
├── Deployment: sotetropetro-api
├── Deployment: sotetropetro-ingestor
├── Deployment: sotetropetro-predictor
├── Deployment: sotetropetro-postgres (PVC: 2Gi)
├── Deployment: sotetropetro-redis
├── Ingress: sotetropetro.apps.mateusassis.com (HTTPS · TLS via cert-manager)
└── ClusterIssuer: letsencrypt-prod (HTTP-01 · Let's Encrypt)
| Subdomínio | Destino |
|---|---|
gitlab.mateusassis.com |
VM GitLab |
registry.mateusassis.com |
VM Registry + Runner |
k8s.mateusassis.com |
VM Kubernetes |
*.apps.mateusassis.com |
Ingress do K8s (apps expostas) |
cd gitlab-aws-terraform
cp terraform.tfvars.example terraform.tfvars
# Preencha: key_name, my_ip
terraform init
terraform plan
terraform apply# postgres.yaml — dados persistem mesmo se o pod reiniciar
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sotetropetro-postgres-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
storageClassName: microk8s-hostpath- 3 Deployments (api, ingestor, predictor) com
initContainersaguardando o PostgreSQL - 1 PVC de 2Gi para persistência dos dados históricos
- Secret com credenciais do banco injetadas via
secretKeyRef - Service + Ingress com TLS automático via cert-manager + Let's Encrypt
- ClusterIssuer
letsencrypt-prodgerenciado pelo próprio Helm Chart
O ingestor usa uma fórmula calibrada por correlação histórica ANP × ICE para calcular o preço da gasolina comum em Salvador em tempo real:
base = Brent (USD/barril) × USD/BRL × 0,0105 + R$ 2,20
O resultado inclui: custo de refino (Acelen/Mataripe), PIS/COFINS + CIDE, margem de distribuição, margem do posto e ICMS-BA (~20,5%). Cada posto tem um offset fixo de localização aplicado sobre a base (ex: Petrobras Paralela -R$ 0,15 por alto volume; BR Barra +R$ 0,32 por ser área turística). Os preços variam a cada ciclo de coleta conforme o mercado.
Se Brent subiu 10% em Londres:
→ Impacto no preço final = 10% × 0.42 (coeficiente Acelen)
→ Latência de repasse: 7-14 dias (depende da magnitude)
→ Confiança: inversamente proporcional à volatilidade
Baseado em análises históricas da ANP pós-privatização da Refinaria de Mataripe.
push main → build (Kaniko) → deploy (Helm)
- Kaniko compila o Go multi-stage e publica no Registry (
registry.mateusassis.com) - O Registry não exige autenticação — acesso controlado pelo Security Group da AWS
- Helm faz o deploy dos 3 serviços + PostgreSQL + Redis no MicroK8s
| Variável | Descrição | Tipo | Masked |
|---|---|---|---|
KUBECONFIG |
kubeconfig do cluster MicroK8s | File | ✅ |
O registry não usa senha — nenhuma credencial de registry é necessária no pipeline.
# Sobe PostgreSQL e Redis via Docker
docker run -d --name postgres -e POSTGRES_DB=sotetropetro \
-e POSTGRES_USER=sotetropetro -e POSTGRES_PASSWORD=sotetropetro \
-p 5432:5432 postgres:16-alpine
docker run -d --name redis -p 6379:6379 redis:7.2-alpine
# Build e execução
go run ./cmd/ingestor &
go run ./cmd/predictor &
go run ./cmd/api
# Acesse: http://localhost:8080helm upgrade --install sotetropetro ./deploy/chart/ \
--namespace sotetropetro \
--values ./deploy/values/prod.yml \
--set image.repository=registry.mateusassis.com/soteropetro/soteropetro \
--set image.tag=latest \
--create-namespace