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.