Logs Ao Vivo
🚀 PaaS AI-Native Oficial • Contrato & Operações

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.

RAM Baseline
91.4 MB
Proxy HTTP/2
Caddy + CF
Bancos Ativos
Postgres 16
SSL Automation
DNS-01 ACME
# 01 • Fundamentos

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
💡 Os 3 Pilares do Infrazin

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.

# 02 • Estrutura

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:

DIAGRAMA DE REDE & ENCAMINHAMENTO (INFRAZIN) DNS-01 Cloudflare
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).

# 03 • Hands-on

Início Rápido (Quickstart)

Conectar qualquer nova aplicação ao Infrazin leva menos de 2 minutos através de 4 passos fundamentais:

1

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
2

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
3

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
4

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
# 04 • Metodologia

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:

CU

ClickUp

Gestão & Negócio

Backlog de produto, épicos, prioridades, estimativas e aprovações. Integrado diretamente à IA via MCP Oficial.

MCP Oficial Ativo
SP

Specsfy

Arquitetura & IA

Especificação técnica contextual, critérios de aceite, TUI no terminal e divisão atômica de tarefas para a IA.

CLI 0.10.2 Global
IZ

Infrazin

Infraestrutura & PaaS

Provisionamento automático de banco PostgreSQL, Redis, roteamento SSL Caddy e pipelines de deploy contínuo.

PaaS Oficial da VPS

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
          
# 05 • Especificação

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
Rede Externa

Todo container deve declarar infrazin_net com external: true.

Zero Port Conflicts

Usar expose em vez de ports evita colisões de portas na VPS.

Persistência Limpa

Montar pastas locais no host (ex: ./data) garante facilidade de backup e migração.

# 06 • CLI Reference

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:

infrazin doctor Saúde

Executa uma bateria completa de testes de integridade em Docker, rede, Caddy, Postgres, Redis (anti-flushall) e Cloudflare API Token.

infrazin doctor
infrazin status Métricas

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
infrazin app Aplicações

Gerenciamento de ciclo de vida das aplicações cadastradas no Infrazin.

# Listar todas as aplicações cadastradas e seu status atual
infrazin app list
# Anexar uma pasta existente ao registro central do Infrazin
infrazin app attach <nome> <caminho> [--container name:port] [--domain dom.com]
# Executar docker compose pull/build/up de um app
infrazin app deploy <nome>
infrazin db Banco de Dados

Provisionamento atômico de databases no PostgreSQL central e alocação de índices Redis.

# Cria database, usuário, senha e aloca índice Redis (atualiza .env se fornecido)
infrazin db create <app_name> [--env-file /path/to/.env]
# Lista todos os databases ativos no cluster central
infrazin db list
# Deleta database e usuário com segurança (exige --force)
infrazin db drop <app_name> --force
infrazin domain Roteamento & DNS

Criação de DNS automatizado na Cloudflare e recarregamento atômico do Caddy.

# Mapeia domínio para um container com Cloudflare DNS e SSL ACME
infrazin domain add <app> <dominio> <container:porta> [--no-proxy]
# Lista todos os domínios mapeados no Caddy e no registry.json
infrazin domain list
# Remove domínio do Caddy e opcionalmente deleta o DNS da Cloudflare
infrazin domain remove <dominio> [--delete-dns]
infrazin backup & core Operações

Rotinas de manutenção, recarga do proxy e dumps locais/remotos.

# Executa backup pg_dumpall de todos os bancos com compressão gzip
infrazin backup run [--db <nome>]
# Recarrega o Caddy sem derrubar conexões ativas (zero downtime)
infrazin core reload-proxy
# Reinicia os serviços core do Infrazin
infrazin core restart
# 07 • Armazenamento

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 PUBLIC garante 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 GB configurado no Docker Compose.

🛡️ Blindagem do Redis (ADR-017)

  • Anti-FLUSHALL: O comando destrutivo global FLUSHALL foi renomeado para vazio (rename-command FLUSHALL "") no redis.conf.
  • Permissão Local: O comando FLUSHDB permanece 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 MB com maxmemory-policy allkeys-lru, descartando chaves antigas de forma inteligente caso o limite seja atingido.
# 08 • Roteamento

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
}
# 09 • Deploys

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!"
# 10 • Monitoramento

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.br

Credenciais de Produção

Usuário: admin
Hash: bcrypt protegido
Storage: /root/infrazin/core/dozzle
# 11 • Arquitetura

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:

[ADR-001] CI/CD via GitHub Actions: Deploy atômico via SSH sem daemons extras na VPS.
Aceito
[ADR-002] Diretório /root/projetos/: Preserva caminhos e separação estrita da camada core.
Aceito
[ADR-003] PostgreSQL Compartilhado: Um único container com bancos e usuários isolados.
Aceito
[ADR-004] Logs Web com Dozzle: Apenas ~15 MB RAM, mobile-ready e autenticado via bcrypt.
Aceito
[ADR-005] Caddy Direto com Cloudflare DNS-01: Certificados Wildcard automáticos.
Aceito
[ADR-006] Redis Centralizado: Cache e queues compartilhados sem instâncias duplicadas.
Aceito
[ADR-011] Isolamento Redis por Índices: Divisão lógica por /0, /1, etc. no registry.json.
Aceito
[ADR-016] Limites no PostgreSQL: 25 conexões/app e 1.5 GB de RAM máxima no container.
Aceito
[ADR-017] Blindagem do Redis: FLUSHALL bloqueado e política allkeys-lru (256 MB).
Aceito
[ADR-018] Acesso Direto Root SSH: Elimina atritos de chown e permissões no deploy.
Aceito
[ADR-021] Healthcheck & Rollback Automático: Resiliência ativa em caso de erro no build.
Aceito
# 12 • Resolução de Problemas

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