Infraestrutura

Hetzner, DigitalOcean, GCP e Vultr

Compare os principais provedores de nuvem usados no canal. Entenda prós, contras, preços e qual faz mais sentido para cada tipo de projeto.

Por que escolher bem o provedor?

A escolha do provedor de nuvem impacta diretamente o custo, a performance para seus usuários e a complexidade da sua infraestrutura. Nos tutoriais do canal, exploramos na prática os 4 principais provedores usados pela comunidade dev brasileira.

Independente do provedor, gerenciamos tudo com Terraform — então trocar ou combinar provedores é mais simples do que parece. O mesmo código Terraform funciona para criar um servidor na Hetzner ou na DigitalOcean, mudando apenas o provider e os parâmetros específicos.

Comparativo Rápido

ProvedorPreço (2vCPU/4GB)BR?Managed DBMelhor Para
Hetzner~€4/mês✅ ~€20/mêsCusto baixo, Europa
DigitalOcean~$18/mês✅ ~$25/mêsSimplicidade
GCP~$50/mês✅ SP✅ Cloud SQLIA/ML, escala
Vultr~$12/mês✅ SP✅ ~$15/mêsBR + custo ok
🇩🇪

Hetzner

Melhor custo-benefício da Europa

Provedor alemão com os preços mais competitivos do mercado. Um servidor com 2 vCPU e 4GB RAM custa cerca de €4/mês. Datacenter na Europa (Nuremberg, Falkenstein, Helsinki) e nos EUA. Perfeito para projetos pessoais e startups.

Prós

  • Preço muito baixo
  • Boa documentação
  • Terraform provider oficial
  • Object Storage (S3-compatible)

Contras

  • Sem datacenter no Brasil
  • Menos serviços gerenciados que AWS/GCP
Ideal para: Projetos pessoais, MVPs, startups economizando em infra
🌊

DigitalOcean

Simplicidade para desenvolvedores

Um dos provedores mais amados por desenvolvedores. Interface simples, boa documentação e preços razoáveis. Oferece Droplets (VMs), Managed Databases, Kubernetes (DOKS) e App Platform (PaaS).

Prós

  • Interface muito simples
  • Documentação excelente
  • Managed Kubernetes acessível
  • App Platform para deploy rápido

Contras

  • Mais caro que Hetzner
  • Sem datacenter no Brasil
Ideal para: Equipes pequenas que querem simplicidade e bom suporte
☁️

Google Cloud (GCP)

Escala global e serviços de IA

Plataforma da Google com mais de 200 serviços. Excelente para projetos que precisam de IA/ML, análise de dados em escala ou integração com produtos Google. Tem datacenter em São Paulo (southamerica-east1).

Prós

  • Datacenter em São Paulo
  • Integração com IA/ML do Google
  • BigQuery para analytics
  • Free tier generoso

Contras

  • Curva de aprendizado alta
  • Precificação complexa
  • Mais caro para uso geral
Ideal para: Projetos que precisam de escala global, IA ou datacenter no Brasil

Vultr

Alternativa competitiva global

Provedor com boa presença global e preços competitivos. Similar ao DigitalOcean mas com mais localizações e algumas vantagens de preço. Tem datacenters no Brasil (São Paulo).

Prós

  • Datacenter em São Paulo
  • Preços competitivos
  • Bare Metal disponível
  • Interface simples

Contras

  • Documentação menos completa
  • Menos recursos gerenciados
Ideal para: Projetos que precisam de baixa latência no Brasil com bom custo

Configuração inicial do servidor Ubuntu

Após provisionar o servidor com Terraform, siga estes passos para preparar o Ubuntu para rodar o Django com Nginx e Gunicorn:

# 1. Conecte ao servidor
ssh root@SEU_IP

# 2. Atualize o sistema
apt update && apt upgrade -y

# 3. Crie um usuário não-root para deploy
adduser deploy
usermod -aG sudo deploy
mkdir -p /home/deploy/.ssh
cp /root/.ssh/authorized_keys /home/deploy/.ssh/
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys

# 4. Instale dependências básicas
apt install -y git python3 python3-pip python3-venv nginx certbot python3-certbot-nginx postgresql-client

# 5. Instale o Python (versão mais recente via deadsnakes)
add-apt-repository ppa:deadsnakes/ppa -y
apt update && apt install -y python3.12 python3.12-venv python3.12-dev

Deploy do Django com Gunicorn e systemd

Configure o Gunicorn como um serviço systemd para que o Django inicie automaticamente e seja reiniciado em caso de falha:

# /etc/systemd/system/django.service
[Unit]
Description=Gunicorn daemon para projeto Django
Requires=django.socket
After=network.target

[Service]
Type=notify
User=deploy
Group=www-data
RuntimeDirectory=gunicorn
WorkingDirectory=/home/deploy/meu-projeto
ExecStart=/home/deploy/meu-projeto/venv/bin/gunicorn \
    --access-logfile /var/log/gunicorn/access.log \
    --error-logfile /var/log/gunicorn/error.log \
    --workers 3 \
    --bind unix:/run/gunicorn.sock \
    meu_projeto.wsgi:application
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target
# /etc/nginx/sites-available/meu-projeto
server {
    server_name meusite.com www.meusite.com;

    # Arquivos estáticos servidos diretamente pelo Nginx (mais rápido)
    location /static/ {
        alias /home/deploy/meu-projeto/staticfiles/;
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    location /media/ {
        alias /home/deploy/meu-projeto/media/;
        expires 30d;
    }

    # Proxy para o Gunicorn via Unix socket
    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }

    listen 80;
}

# Ative o site e configure SSL com Certbot:
# ln -s /etc/nginx/sites-available/meu-projeto /etc/nginx/sites-enabled/
# certbot --nginx -d meusite.com -d www.meusite.com

Configurando Cloudflare para DNS, CDN e SSL

O Cloudflare é gratuito e adiciona CDN, proteção DDoS e SSL automático. Veja como configurar:

  1. Crie uma conta gratuita em cloudflare.com
  2. Adicione o seu domínio e siga as instruções para trocar os nameservers
  3. No painel DNS, adicione um registro A com o IP do seu servidor
  4. Ative o proxy (nuvem laranja) para ter CDN + DDoS protection
  5. Em SSL/TLS, selecione o modo "Full (Strict)"
  6. Em Speed → Optimization, ative "Auto Minify" para HTML, CSS e JS
# Configuração do Cloudflare via Terraform:
provider "cloudflare" {
  api_token = var.cloudflare_api_token
}

data "cloudflare_zone" "meusite" {
  name = "meusite.com"
}

resource "cloudflare_record" "web" {
  zone_id = data.cloudflare_zone.meusite.id
  name    = "@"
  value   = hcloud_server.web.ipv4_address
  type    = "A"
  proxied = true  # ativa CDN + DDoS protection
  ttl     = 1     # automático quando proxied = true
}

resource "cloudflare_record" "www" {
  zone_id = data.cloudflare_zone.meusite.id
  name    = "www"
  value   = "meusite.com"
  type    = "CNAME"
  proxied = true
}

# Page Rule: forçar HTTPS
resource "cloudflare_page_rule" "https" {
  zone_id  = data.cloudflare_zone.meusite.id
  target   = "http://*meusite.com/*"
  priority = 1

  actions {
    always_use_https = true
  }
}

Object Storage para arquivos media do Django

Em produção, nunca armazene uploads de usuários no disco do servidor. Use Object Storage (compatível com S3) para escalar e ter redundância:

# pip install django-storages boto3

# settings.py
STORAGES = {
    "default": {
        "BACKEND": "storages.backends.s3boto3.S3Boto3Storage",
    },
    "staticfiles": {
        "BACKEND": "storages.backends.s3boto3.S3StaticStorage",
    },
}

# Configuração do Object Storage (Hetzner, DigitalOcean Spaces, Cloudflare R2)
AWS_ACCESS_KEY_ID = env('OBJECT_STORAGE_KEY')
AWS_SECRET_ACCESS_KEY = env('OBJECT_STORAGE_SECRET')
AWS_STORAGE_BUCKET_NAME = env('OBJECT_STORAGE_BUCKET')
AWS_S3_ENDPOINT_URL = env('OBJECT_STORAGE_ENDPOINT')
# Ex Hetzner: https://fsn1.your-objectstorage.com
# Ex DO Spaces: https://nyc3.digitaloceanspaces.com

AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_DEFAULT_ACL = 'public-read'
AWS_QUERYSTRING_AUTH = False  # URLs públicas sem parâmetros de auth

# URL pública dos arquivos
AWS_S3_CUSTOM_DOMAIN = env('OBJECT_STORAGE_CDN_URL', default=None)
# Se tiver CDN: 'cdn.meusite.com'
# Senão: f'{AWS_STORAGE_BUCKET_NAME}.{endpoint_sem_https}'

MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN or AWS_S3_ENDPOINT_URL.split("//")[1]}/{AWS_STORAGE_BUCKET_NAME}/'

Stack recomendada nos tutoriais

Nos projetos do canal, usamos geralmente esta combinação para ter boa performance a baixo custo:

  • Hetzner cx22 para o servidor de aplicação Django + Gunicorn + Nginx (€4/mês)
  • Managed PostgreSQL no Hetzner ou DigitalOcean — nunca no mesmo servidor da app
  • Object Storage Hetzner ou DigitalOcean Spaces para media e staticfiles do Django
  • Redis via Hetzner ou gerenciado para cache do Django e broker do Celery
  • Cloudflare para DNS, CDN gratuito, SSL e proteção DDoS
  • Terraform para provisionar tudo automaticamente e versionado no Git
Essa stack suporta facilmente dezenas de milhares de usuários mensais com custo abaixo de €30/mês. É o ponto de partida ideal antes de considerar Kubernetes ou serviços mais caros.

Monitoramento básico de produção

Mesmo em projetos pequenos, monitore o que está acontecendo em produção. Ferramentas essenciais:

  • Sentry: captura erros Python em tempo real com stack trace completo. Plano gratuito generoso. Configure com pip install sentry-sdk e adicione a DSN no settings.py
  • UptimeRobot: monitora se o site está acessível a cada 5 minutos e envia alerta por e-mail. Gratuito para até 50 monitores
  • Logs do Nginx e Gunicorn: configure rotação com logrotate para não encher o disco
  • Prometheus + Grafana: para métricas detalhadas quando o projeto crescer
# settings.py — Sentry para captura de erros
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
from sentry_sdk.integrations.celery import CeleryIntegration

sentry_sdk.init(
    dsn=env('SENTRY_DSN', default=''),
    integrations=[
        DjangoIntegration(transaction_style='url'),
        CeleryIntegration(),
    ],
    traces_sample_rate=0.1,  # 10% das transações para performance
    environment=env('ENVIRONMENT', default='production'),
    send_default_pii=False,  # não envia dados pessoais
)

Perguntas Frequentes

Qual provedor usar para começar?

Para aprender e fazer MVPs, comece com a Hetzner pelo custo baixíssimo (€4/mês para um servidor com 4GB RAM). Para projetos em produção que precisam de baixa latência no Brasil, considere Vultr SP ou GCP São Paulo.

Preciso de datacenter no Brasil?

Depende do seu público. Para sistemas internos e APIs de back-office, não. Para aplicações de e-commerce ou apps com usuários brasileiros que precisam de velocidade, sim — Vultr SP ou GCP São Paulo são boas opções. Com Cloudflare na frente, a diferença de latência para assets estáticos é mínima.

Como gerenciar vários provedores?

Com Terraform! É exatamente o que ensinamos no canal — você usa o mesmo workflow do Terraform independente do provedor. Cada um tem seu próprio provider oficial. Você pode até usar Hetzner para servidores e Cloudflare para DNS/CDN no mesmo arquivo .tf.

Qual o servidor mínimo para rodar Django em produção?

Para começar: 1 vCPU, 2GB RAM (mas pode ser apertado). Para a maioria dos projetos: 2 vCPU, 4GB RAM. Na Hetzner isso custa ~€4/mês (cx22). Adicione um managed database PostgreSQL separado para produção — nunca rode o banco no mesmo servidor da aplicação.

Preciso de um servidor dedicado?

Não na maioria dos casos. VMs (Cloud Servers/Droplets) são mais que suficientes para a maioria das aplicações Django. Servidores dedicados (bare metal) só fazem sentido para cargas muito pesadas de CPU/memória ou requisitos de segurança específicos.

O que é Object Storage e para que usar com Django?

Object Storage (similar ao S3 da AWS) é um armazenamento de arquivos barato e escalável. Use para servir arquivos de media (uploads de usuários) e arquivos estáticos do Django. Hetzner, DigitalOcean e Vultr têm Object Storage S3-compatible. Configure com django-storages para integração automática.

Como funciona o Cloudflare com um VPS?

Aponte seus nameservers para o Cloudflare, configure o DNS lá com o IP do seu servidor, e ative o proxy (nuvem laranja). O Cloudflare passa a ser o ponto de entrada: fornece CDN, SSL automático, proteção DDoS e cache de assets estáticos. Seu servidor só recebe o tráfego real da aplicação.

Como fazer backup automático dos dados?

Em produção use managed databases que incluem backup automático. Para backups do servidor, o Hetzner oferece snapshots automáticos por €1-2/mês. Para backups do banco PostgreSQL para Object Storage, configure um cron job com pg_dump + upload para o bucket.

Nginx ou Caddy para servir o Django?

Nginx é a opção mais usada e documentada, com vasto suporte da comunidade. Caddy é mais simples e gerencia SSL automaticamente via Let's Encrypt sem configuração. Para projetos novos que não exigem configurações avançadas, Caddy simplifica muito o setup. Os tutoriais do canal usam Nginx + Certbot.