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.

hidden: true

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.


hidden: true

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 um container, 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, container, 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

hidden: true

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.