Deploy do Next.js
Onde rodar o app — e por que Vercel não é uma opção aqui.
A restrição que decide tudo
Chat, presença (quem está online, quem está em qual canal) e o aviso de "fulano está te chamando" são entregues em tempo real via Server-Sent Events, e o pub/sub por trás disso é em memória, dentro do próprio processo Node — não usa Redis nem nenhum broker externo hoje.
Na prática isso significa: o app precisa rodar como um único processo Node persistente. Se duas requisições caem em duas instâncias diferentes (dois containers, duas funções serverless), cada uma tem sua própria memória — um evento publicado numa não chega na outra, e presença/chat/chamada param de funcionar de forma confiável.
Por isso Vercel não funciona
Vercel roda cada rota como função serverless: sem processo persistente, sem memória compartilhada entre invocações, e com timeout de execução nas funções. As três rotas de Server-Sent Events do OpenCall dependem de manter uma conexão aberta indefinidamente com estado em memória — isso quebra o modelo do Vercel de raiz, não é só "vai ser lento". Adaptar pra Vercel exigiria trocar o pub/sub por Redis (Upstash, por exemplo) e não é algo coberto por esta documentação hoje.
Qualquer host que rode um container/processo de longa duração funciona: Railway, Fly.io, Render, um VPS com Docker — inclusive a mesma VPS do LiveKit self-host.
Opção recomendada: Railway
Cobra por uso real (CPU/RAM/rede), não por instância reservada. O plano Hobby (US$5/mês, esse valor já vira crédito de uso) cobre confortavelmente um app + Postgres de comunidade pequena/média — normalmente fica entre US$5-25/mês total.
Por que Railway e não outro host de container: a CLI (railway) é
scriptável de ponta a ponta — criar projeto, setar env var, subir deploy,
tudo por comando, sem navegar em dashboard. Isso é o que permite que uma IA
provisione a infra inteira sozinha a partir do runbook para
IA. Deploy automático a cada push do GitHub também vem de
graça.
Passos
Crie conta em railway.com, conecte o GitHub.
New Project → Deploy from GitHub repo → selecione o repo do OpenCall.


Adicione o Postgres (ver Banco de dados).

Na aba Variables do serviço do app, cole todas as variáveis desta documentação (ver Variáveis de ambiente).
Settings → Networking → gere um domínio (*.up.railway.app) ou
conecte um domínio próprio.
Volte no Discord Developer Portal e complete o Redirect URI com esse domínio definitivo.
O build usa o Dockerfile do repo automaticamente a cada push.
Opção: mesma VPS do LiveKit self-host
Só relevante se você já optou por self-host (ver LiveKit self-host). Economiza o custo de um segundo serviço, mas acopla deploy do app à manutenção do servidor de voz e exige você mesmo cuidar de process manager e deploy — ver a seção "Rodar o Next.js na mesma VPS?" naquela página antes de escolher esse caminho.
Custo de referência (verifique valores atuais)
- Railway — Pricing
- Vultr — Pricing (se for hospedar numa VPS própria)