blog
Fundamentos

Localhost vs Produção: o que muda e por que importa

Seu app funciona no localhost. Mas e na hora de colocar no ar? Entenda as diferenças entre desenvolvimento local e produção, e por que tantos vibecoders travam aqui.

TL;DR

localhost:3000 é o seu playground. Produção é o mundo real. A diferença entre os dois é o que separa "fiz um app" de "tenho um produto". Este artigo explica exatamente o que muda, e como não travar nessa transição.


O momento que todo vibecoder conhece

Você passou horas (ou minutos, com a ajuda de uma IA) construindo algo incrível. Tá rodando lindo no seu navegador. Você mostra pra um amigo e ele pergunta: "Manda o link?"

E aí vem o silêncio.

Porque localhost:3000 não é um link. É o seu computador falando com ele mesmo. E a distância entre isso e um site de verdade na internet é onde 90% dos vibecoders travam.

O que é localhost, afinal?

Quando você roda npm run dev, seu computador vira um servidor web temporário. O "localhost" é literalmente "este computador aqui". A porta 3000 é como o número de um apartamento, indica qual programa está atendendo.

Só você tem acesso. Desligou o terminal? Morreu.

O que muda em produção?

1. Seu código precisa de uma casa permanente

Em vez de rodar no seu notebook, o app precisa viver em um servidor que fica ligado 24/7. Pode ser uma instância dedicada, uma máquina virtual, ou um serviço serverless, mas precisa estar sempre disponível.

2. Variáveis de ambiente

No localhost, muita gente coloca senhas e chaves direto no código. Em produção, isso é um desastre de segurança. Você precisa usar variáveis de ambiente: configurações que existem no servidor mas nunca no código.

# Em vez disso no código:
const dbUrl = "postgresql://user:senha@localhost:5432/meubanco"
 
# Você usa isso:
const dbUrl = process.env.DATABASE_URL

3. HTTPS é obrigatório

No localhost, tudo roda em HTTP (sem o "S" de seguro). Na internet, HTTPS é obrigatório. Sem ele, navegadores mostram avisos assustadores, funcionalidades como câmera e geolocalização não funcionam, e o Google te penaliza no ranking.

Configurar SSL manualmente é chato. Plataformas modernas como o Veloz fazem isso automaticamente.

4. Banco de dados

Aquele PostgreSQL ou SQLite rodando na sua máquina? Ele não existe em produção. Você precisa de um banco de dados hospedado, seja um serviço gerenciado (como Supabase ou Neon) ou um banco rodando no seu servidor.

E não esqueça: os dados do localhost não migram sozinhos. Você precisa rodar migrations e, possivelmente, seeds.

5. DNS e domínio

No localhost, o endereço é um IP local. Em produção, você precisa de um domínio (como meuapp.com.br) e configurar DNS para apontar para o seu servidor. Parece simples, mas é onde muita gente se perde com registros A, CNAME e propagação.

6. Performance e escala

Seu notebook tem 8GB de RAM e serve uma pessoa (você). Em produção, podem ser centenas ou milhares de pessoas acessando ao mesmo tempo. O servidor precisa aguentar, e de preferência estar perto dos seus usuários.

Se seus usuários estão no Brasil e seu servidor está nos EUA, cada clique tem 150-200ms de latência extra. Por isso fazer deploy no Brasil faz diferença.

Por que vibecoders travam aqui?

Porque ninguém ensina deploy. Tutoriais terminam em "rode npm run dev e pronto". Cursos focam em React, não em infraestrutura. E a documentação de deploy assume que você já sabe o que é Docker, Nginx e SSH.

O vibecoder moderno sabe construir. Ele usa Cursor, Bolt, ou Claude pra criar apps funcionais. Mas a hora de colocar no ar ainda parece um muro.

Como simplificar essa transição

A boa notícia: você não precisa aprender DevOps. Ferramentas modernas abstraem toda essa complexidade.

Com o Veloz, por exemplo, o processo é:

$ veloz deploy

Isso cuida de tudo: build, infraestrutura, SSL, DNS, banco de dados, variáveis de ambiente. Seu app sai do localhost para produção, no Brasil, com baixa latência, em segundos.

Checklist: do localhost à produção

Antes de fazer deploy, confira:

  • ✅ Nenhuma senha ou chave hardcoded no código
  • ✅ Todas as URLs usando variáveis de ambiente
  • ✅ Banco de dados em um serviço externo (não local)
  • ✅ Migrations prontas para rodar
  • ✅ Build funcionando (npm run build sem erros)
  • .env.example documentando todas as variáveis necessárias

FAQ

Por que meu app funciona no localhost mas não em produção?

Geralmente é por causa de variáveis de ambiente não configuradas, URLs hardcoded como localhost:3000, ou dependências que existem só na sua máquina. Em produção, tudo precisa ser explícito.

Preciso de HTTPS para meu projeto?

Sim. Navegadores modernos bloqueiam funcionalidades como geolocalização, câmera e cookies seguros sem HTTPS. Além disso, o Google prioriza sites com SSL no ranking.

Qual a diferença entre um banco local e um banco em produção?

O banco local roda na sua máquina e morre quando você desliga. Em produção, o banco precisa estar em um servidor sempre disponível, com backups e conexões seguras.