
Hospedagem de projetos: comparando estático, serverless, containers e VPS
Escolher hospedagem é escolher um modelo de execução, não uma marca. Site estático, função serverless, container gerenciado e servidor virtual têm perfis distintos de custo, latência e trabalho operacional. Este artigo compara os quatro modelos com números de referência e critérios objetivos para decidir e, quando necessário, migrar.
Os quatro modelos de execução
| Modelo | Como executa | Custo típico inicial | Trabalho operacional | Melhor para |
|---|---|---|---|---|
| Estático / CDN | Arquivos servidos da borda | Gratuito a baixo | Mínimo | Sites, blogs, documentação, SPAs |
| Serverless / edge | Função sob demanda por requisição | Pago por uso | Baixo | APIs de tráfego irregular, webhooks |
| Container gerenciado | Processo em execução contínua | Moderado | Médio | APIs constantes, jobs, WebSocket |
| VPS / servidor próprio | Máquina virtual completa | Fixo previsível | Alto | Controle total, custo estável em escala |
A diferença principal é quem cuida do que. No estático, você entrega arquivos. No serverless, você entrega funções e a plataforma escala. Em containers, você entrega uma imagem e define recursos. Em VPS, você é responsável por sistema operacional, atualizações, firewall, monitoramento e reinício em falha.
Estático não significa simples demais
Sites gerados em build e servidos por CDN entregam a melhor relação entre desempenho, custo e segurança: não há servidor de aplicação para invadir, a latência é baixa em qualquer região e o custo tende a zero em volumes pequenos. Boa parte dos projetos que começa em servidor completo poderia ser estática com algumas funções isoladas para formulários e integrações.
# Exemplo de build de site estático em CI
name: deploy
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: "22", cache: "npm" }
- run: npm ci
- run: npm run build
- name: Publicar diretório dist
run: npx wrangler pages deploy dist --project-name meu-site
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CF_TOKEN }}Serverless: escala automática e o problema do cold start
Funções serverless sobem sob demanda e escalam sozinhas, o que é ideal para tráfego imprevisível. O preço é a inicialização a frio quando não há instância quente. A magnitude depende do runtime e do tamanho do pacote.
| Runtime | Cold start aproximado | Observação |
|---|---|---|
| Isolate em edge (JS/WASM) | 1 – 10 ms | Sem acesso completo a APIs de Node |
| Node.js em função gerenciada | 150 – 900 ms | Cresce com o tamanho do bundle |
| Python | 200 ms – 1,5 s | Dependências pesadas aumentam bastante |
| JVM / .NET | 1 – 5 s | Exige aquecimento ou snapshot |
| Container serverless | 300 ms – 3 s | Depende da imagem e do que roda no start |
- Reduza o pacote: dependências não usadas custam milissegundos em toda invocação fria.
- Reaproveite conexões fora do handler para evitar reconectar a cada chamada.
- Cuidado com bancos relacionais: muitas funções simultâneas esgotam conexões; use pooler.
- Tarefas longas não combinam com serverless por causa do tempo máximo de execução.
// Cliente criado no escopo do módulo: reaproveitado entre invocações quentes
import { Pool } from "pg";
const pool = new Pool({
connectionString: process.env["DATABASE_URL"],
max: 2, // baixo por instância: muitas instâncias somam conexões
});
export async function handler(req: Request) {
const { rows } = await pool.query("select id, nome from produtos limit 20");
return Response.json(rows);
}Containers: previsibilidade sem administrar servidor
Plataformas de container gerenciado ficam no meio do caminho: o processo permanece vivo, o que elimina cold start e permite conexões persistentes e tarefas em segundo plano, enquanto a plataforma cuida de rede, TLS e reinício em falha. É a escolha natural para APIs com tráfego constante, filas e WebSocket.
# Imagem enxuta com build em múltiplos estágios
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build && npm prune --omit=dev
FROM node:22-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/dist ./dist
USER node
EXPOSE 3000
HEALTHCHECK --interval=30s CMD wget -qO- http://localhost:3000/health || exit 1
CMD ["node", "dist/server.js"]VPS: controle total e responsabilidade total
Um servidor virtual custa pouco e entrega recursos generosos, mas transfere para você a operação: atualizações de segurança, certificados, firewall, backup, monitoramento e recuperação em falha. Faz sentido quando há necessidade de software específico, custo estável em alto tráfego ou exigência de dados em determinada jurisdição.
Ao calcular o custo de um VPS, inclua seu tempo. Duas horas por mês de manutenção valem mais do que a diferença de preço para uma plataforma gerenciada na maioria dos projetos pequenos.
Custo real: além do preço de tabela
| Item de custo | Onde costuma surpreender |
|---|---|
| Tráfego de saída | Cobrança por GB, alta em vídeo e imagens sem otimização |
| Banco de dados | Frequentemente custa mais que a aplicação |
| Build minutes | Pipelines longos em plano gratuito esgotam a cota |
| Armazenamento de imagens | Registro de containers cobra por GB retido |
| Logs e métricas | Retenção longa multiplica o valor |
| Domínio e e-mail | Renovação anual e serviço transacional de e-mail |
Checklist antes de colocar no ar
- HTTPS obrigatório com redirecionamento de HTTP e renovação automática de certificado.
- Variáveis de ambiente na plataforma, nunca no repositório.
- Endpoint de saúde e alerta quando ele falhar.
- Backup automático do banco com restauração testada.
- Log de erro estruturado com identificador de requisição.
- Domínio próprio configurado e cabeçalhos de segurança básicos habilitados.
- Limite de gasto ou alerta de orçamento configurado na plataforma.
Quando migrar de modelo
Migre por sintoma, não por moda. Serverless ficando caro em volume alto e constante indica container. Container ocioso a maior parte do dia indica serverless. VPS consumindo suas noites indica plataforma gerenciada. Para reduzir o custo de mudar, mantenha a aplicação sem dependência forte de recursos proprietários: configuração por variáveis de ambiente, armazenamento compatível com S3 e banco padrão de mercado.
Conclusão
Comece pelo modelo mais simples que atende ao requisito: estático quando não há estado, serverless quando o tráfego é irregular, container quando o processo precisa viver, VPS quando o controle compensa a operação. Documente a decisão, monitore custo e latência e reveja quando algum dos dois sair do esperado.
Perguntas frequentes
+Plano gratuito serve para projeto de portfólio?
Serve bem. A limitação comum é hibernação do serviço após inatividade e cotas de build. Para demonstrações em entrevista, prefira hospedagem estática, que não hiberna e responde imediatamente.
+Preciso de Kubernetes para hospedar minha API?
Quase nunca em projetos pequenos e médios. Plataformas de container gerenciado entregam o mesmo resultado com uma fração da complexidade operacional.
+Onde hospedar o banco de dados?
Prefira serviço gerenciado com backup automático e réplica. Banco no mesmo VPS da aplicação economiza no início, mas concentra risco: uma falha derruba tudo e a restauração fica mais difícil.
+A hospedagem precisa ficar no Brasil por causa da LGPD?
A LGPD não exige armazenamento no país; exige base legal, segurança adequada e garantias em transferência internacional. Latência menor para usuários brasileiros costuma ser o motivo técnico mais relevante.
Fontes consultadas
Revisão editorial: publicado em . Última revisão em . Conteúdo educativo, sem patrocínio das ferramentas citadas.
Leia também

No-code e low-code: quando faz sentido e quando o custo aparece depois
Critérios técnicos para decidir entre plataformas visuais e código próprio: limites de customização, dados, integrações, custo por usuário e caminhos de saída.

Editores de código: como escolher entre VS Code, Neovim, JetBrains e Zed
Comparação prática entre os principais editores e IDEs: consumo de memória, LSP, refatoração, extensões e cenários em que cada um rende mais.

Monitoramento e Observabilidade: Saúde de Sistemas em Tempo Real
Diferencie monitoramento de observabilidade, entenda os três pilares (métricas, logs e traces) e aprenda a escolher e implementar ferramentas que realmente previnem incidentes.