InfraSpawn
Repositório: infra-manager
Plataforma interna para gerenciar a infraestrutura AWS via Terraform e acompanhar os deploys das aplicações. É a ferramenta que provisiona e mantém o ambiente onde os outros sistemas (Syens, Chamada Escolar, Salus, Relatórios) rodam.
Usuários, perfis, contexto e permissões
Autenticação. Tem cadastro próprio de usuários (models/user.go), com login,
recuperação e redefinição de senha (telas Login, ForgotPassword,
ResetPassword). A sessão é um token JWT assinado com JWT_SECRET.
Papéis. Cada usuário tem um role, e o middleware de autenticação
(api/middleware/auth.go) reconhece três:
- admin — acesso total, incluindo configurações e usuários.
- write — cria e altera recursos (infraestrutura, aplicações, deploys).
- read_deploy — acompanha deploys e consulta, sem alterar.
Tokens com um papel fora dessa lista são considerados stale (de antes de uma
mudança no esquema de permissões) e recebem 401 — o cliente desloga e
reautentica, já com o papel atual. Cada requisição carrega o user_role no
contexto.
Dados sensíveis. Credenciais e identidades guardadas pela ferramenta são
criptografadas com ENCRYPTION_KEY (32 bytes), pelo pacote crypto.
Stack
- Backend: Go (module
github.com/gbrlrg/infra-manager), sobe emhttp://localhost:8080 - Front-end: React + Vite + TypeScript, sobe em
http://localhost:5173 - Banco: PostgreSQL
- Infra como código: Terraform (+ Graphviz para grafos)
Como rodar localmente
Pré-requisitos: Go 1.22+, Node 20+, Docker, Terraform e Graphviz.
make deps-back— dependências do backend (Go).make deps-front— dependências do frontend (Node).make dev— sobe o PostgreSQL e inicia backend e frontend em paralelo.
Alternativa: docker-compose up --build (sobe PostgreSQL + backend; o frontend é
servido à parte). O Makefile ainda traz build-back e build-front para os
builds de produção.
Variáveis de ambiente
Definidas em .env na raiz (modelo em .env.example):
DATABASE_URL— conexão com o PostgreSQL.JWT_SECRET— chave de assinatura dos tokens JWT.ENCRYPTION_KEY— chave de criptografia de dados sensíveis (exatos 32 bytes).TF_WORKSPACES_DIR— diretório onde ficam os workspaces do Terraform.PORT— porta do backend.ENV— ambiente de execução (ex.:development,production).
Padrões do projeto
Backend. Entrada em backend/cmd/main.go; o código fica em
backend/internal/: api (handlers, middleware, router), config, crypto,
db (migrations), models e services (aws, cloudflare, terraform,
changelog).
- Aplica Terraform em workspaces isolados (
TF_WORKSPACES_DIR). - Gera grafos de dependência do Terraform sob demanda
(
terraform graph | dot -Tsvg) — daí o Graphviz ser pré-requisito.
Front-end. Páginas em frontend/src/pages/: Dashboard, infrastructures,
terraform, templates, aws, cloudflare, applications, appTemplates,
taskDefinitions, dockerBuilds, changelogs, audit, settings e a
autenticação (Login, ForgotPassword, ResetPassword).
Infraestrutura gerida. As definições ficam em docs/*.tf. A base de rede
(vpc-base.tf) provê VPC, subnets públicas/privadas, NAT, internet gateway,
cluster ECS, RDS, ElastiCache (Redis), service discovery e registros na
Cloudflare. Cada sistema tem seu arquivo (syens.tf, cpe.tf) sobre essa
base. Mudanças de infraestrutura passam pelo Terraform (versionado), nunca por
alteração manual no console da AWS.
BigPicture
Deploy
Recomendado no Heroku com container stack (o Dockerfile já inclui Terraform
e Graphviz): heroku stack:set container e git push heroku main, definindo
JWT_SECRET, ENCRYPTION_KEY e DATABASE_URL via heroku config:set.