Como hospedar API com Docker no VPS
Como hospedar API com Docker no VPS: arquitetura simples e escalável
Publicar APIs em VPS com Docker é uma das formas mais eficientes de manter controle total sobre a infraestrutura sem a complexidade de serviços gerenciados. Este guia mostra uma arquitetura sólida para produção.
Arquitetura recomendada
Internet → Nginx (SSL + proxy) → API Container → Database Container
→ Volumes persistentes
→ Backup off-site
Cada componente roda em container separado, orquestrado pelo Docker Compose.
Exemplo completo de Docker Compose
services:
api:
build: .
env_file: .env
ports:
- "3000:3000"
depends_on:
db:
condition: service_healthy
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
db:
image: postgres:16-alpine
env_file: .env
volumes:
- pgdata:/var/lib/postgresql/data
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $POSTGRES_USER"]
interval: 10s
timeout: 5s
retries: 5
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./certs:/etc/nginx/certs
depends_on:
- api
restart: unless-stopped
volumes:
pgdata:
Protegendo segredos
Nunca coloque senhas diretamente no docker-compose.yml. Use arquivo .env:
# .env
POSTGRES_USER=api_user
POSTGRES_PASSWORD=senha_forte_aqui
POSTGRES_DB=api_db
API_SECRET_KEY=chave_secreta_aqui
Adicione .env ao .gitignore para nunca commitar segredos:
echo ".env" >> .gitignore
Healthcheck: por que é essencial
O healthcheck permite que o Docker saiba se o container está saudável. Se falhar:
- O container é marcado como "unhealthy".
- Ferramentas de monitoramento podem alertar.
- Outros containers com
depends_on: condition: service_healthyesperam antes de iniciar.
Atualização sem downtime
Para atualizar a API sem interrupção:
# Baixar nova versão da imagem
docker compose pull api
# Recriar apenas o container da API
docker compose up -d --no-deps api
O Nginx continua respondendo enquanto o novo container sobe. A transição é quase instantânea.
Para aplicações críticas, considere blue-green deployment: suba o container novo em outra porta, valide, e só então redirecione o Nginx.
Logs e observabilidade
# Logs de todos os serviços
docker compose logs -f
# Logs apenas da API
docker compose logs -f api
# Limitar saída
docker compose logs --tail=100 api
Para centralizar logs, considere enviar para uma stack de observabilidade (Loki + Grafana, ou Elasticsearch + Kibana).
Perguntas frequentes (FAQ)
Docker Compose aguenta tráfego alto?
Para a maioria dos projetos em VPS único, sim. Docker Compose orquestra containers de forma eficiente. Para alta disponibilidade multi-servidor, considere Docker Swarm ou Kubernetes.
Preciso de Nginx se a API já responde HTTP?
Sim, recomendamos. Nginx lida melhor com SSL, compressão, rate limiting e servir arquivos estáticos. Sua API deve focar na lógica de negócio.
Como faço rollback se a nova versão falhar?
Se você versionou as imagens (ex: minha-api:v1.2), basta alterar a tag no Compose e rodar docker compose up -d novamente com a versão anterior.
Próximos passos
- Monte a stack base com Docker no VPS
- Proteja o servidor com Hardening Linux
- Planeje migrações com Migrar sem downtime
Actualizado em: 16/03/2026
Obrigado!
