Infrazin: Infraestrutura Minimalista de Alta Performance
Uma PaaS moderna com menos de 100 MB de baseline de RAM, integrada perfeitamente com a Tríade de Desenvolvimento: ClickUp (MCP Oficial), Specsfy e Infrazin.
Visão Geral & Filosofia
O Infrazin nasceu com uma missão inegociável: substituir paas pesadas que consomem mais de 800 MB a 1.5 GB de memória em repouso por uma arquitetura enxuta, determinística e feita sob medida para agentes de Inteligência Artificial e desenvolvedores individuais.
| Característica | PaaS Convencionais | Infrazin PaaS |
|---|---|---|
| Consumo de RAM em repouso | 600 MB - 1.5 GB | < 100 MB (91.4 MB real) |
| Overhead de CPU | Picos constantes (>100%) | < 2% CPU constante |
| Gestão de Banco de Dados | 1 container Postgres por app | 1 Postgres central isolado por user/db |
| Proxy & SSL | Traefik complexo ou Nginx | Caddy nativo com Cloudflare DNS-01 |
| Compatibilidade com IA | Painel Web proprietário fechado | AI-Native Skill + CLI scriptável |
1. Context-First: Sem templates rígidos ou linguagens forçadas. O contrato é baseado em Docker padrão e a IA sabe adaptar qualquer framework (Node, Python, Go, PHP).
2. Isolamento Sem Desperdício: PostgreSQL e Redis compartilhados em instâncias centrais, porém estritamente isolados por credenciais e limites de conexão.
3. Zero Port Exposure: Nenhuma aplicação expõe portas para a interface pública da VPS. Todo o tráfego passa obrigatoriamente pela rede isolada infrazin_net gerenciada pelo Caddy.
Arquitetura do Core
A pilha do Infrazin é composta por 4 contêineres essenciais e altamente otimizados, orquestrados via /root/infrazin/core/docker-compose.yml na rede infrazin_net:
graph TD
Client[Web Visitors / Apps] -->|HTTPS 443| Cloudflare[Cloudflare Edge / CDN]
Cloudflare -->|HTTPS / DNS-01| Caddy[infrazin_caddy:443/80]
subgraph "Rede Docker: infrazin_net (Bridge Interna)"
Caddy -->|Reverse Proxy| App1[agentformlead_app:8000]
Caddy -->|Reverse Proxy| App2[catalogozin_app:8000]
Caddy -->|Reverse Proxy| Docs[docsinfrazin_app:80]
Caddy -->|Reverse Proxy| Dozzle[infrazin_dozzle:8080]
App1 -->|User Isolado| PG[(infrazin_postgres:5432)]
App2 -->|DB catalogozin_prod| PG
App2 -->|Index 1| Redis[(infrazin_redis:6379)]
end
infrazin_caddy (~22 MB RAM)
Imagem customizada compilada com o plugin caddy-dns/cloudflare. Resolve desafios ACME DNS-01, gera certificados Wildcard e aplica compressão Zstandard/Gzip e headers HSTS automaticamente.
infrazin_postgres (~48 MB RAM)
PostgreSQL 16 Alpine compartilhado. Cada app possui seu próprio database e usuário, com limite máximo de 25 conexões simultâneas e REVOKE CONNECT FROM PUBLIC (ADR-016).
infrazin_redis (~10 MB RAM)
Redis 7 Alpine com limite de memória em 256 MB e política allkeys-lru. Comando FLUSHALL completamente bloqueado por segurança; isolamento por índices 0 a 15 (ADR-017).
infrazin_dozzle (~25 MB RAM)
Visualizador web de logs de contêineres em tempo real. Autenticação nativa com senha encriptada em bcrypt e acesso seguro por subdomínio SSL (ADR-004).
Início Rápido (Quickstart)
Conectar qualquer nova aplicação ao Infrazin leva menos de 2 minutos através de 4 passos fundamentais:
Provisionar Banco de Dados & Redis
Cria o banco isolado com senha gerada dinamicamente e injeta as variáveis no .env do seu projeto:
infrazin db create meunovoapp --env-file /root/projetos/meunovoapp/.env
Configurar docker-compose.yml
Conecte o serviço na rede infrazin_net e apenas use expose (sem expor portas no host):
services:
app:
build: .
container_name: meunovoapp_app
restart: always
expose:
- "8000"
networks:
- infrazin_net
networks:
infrazin_net:
external: true
Mapear Domínio e Emitir SSL
Cria o DNS na Cloudflare com proxy e recarrega o Caddy com SSL automático:
infrazin domain add meunovoapp api.meusite.com.br meunovoapp_app:8000
Deploy e Validação
Inicie a aplicação e valide a integridade geral do ecossistema:
cd /root/projetos/meunovoapp && docker compose up -d
infrazin doctor
A Tríade de Desenvolvimento
O desenvolvimento de software de alta performance na VPS opera através de uma sinergia perfeita entre três pilares complementares:
ClickUp
Backlog de produto, épicos, prioridades, estimativas e aprovações. Integrado diretamente à IA via MCP Oficial.
Specsfy
Especificação técnica contextual, critérios de aceite, TUI no terminal e divisão atômica de tarefas para a IA.
Infrazin
Provisionamento automático de banco PostgreSQL, Redis, roteamento SSL Caddy e pipelines de deploy contínuo.
Ciclo de Vida de uma Demanda (4 Etapas)
Como uma nova funcionalidade sai da concepção e atinge produção sem intervenção manual:
sequenceDiagram
autonumber
actor Dev as Usuário / IA
participant CU as ClickUp (MCP)
participant SP as Specsfy (specs/)
participant IZ as Infrazin (VPS)
participant GH as GitHub Actions
Dev->>CU: 1. Consulta próxima tarefa do backlog (ex: #86b9q0t1y)
Dev->>SP: 2. Cria spec técnica vinculada ao ID do ClickUp
Dev->>IZ: 3. Provisiona recursos (DB, Redis, Caddy, rede infrazin_net)
Dev->>GH: 4. Push do código com deploy automático
Dev->>SP: 5. Transição de spec (specsfy transition ... completed)
Dev->>CU: 6. Conclui tarefa no ClickUp com relatório técnico
O Contrato do Infrazin (The Contract)
O Contrato do Infrazin é a especificação formal que rege a convivência das aplicações no ecossistema. Qualquer container que cumpra este contrato torna-se automaticamente compatível com proxy, banco de dados, backups e deploy contínuo.
1. Especificação do docker-compose.yml
services:
app:
build: .
image: meunome_app:latest
container_name: meunome_app
restart: always
# ⚠️ REGRA DE OURO: NUNCA exponha portas no formato "8000:8000" para o host.
# O Caddy acessa o serviço diretamente pelo nome do container na rede interna!
expose:
- "8000"
env_file:
- .env
volumes:
- ./data:/app/data
- ./app/static/uploads:/app/app/static/uploads
networks:
- infrazin_net
networks:
infrazin_net:
external: true
Todo container deve declarar infrazin_net com external: true.
Usar expose em vez de ports evita colisões de portas na VPS.
Montar pastas locais no host (ex: ./data) garante facilidade de backup e migração.
Referência do CLI (`infrazin`)
O executável infrazin é uma ferramenta Python de alto nível instalada em /usr/local/bin/infrazin. Abaixo está a relação de todos os comandos disponíveis:
Executa uma bateria completa de testes de integridade em Docker, rede, Caddy, Postgres, Redis (anti-flushall) e Cloudflare API Token.
infrazin doctor
Exibe o uso atual de memória RAM, disco SSD, load average, status dos contêineres core e lista resumida de aplicações ativas.
infrazin status
Gerenciamento de ciclo de vida das aplicações cadastradas no Infrazin.
infrazin app list
infrazin app attach <nome> <caminho> [--container name:port] [--domain dom.com]
infrazin app deploy <nome>
Provisionamento atômico de databases no PostgreSQL central e alocação de índices Redis.
infrazin db create <app_name> [--env-file /path/to/.env]
infrazin db list
infrazin db drop <app_name> --force
Criação de DNS automatizado na Cloudflare e recarregamento atômico do Caddy.
infrazin domain add <app> <dominio> <container:porta> [--no-proxy]
infrazin domain list
infrazin domain remove <dominio> [--delete-dns]
Rotinas de manutenção, recarga do proxy e dumps locais/remotos.
infrazin backup run [--db <nome>]
infrazin core reload-proxy
infrazin core restart
PostgreSQL & Redis Central
Para garantir máxima densidade de projetos na VPS e evitar o consumo excessivo de múltiplos motores de banco de dados, o Infrazin adota um modelo centralizado rigorosamente blindado.
🛡️ Blindagem do PostgreSQL (ADR-016)
- Isolamento Estrito:
REVOKE CONNECT ON DATABASE <db> FROM PUBLICgarante que o usuário de um projeto não tenha permissão de leitura ou listagem nos bancos dos outros projetos. - Limite de Conexões: Cada usuário possui
CONNECTION LIMIT 25. Mesmo que uma aplicação sofra um memory leak ou loop de requisições, o restante da VPS continuará estável. - Alocação de Memória: O container possui limite estrito de
1.5 GBconfigurado no Docker Compose.
🛡️ Blindagem do Redis (ADR-017)
- Anti-FLUSHALL: O comando destrutivo global
FLUSHALLfoi renomeado para vazio (rename-command FLUSHALL "") noredis.conf. - Permissão Local: O comando
FLUSHDBpermanece funcional, permitindo que uma aplicação limpe apenas o seu respectivo índice numérico sem afetar os vizinhos. - Política de Descarte (LRU): Limite de
256 MBcommaxmemory-policy allkeys-lru, descartando chaves antigas de forma inteligente caso o limite seja atingido.
Caddy, Cloudflare & SSL
O roteamento de entrada é operado pelo Caddy compilado com o módulo oficial caddy-dns/cloudflare. Essa integração resolve automaticamente desafios DNS-01 diretamente nos servidores DNS da Cloudflare.
Certificados Wildcard (*.dominio)
Suporte nativo para SaaS multi-tenant (ex: *.catalogozin.app). Não sofre limitações de rate limit de subdomínios do Let's Encrypt.
Configuração Modular Atômica
Cada site vive em /root/infrazin/core/caddy/sites/<dominio>.caddy. O Caddy recarrega atômica e instantaneamente.
Exemplo de Configuração de Site (.caddy)
# Configuração Infrazin para agentformlead
agentformlead.fulcroalavanc.com.br {
import cloudflare_tls
import security_headers
import compression
reverse_proxy agentformlead_app:8000
}
CI/CD GitHub Actions & Rollback
Conforme estabelecido no ADR-001 e ADR-021, cada projeto possui um workflow desacoplado no GitHub Actions. Ao fazer push na branch main (ou saas), o runner conecta na VPS via SSH, puxa as alterações, recria os containers e valida a saúde do endpoint.
Template de Deploy (.github/workflows/deploy.yml) Rollback Automático
name: Deploy to Infrazin
on:
push:
branches: [ main, saas ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy via SSH
uses: appleboy/[email protected]
with:
host: ${{ secrets.INFRAZIN_HOST }}
username: ${{ secrets.INFRAZIN_USER }}
key: ${{ secrets.INFRAZIN_SSH_KEY }}
script: |
cd /root/projetos/${{ github.event.repository.name }}
git pull origin ${{ github.ref_name }}
docker compose build
docker compose up -d
# Healthcheck de 10 segundos com Rollback
sleep 5
CONTAINER_NAME="${{ github.event.repository.name }}_app"
STATUS=$(docker inspect -f '{{.State.Status}}' $CONTAINER_NAME 2>/dev/null)
if [ "$STATUS" != "running" ]; then
echo "Deploy falhou! Executando Rollback..."
git checkout HEAD~1
docker compose up -d
exit 1
fi
echo "Deploy concluído com sucesso!"
Observabilidade & Logs
O Infrazin adota o Dozzle v11 para acompanhamento visual de logs em tempo real sem a necessidade de manter conexões de terminal abertas.
Painel Web Seguro
Disponível através de domínio HTTPS dedicado com certificado SSL oficial:
https://dozzle.fulcroalavanc.com.brCredenciais de Produção
Registros de Decisão de Arquitetura (ADR)
Todas as decisões de design foram debatidas e formalizadas para garantir a longevidade e determinismo da infraestrutura:
Troubleshooting & FAQ
1. Erro "took too long to respond" ou Timeout na conexão
Geralmente causado por portas bloqueadas no firewall UFW da VPS. Apenas as portas 80, 443 e 8080 devem estar abertas.
ufw status
ufw allow 8080/tcp comment 'Infrazin Dozzle'
2. O site retorna HTTP 308 em loop infinito
Ocorre quando o Cloudflare Tunnel conecta via HTTP (porta 80) e o Caddy tenta forçar o redirecionamento automático para HTTPS. Resolvido adicionando auto_https disable_redirects no Caddyfile global.
3. Como visualizar os logs de um container específico?
Pelo terminal ou direto pela interface do Dozzle:
docker logs --tail=100 -f <nome_do_container>
4. Como verificar a saúde completa da infraestrutura?
infrazin doctor