OpenCall

Variáveis de ambiente

Referência completa — de onde vem cada valor.

Aqui é a referência rápida mais um .env.example pronto pra copiar.

Cole o bloco abaixo na aba de variável do serviço escolhido. Em Render ou Railway, colar tudo irá salvar cada chave em uma linha de tabela!

# Discord OAuth — o primeiro login (banco vazio) vira ADMIN automático.
DISCORD_CLIENT_ID=
DISCORD_CLIENT_SECRET=
NEXTAUTH_SECRET=
NEXTAUTH_URL=http://localhost:3000

# LiveKit
LIVEKIT_URL=
LIVEKIT_API_KEY=
LIVEKIT_API_SECRET=

# Postgres
DATABASE_URL=

# Armazenamento (opcional — sem ele o chat fica sem anexo de imagem).
# O R2 é o padrão; pra qualquer outro endpoint S3 preencha R2_ENDPOINT/R2_REGION
# em vez de R2_ACCOUNT_ID.
R2_ACCOUNT_ID=
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET=
NEXT_PUBLIC_R2_PUBLIC_BASE_URL=
R2_ENDPOINT=
R2_REGION=

# Dashboard de infra (opcional, só self-host)
SERVER_METRICS_INGEST_SECRET=
VPS_SSH_HOST=
VPS_SSH_PORT=22
VPS_SSH_USER=
VPS_SSH_PRIVATE_KEY=

# Geral
NEXT_PUBLIC_APP_URL=http://localhost:3000
NEXT_PUBLIC_apiBaseUrl=http://localhost:3000

# Opcionais
NEXT_PUBLIC_RTC_ENABLED=
APP_COMMIT_SHA=
GIPHY_API_KEY=

Cada grupo abaixo é detalhado na página dele.

Discord e sessão (detalhes)

VariávelObservação
DISCORD_CLIENT_ID
DISCORD_CLIENT_SECRET
NEXTAUTH_SECRETopenssl rand -base64 32
NEXTAUTH_URLURL pública do app

A primeira conta que logar com o banco vazio vira ADMIN — não existe variável pra isso.

LiveKit (Cloud ou self-host)

VariávelObservação
LIVEKIT_URLwss://... — mesmo formato no cloud e no self-host
LIVEKIT_API_KEY
LIVEKIT_API_SECRET

Postgres (detalhes)

VariávelObservação
DATABASE_URL

Geral

VariávelObservação
NEXT_PUBLIC_APP_URLMesma URL do NEXTAUTH_URL
NEXT_PUBLIC_apiBaseUrlSempre igual ao NEXT_PUBLIC_APP_URL — Server Actions e Server Components chamam a própria API do app por essa URL absoluta

Sem essa variável o painel de admin quebra

Sem NEXT_PUBLIC_apiBaseUrl as Server Actions de admin e de usuário fazem fetch em undefined/api/... e falham. Como é NEXT_PUBLIC_*, ela é gravada no bundle em tempo de build — configurar depois e reiniciar o serviço não resolve, precisa de um deploy/build novo.

Armazenamento (detalhes, opcional)

Sem elas o app sobe normalmente — só não aceita anexo de imagem no chat. O prefixo R2_ nomeia o slot, não o provedor: as mesmas variáveis servem Cloudflare R2 e Neon Object Storage.

VariávelObservação
R2_BUCKET
R2_ACCESS_KEY_ID
R2_SECRET_ACCESS_KEY
NEXT_PUBLIC_R2_PUBLIC_BASE_URLVai pro bundle do cliente, não é segredo
R2_ACCOUNT_IDSó no R2 — o endpoint é derivado dele
R2_ENDPOINTQualquer endpoint S3 que não seja o R2 (Neon, MinIO). Setar ela também muda o client pra path-style
R2_REGIONSó junto com R2_ENDPOINT. Default auto, que é o que o R2 exige; o Neon precisa da região real do projeto

Opcionais

VariávelObservação
GIPHY_API_KEYHabilita o botão de GIF no chat. Crie um app em developers.giphy.com. Nunca NEXT_PUBLIC_* — a busca passa pelo servidor
NEXT_PUBLIC_RTC_ENABLEDfalse, 0 ou off desliga voz/vídeo no deploy inteiro. Qualquer outro valor (inclusive vazia) mantém ligado
APP_COMMIT_SHACommit do deploy. Com ela, abas abertas durante um deploy novo recebem o aviso de "atualize a página". No Railway use RAILWAY_GIT_COMMIT_SHA

Dashboard de infra (opcional — só self-host)

VariávelObservação
SERVER_METRICS_INGEST_SECRETMesmo valor no app e na VPS
VPS_SSH_HOSTÉ também o que liga a aba "Infra" do admin
VPS_SSH_PORTNormalmente 22
VPS_SSH_USERUm usuário restrito, não root
VPS_SSH_PRIVATE_KEYChave privada PEM

VULTR_API_KEY (se você usa Vultr) não vai no app — ela fica só na VPS, no coletor de banda.

On this page