Variáveis de Ambiente

Obrigatórias

VariávelDescrição
DATABASE_URLString de conexão do PostgreSQL
BETTER_AUTH_SECRETSegredo de autenticação (32 caracteres hex): openssl rand -hex 32. Precisa ser idêntico nos serviços app e realtime
BETTER_AUTH_URLA URL da sua aplicação — precisa ser a origem pública real, não localhost
ENCRYPTION_KEYChave de criptografia (32 caracteres hex): openssl rand -hex 32
INTERNAL_API_SECRETSegredo da API interna (32 caracteres hex): openssl rand -hex 32
NEXT_PUBLIC_APP_URLURL pública da aplicação
CRON_SECRETBearer token para os endpoints de jobs em background (32 caracteres hex). Obrigatório sempre que os jobs em background estiverem habilitados — o padrão do Helm chart, e o chart não é renderizado sem ele. Veja Jobs em Background
API_ENCRYPTION_KEYCriptografa em repouso as chaves de API geradas por usuários (32 caracteres hex). Necessária para criar chaves de API

ENCRYPTION_KEY e API_ENCRYPTION_KEY não podem ser rotacionadas nem recuperadas. Perder qualquer uma delas torna os dados que ela protege permanentemente ilegíveis — variáveis de ambiente do workspace e pessoais, chaves de API de provedores armazenadas, credenciais OAuth de MCP e segredos de deploy/chat no primeiro caso; chaves de API do Studio geradas por usuários no segundo. Faça backup delas separadamente do banco de dados.

Fortemente recomendadas

VariávelDescrição
REDIS_URLString de conexão do Redis. Opcional com uma única réplica; obrigatória a partir de mais de uma réplica de app ou realtime — veja Redis
REDIS_TLS_SERVERNAMESobrescreve o SNI do TLS. Necessária quando REDIS_URL usa rediss:// com um IP puro, senão a aplicação falha ao iniciar
NEXT_PUBLIC_SOCKET_URLURL do WebSocket — o padrão é a origem da página; defina apenas se o realtime estiver em outro host
TRUSTED_ORIGINSOrigens adicionais confiáveis para autenticação, separadas por vírgula (apex + www, domínios alias)
AUTH_TRUSTED_PROXIESIPs/CIDRs de proxies reversos separados por vírgula, para que o IP do cliente não possa ser falsificado via X-Forwarded-For
INTERNAL_API_BASE_URLURL interna para chamadas do servidor a si mesmo, por exemplo http://studio-app.studio.svc.cluster.local:3000. Necessária para a supressão de PII nos logs; o padrão é NEXT_PUBLIC_APP_URL
DATABASE_REPLICA_URLString de conexão de réplica de leitura para listagem de logs, logs de auditoria e agregações do dashboard. Recai para o primário quando não definida

Provedores de IA

VariávelProvedor
OPENAI_API_KEYOpenAI — também é o provedor padrão de embeddings da Knowledge Base
ANTHROPIC_API_KEY_1Anthropic Claude
GEMINI_API_KEY / GEMINI_API_KEY_1Google Gemini
MISTRAL_API_KEYMistral
XAI_API_KEY_1xAI
KIMI_API_KEY_1Moonshot Kimi
ZAI_API_KEY_1Z.ai
TOGETHER_API_KEYTogether AI
FIREWORKS_API_KEYFireworks AI
BASETEN_API_KEYBaseten
COHERE_API_KEYCohere — necessária para o reranker do bloco Knowledge
OLLAMA_URLOllama (padrão: http://localhost:11434)

Bases de conhecimento exigem um provedor de embeddings hospedado. Três são suportados, selecionados com KB_EMBEDDING_MODEL: text-embedding-3-small (padrão) e text-embedding-3-large na OpenAI ou Azure OpenAI, e gemini-embedding-001 no Gemini. Não existe backend local de embeddings — configurar Ollama ou vLLM não substitui isso, porque os embeddings não passam pelo modelo de chat configurado.

Para balanceamento de carga, adicione várias chaves com os sufixos _1, _2, _3 (por exemplo, OPENAI_API_KEY_1, OPENAI_API_KEY_2). Funciona com OpenAI, Anthropic, Gemini, xAI, Kimi, Z.ai, Cohere e Fireworks.

No Docker, use OLLAMA_URL=http://host.docker.internal:11434 para o Ollama na máquina host.

AWS Bedrock

VariávelDescrição
NEXT_PUBLIC_BEDROCK_DEFAULT_CREDENTIALSDefina true ao usar a cadeia padrão de credenciais da AWS (IAM roles, ECS task roles, IRSA). Oculta os campos de credenciais na interface do bloco Agent

Azure OpenAI

VariávelDescrição
AZURE_OPENAI_API_KEYChave de API do Azure OpenAI
AZURE_OPENAI_ENDPOINTURL do endpoint do Azure OpenAI
AZURE_OPENAI_API_VERSIONVersão da API (por exemplo, 2024-02-15-preview)

Endpoints auto-hospedados compatíveis com OpenAI

VariávelDescrição
VLLM_BASE_URLURL do servidor vLLM, sem o sufixo /v1 (por exemplo, http://localhost:8000) — o Studio adiciona /v1 por conta própria
VLLM_API_KEYBearer token opcional para o vLLM
LITELLM_BASE_URLURL base do proxy LiteLLM
LITELLM_API_KEYBearer token opcional para o LiteLLM

Provedores de Login

VariávelDescrição
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRETGoogle — também alimenta todas as integrações Google
GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRETGitHub
MICROSOFT_CLIENT_ID / MICROSOFT_CLIENT_SECRETMicrosoft — também alimenta todas as integrações Microsoft
DISABLE_GOOGLE_AUTH / DISABLE_GITHUB_AUTH / DISABLE_MICROSOFT_AUTHOculta um provedor da página de login sem remover as credenciais dele

Veja Autenticação.

Credenciais de Integrações

Integrações não funcionam em uma implantação auto-hospedada até você registrar seu próprio app OAuth em cada serviço e definir o *_CLIENT_ID / *_CLIENT_SECRET correspondente. São cerca de 27 deles, cobrindo 50 conectores. A tabela completa, o formato da redirect URI e os passos de configuração estão em Integrações & OAuth.

Controle de Acesso

VariávelDescrição
DISABLE_REGISTRATIONDefina true para bloquear todas as novas contas, incluindo login social. Convites continuam funcionando para quem já tem conta. SSO não é afetado
DISABLE_EMAIL_SIGNUPBloqueia novos cadastros com e-mail/senha; o login por e-mail existente continua funcionando
ALLOWED_LOGIN_DOMAINSRestringe cadastros a domínios (separados por vírgula)
ALLOWED_LOGIN_EMAILSRestringe cadastros a e-mails específicos (separados por vírgula)
BLOCKED_SIGNUP_DOMAINSImpede domínios específicos de se cadastrarem (separados por vírgula)
SIGNUP_MX_VALIDATION_ENABLEDRejeita domínios sem registro MX ou com um backend de e-mail na denylist
BLOCKED_EMAIL_MX_HOSTSTrechos de hosts MX a bloquear; usado apenas junto com a variável acima
DISABLE_INVITATIONS / NEXT_PUBLIC_DISABLE_INVITATIONSDesabilita convites de workspace globalmente
DISABLE_PUBLIC_API / NEXT_PUBLIC_DISABLE_PUBLIC_APIDesabilita a API pública globalmente
DISABLE_AUTHIgnora a autenticação por completo, criando uma sessão anônima para cada requisição

DISABLE_AUTH=true transforma qualquer pessoa que consiga alcançar a instância em um usuário com privilégios totais. Use apenas em uma instância de um único usuário em rede privada, nunca atrás de um ingress exposto à internet.

Execução de Código

VariávelDescrição
SANDBOX_PROVIDERProvedor de sandbox remoto: e2b (padrão) ou daytona
E2B_ENABLED / E2B_API_KEYHabilita a execução remota no E2B
DAYTONA_API_KEYChave de API do Daytona (usada quando SANDBOX_PROVIDER=daytona)
IVM_MAX_EXECUTIONS_PER_WORKERExecuções antes de um worker isolated-vm ser reciclado
IVM_MAX_BROKERS_PER_EXECUTIONBrokers de chamadas ao host por execução
IVM_MAX_BROKER_ARGS_JSON_CHARSTamanho máximo do payload de argumentos
IVM_MAX_BROKER_RESULT_JSON_CHARSTamanho máximo do payload de resultado

Sem um provedor remoto, o código do usuário roda em um isolate V8 no próprio processo, dentro do contêiner da aplicação. Veja Segurança.

Rede & Limites

VariávelPadrãoDescrição
API_MAX_JSON_BODY_BYTES50 MBCorpo JSON máximo em rotas de API validadas por contrato
CHAT_MAX_REQUEST_BYTES220 MBCorpo máximo no endpoint público de chat deployado
WEBHOOK_MAX_REQUEST_BYTES10 MBCorpo máximo nos endpoints públicos receptores de webhook
WORKFLOW_EXECUTION_CONCURRENCY_LIMIT75Execuções de workflow em paralelo
WEBHOOK_EXECUTION_CONCURRENCY_LIMIT75Execuções disparadas por webhook em paralelo
SCHEDULE_EXECUTION_CONCURRENCY_LIMIT30Execuções agendadas em paralelo
RESUME_EXECUTION_CONCURRENCY_LIMIT50Execuções retomadas em paralelo
ALLOW_PRIVATE_DATABASE_HOSTSnão definidaPermite que ferramentas de banco de dados/conectores alcancem hosts privados, reservados e de loopback. Afrouxa a barreira contra SSRF

O limite de tamanho de corpo do seu proxy reverso precisa ser pelo menos tão grande quanto os limites da aplicação acima. Veja Rede.

Observabilidade

VariávelDescrição
OTEL_EXPORTER_OTLP_ENDPOINTEndpoint do coletor OTLP
OTEL_EXPORTER_OTLP_HEADERSHeaders de autenticação, key=value separados por vírgula
OTEL_TRACES_SAMPLER_ARGProporção de amostragem de traces
OTEL_DEPLOYMENT_ENVIRONMENTRótulo de ambiente nos spans emitidos
TELEMETRY_SAMPLING_RATIOProporção de amostragem no nível da aplicação
TELEMETRY_ENDPOINTPara onde a telemetria anônima é enviada. O padrão é https://telemetry.seeyu.ai/v1/traces — aponte para o seu próprio coletor para manter os traces internos
NEXT_TELEMETRY_DISABLEDDefina como 1 para desabilitar completamente a telemetria anônima
GRAFANA_OTLP_ENDPOINT / GRAFANA_OTLP_HEADERS / GRAFANA_DEPLOYMENT_ENVIRONMENTExportação OTLP para o Grafana Cloud

Veja Observabilidade.

Bases de Conhecimento

VariávelDescrição
KB_EMBEDDING_MODELModelo de embeddings para novas bases de conhecimento. O padrão é text-embedding-3-small; um valor não suportado recai para o padrão
COHERE_API_KEYHabilita o reranker do bloco Knowledge

Chat & PII

VariávelDescrição
COPILOT_API_KEYChave de API do Chat. Sem ela, o bloco Studio Chat, os jobs de prompt agendados e a Inbox não funcionam
NEXT_PUBLIC_CHAT_DISABLEDDefina como true para ocultar o módulo Chat: o workspace abre no seu primeiro workflow, sem lista de chats, sem tarefas agendadas e sem o painel Chat no editor. O Chat aparece quando a variável não está definida; bun run setup a define para você se pular a chave do chat
PII_REDACTIONSuprime PII dos logs de workflow via regras de Data Retention; requer o serviço de PII e um INTERNAL_API_BASE_URL alcançável no cluster
PII_GRANULAR_REDACTIONExpõe adicionalmente os estágios de supressão que alteram a execução
DURABLE_SECRET_PROVENANCE_ENFORCED_SURFACESArmazenamentos duráveis em que um valor cuja procedência de segredo nunca foi registrada faz a execução falhar em vez de apenas gerar um aviso. all, ou um subconjunto separado por vírgula de memory, table-row, knowledge. Não definida (nada aplicado) por padrão
ADMIN_API_KEYChave de API de administração para operações de GitOps e provisionamento de organizações

Recursos Enterprise

Em implantações auto-hospedadas, os recursos enterprise são liberados por configuração, não por cobrança. Uma única chave liga o conjunto completo; as flags por recurso abaixo dela sobrescrevem essa chave nos dois sentidos.

VariávelDescrição
ENTERPRISE_ENABLED, NEXT_PUBLIC_ENTERPRISE_ENABLEDHabilita todo o conjunto de recursos enterprise
INSTANCE_ORG_NAMENome da organização à qual todo usuário entra automaticamente no cadastro
INSTANCE_ORG_SLUGSlug dessa organização (derivado do nome quando omitido)
INSTANCE_ORG_OWNER_EMAILProprietário dessa organização (por padrão, o primeiro usuário a se cadastrar)

A maioria dos recursos enterprise lê suas configurações da organização que é dona de um workspace, então habilitar apenas as flags não basta — a implantação também precisa de um modelo de organização. Veja o guia enterprise auto-hospedado para as flags por recurso, os dois padrões de organização e a Admin API.

Armazenamento de Arquivos

Por padrão, o Studio grava os uploads no disco local. Em produção, aponte-o para AWS S3, Azure Blob ou Google Cloud Storage. Veja Object Storage para a configuração completa, o layout do bucket e a política de IAM.

VariávelDescrição
AWS_REGIONRegião da AWS — defina junto com S3_BUCKET_NAME para habilitar o S3
AWS_ACCESS_KEY_IDAccess key da AWS. Omita para usar a cadeia de credenciais de instância/IRSA
AWS_SECRET_ACCESS_KEYSecret key da AWS. Omita para usar a cadeia de credenciais de instância/IRSA
S3_BUCKET_NAMEBucket geral de arquivos do workspace — defina junto com AWS_REGION para habilitar o S3
AZURE_STORAGE_CONTAINER_NAMEContainer geral de arquivos — defina junto com as credenciais do Azure para habilitar o Blob (tem precedência sobre o S3)
AZURE_CONNECTION_STRINGString de conexão do Azure, ou use AZURE_ACCOUNT_NAME + AZURE_ACCOUNT_KEY
GCS_BUCKET_NAMEBucket geral de arquivos do workspace — habilita o GCS quando nem o Azure Blob nem o S3 estão configurados
GCS_PROJECT_IDID do projeto na GCP. Omita para inferir das credenciais/ADC
GCS_CREDENTIALS_JSONJSON da conta de serviço, inline. Omita para usar Application Default Credentials (Workload Identity, GOOGLE_APPLICATION_CREDENTIALS)

Provedores de E-mail

Configure pelo menos um. Todo provedor configurado permanece ativo e é tentado em ordem — Resend → AWS SES → SMTP → Azure Communication Services → Gmail — passando para o próximo apenas em caso de falha. Sem nenhum configurado, o e-mail simplesmente não é enviado, silenciosamente. Configuração, verificação e resolução de problemas estão em E-mail.

ProvedorVariáveis
CompartilhadasFROM_EMAIL_ADDRESS, EMAIL_DOMAIN, EMAIL_VERIFICATION_ENABLED
ResendRESEND_API_KEY
AWS SESAWS_SES_REGION (credenciais pela cadeia de provedores da AWS)
SMTPSMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, SMTP_SECURE
Azure ACSAZURE_ACS_CONNECTION_STRING
GmailGMAIL_CREDENTIALS_JSON, GMAIL_SENDER

Limites

Implantações auto-hospedadas (com cobrança desabilitada) rodam sem limites de plano: sem rate limits, sem timeouts de execução, sem tetos de tabelas ou armazenamento e sem exclusão de dados por retenção. Cada limite pode ser reativado individualmente, definindo explicitamente a variável dele.

VariávelAtivaValor sugerido
RATE_LIMIT_FREE_SYNCExecuções sincronizadas por minuto50
RATE_LIMIT_FREE_ASYNCExecuções assíncronas por minuto200
RATE_LIMIT_FREE_API_ENDPOINTRequisições ao endpoint da API v1 por minuto30
EXECUTION_TIMEOUT_FREETimeout de execução sincronizada (segundos)300
EXECUTION_TIMEOUT_ASYNC_FREETimeout de execução assíncrona (segundos)5400
FREE_TABLES_LIMITMáximo de tabelas de usuário por workspace5
FREE_TABLE_ROWS_LIMITMáximo de linhas por tabela de usuário50000
FREE_STORAGE_LIMIT_GBCota de armazenamento de arquivos (GB)5

Sem cobrança, toda conta é resolvida para o tier gratuito, então apenas as variáveis do tier gratuito se aplicam. Definir uma variável aplica somente aquele limite — os demais continuam ilimitados.

Nenhuma das implantações predefine esses valores. O Helm chart fazia isso antes, o que aplicava tetos de planos hospedados em instalações auto-hospedadas; o chart 1.5.0 removeu os presets, então Compose e Kubernetes se comportam de forma idêntica.

Exemplo de .env

# Core
DATABASE_URL=postgresql://postgres:postgres@db:5432/studio
NEXT_PUBLIC_APP_URL=https://studio.yourdomain.com
BETTER_AUTH_URL=https://studio.yourdomain.com

# Secrets — generate each with `openssl rand -hex 32`
BETTER_AUTH_SECRET=<openssl rand -hex 32>
ENCRYPTION_KEY=<openssl rand -hex 32>
INTERNAL_API_SECRET=<openssl rand -hex 32>
API_ENCRYPTION_KEY=<openssl rand -hex 32>
CRON_SECRET=<openssl rand -hex 32>

# Coordination (required past one replica)
REDIS_URL=redis://redis:6379

# Models — OPENAI_API_KEY also powers knowledge base embeddings
OPENAI_API_KEY=sk-...

# Email
RESEND_API_KEY=re_...
FROM_EMAIL_ADDRESS="Studio <noreply@yourdomain.com>"

# Access control
ALLOWED_LOGIN_DOMAINS=yourdomain.com

Veja apps/core-api/.env.example para as opções dos serviços, e apps/web/.env.example para as da web.