Pequeno: Desenvolvimento, testes, usuário único (1–5 usuários)
Padrão: Times (5–50 usuários), cargas moderadas
Produção: Times grandes (50+ usuários), alta disponibilidade, execução pesada de workflows
Os requisitos de recursos são impulsionados pela execução de workflows (sandboxing com isolated-vm), processamento de arquivos (parsing de documentos em memória) e operações vetoriais (pgvector). A memória costuma ser o fator limitante, e não a CPU. A telemetria de produção mostra que o app principal usa 4–8 GB em média, com picos de até 12 GB sob carga pesada.
No mínimo você precisa de 2 núcleos de CPU, 12 GB de RAM, 20 GB de armazenamento SSD e Docker 20.10 ou posterior. A memória costuma ser o fator limitante por causa da execução de workflows (sandboxing com isolated-vm), processamento de arquivos e operações vetoriais (pgvector).
O Zoen usa PostgreSQL 17 com a extensão pgvector para busca por similaridade vetorial. O setup Docker usa a imagem pgvector/pgvector:pg17, que já vem com a extensão vector pré-instalada.
Três segredos são obrigatórios: BETTER_AUTH_SECRET (autenticação), ENCRYPTION_KEY (criptografia de dados) e INTERNAL_API_SECRET (auth entre serviços). Gere cada um com openssl rand -hex 32. Você também precisa definir NEXT_PUBLIC_APP_URL e BETTER_AUTH_URL com o seu domínio.
O serviço realtime é um servidor WebSocket dedicado que roda na porta 3002. Ele cuida da comunicação em tempo real para recursos como atualizações ao vivo da execução de workflows. Tem limite de 1 GB de memória e exige a própria configuração de DATABASE_URL e BETTER_AUTH_SECRET.
O container de migrations roda uma vez na inicialização (restart: no) e executa bun run db:migrate para aplicar mudanças de schema. Ele depende do banco estar saudável antes de rodar e precisa concluir com sucesso antes da aplicação principal iniciar.
Sim. O Zoen oferece suporte a Ollama para inferência local. Use docker-compose.ollama.yml em vez de docker-compose.prod.yml. Há perfis com GPU (com suporte NVIDIA) e só CPU, e ele baixa automaticamente gemma3:4b como modelo inicial.