A ideia aqui é : seu backend (a API REST) vai rodar no Render, e seu frontend (a SPA) vai rodar na Vercel. São dois deploys separados, porque são duas aplicações separadas. Parece óbvio quando a gente fala assim, mas é justamente esse o ponto que confunde muita gente — no localhost tudo parece uma coisa só, mas na hora do deploy você percebe que são dois mundos diferentes que precisam se conversar.
Pensa assim: o backend é o cozinheiro lá na cozinha do restaurante, e o frontend é o garçom que leva o pedido e traz a comida. Eles trabalham juntos, mas ficam em lugares diferentes. O deploy é basicamente dar um endereço fixo pra cada um deles.
Antes de tudo: organizando a casa
Antes de sair fazendo deploy, vale garantir algumas coisas no seu projeto:
O seu backend precisa ter uma porta configurável via variável de ambiente. No Node.js com Express, por exemplo, é algo assim:
const PORT = process.env.PORT || 3001;
app.listen(PORT, () => {
console.log(`servidor rodando na porta ${PORT}`);
});
Isso é importante porque o Render vai definir a porta automaticamente — ele não vai usar a 3001 que você colocou fixo no código. Se você não respeitar o process.env.PORT, o deploy até funciona mas o servidor não responde ninguém.
O seu frontend precisa ter a URL da API vindo de uma variável de ambiente também, não hardcoded como http://localhost:3001. No React com Vite, por exemplo, você cria um arquivo .env (que não vai pro deploy) e usa import.meta.env.VITE_API_URL. No Create React App, seria process.env.REACT_APP_API_URL. A ideia é a mesma: não deixar o endereço do backend cravado no código.
E, claro, ambos os projetos precisam estar no GitHub (ou GitLab, mas vou usar GitHub nos exemplos porque é o mais comum).
Deploy do backend no Render
Vamos começar pelo backend porque o frontend precisa saber o endereço dele pra funcionar. Faz sentido, né? Primeiro a gente dá um endereço pro cozinheiro, depois avisa o garçom onde ele tá.
Passo 1: criar uma conta no Render
Acessa render.com e cria uma conta. Dá pra usar o login do GitHub direto, o que já facilita a conexão com seus repositórios.
Passo 2: criar um novo Web Service
No dashboard do Render, clica em New e depois em Web Service. Ele vai pedir pra conectar um repositório do GitHub. Seleciona o repositório do seu backend.
Se o repositório não aparecer, provavelmente você precisa dar permissão pro Render acessar ele. Tem um link de "configure account" ali mesmo na tela que resolve isso.
Passo 3: configurar o serviço
Aqui é onde a mágica acontece (e onde muita gente se perde). O Render vai te pedir algumas informações:
- Name: o nome do seu serviço. Pode ser algo como
minha-api — esse nome vai fazer parte da URL final. - Region: escolhe a que fizer mais sentido pra você. Se o público é Brasil,
Oregon (US West) costuma ter uma latência razoável (não tem região no Brasil ainda, infelizmente). - Branch: geralmente
main ou master. - Root Directory: se o backend está na raiz do repositório, deixa em branco. Se está dentro de uma pasta (tipo
backend/), coloca o caminho aqui. - Runtime: seleciona
Node (ou a linguagem do seu backend). - Build Command: geralmente
npm install ou yarn install. Se você usa TypeScript e precisa compilar, seria algo como npm install && npm run build. - Start Command: o comando que inicia seu servidor. Tipo
npm start ou node dist/server.js (se usa TypeScript compilado).
Passo 4: variáveis de ambiente
Mais embaixo na mesma tela (ou na aba "Environment" depois de criar), você pode adicionar variáveis de ambiente. Aqui é onde você coloca coisas como:
DATABASE_URL — se você usa um banco de dadosJWT_SECRET — se tem autenticação- Qualquer outra variável que o seu
.env local tem
A variável PORT você não precisa definir — o Render já cuida disso sozinho.
Passo 5: escolher o plano
O Render tem um plano gratuito (Free) que funciona bem pra projetos de estudo e portfólio. O ponto é: no plano gratuito, o serviço "dorme" depois de 15 minutos sem receber requisições. Quando alguém acessa, ele "acorda", mas leva uns 30-50 segundos. Isso é normal e não significa que seu deploy deu errado — é só limitação do plano free mesmo.
Clica em Create Web Service e espera o build rodar. Você vai conseguir acompanhar os logs em tempo real ali na tela. Se tudo der certo, no final vai aparecer uma URL tipo https://minha-api.onrender.com. Essa é a URL pública do seu backend.
Anota essa URL. Você vai precisar dela daqui a pouco.