Pular para o conteúdo principal

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 em http://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.

  1. make deps-back — dependências do backend (Go).
  2. make deps-front — dependências do frontend (Node).
  3. 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​

Módulos do InfraSpawn

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.