Skip to content

Stack tecnológica

JavaJava 21
Spring BootSpring Boot
PythonPython 3.12
AngularAngular
TypeScriptTypeScript
SASSSASS/SCSS
PostgreSQLPostgreSQL + PostGIS
RedisRedis
RabbitMQRabbitMQ
DockerDocker
Kubernetesk3s (Kubernetes)
Argo CDArgo CD
TraefikTraefik
NginxNginx
CloudflareCloudflare
CamadaTecnologiaObservações
Backend / APIJava 21 + Spring Boot 3Arquitetura hexagonal (ports & adapters)
Coleta / AutomaçãoPython 3.12Pipeline de download + parsing do CSV
FrontendAngular 17+ (standalone + signals)UI, mapa e filtros
BancoPostgreSQL 16 + PostGISÚnico banco relacional; dono do schema é o backend
MigrationsFlyway (no backend Java)Versiona o schema; Python não altera schema
MensageriaRabbitMQProcessamento assíncrono (ver ADR-0005)
CacheRedisCache de buscas quentes na API REST
Estilo (front)SASS/SCSSEstilização com variáveis/tokens (ver Frontend)
Empacotamento (dev)Docker + Docker Compose1 container por serviço
Deploy (prod)k3s + Argo CD (GitOps)VPS Hostinger, Traefik/Cloudflare — ver Kubernetes & GitOps e Rede e exposição
Reverse proxyNginxServe o Angular e faz proxy /api → backend

A decisão e os trade-offs estão registrados em ADR-0001 — Stack tecnológica.

Princípio de fronteira (Java ↔ Python)

O backend Java é o dono do banco/schema. O coletor Python não escreve direto nas tabelas de negócio; envia os dados por uma API de ingestão (POST /internal/ingest/...). Isso mantém regras e validações em um lugar só e evita dois sistemas acoplados ao mesmo schema.

Alternativa mais simples (MVP): o Python grava numa tabela de staging (raw_*) e o backend normaliza. Evite dar ao Python acesso de escrita às tabelas de domínio.

Detalhes por serviço

Catálogo completo de ferramentas

Ver Ferramentas para o toolchain open source completo (CI/CD, observabilidade, segurança, etc.).