Pular para o conteúdo
Estudos de Caso

Como Estruturei uma Arquitetura Web Resiliente com Django 6, Docker e Cloudflare em VPS

Makis Jeanty · 01 de Agosto de 2026

# Como Estruturei uma Arquitetura Web Resiliente com Django 6, Docker e Cloudflare em VPS

Publicar uma aplicação web em produção envolve muito mais do que simplesmente executar um comando `manage.py runserver`. Quando o objetivo é entregar alta performance, segurança rigorosa contra ameaças e disponibilidade contínua em uma **VPS de baixo custo**, a arquitetura precisa ser planejada do sistema operacional até a camada de CDN.

Neste artigo, compartilho os detalhes técnicos de como estruturei o ambiente de produção do **`makisjeanty.com`** combinando **Django 6**, **Daphne ASGI**, **Docker Compose**, **MySQL 8.0**, **Redis** e **Cloudflare Full Proxy**.

---

## 🛡️ 1. Segurança & Execução Não-Root em Containers

O primeiro princípio adotado foi o da **menor permissão**. No `Dockerfile`, a aplicação não roda com privilégios de `root`. Um usuário de sistema dedicado (`appuser:appgroup`) foi provisionado para isolar o processo:

```dockerfile
# Criar usuário não privilegiado para execução do container
RUN addgroup --system appgroup && adduser --system --ingroup appgroup appuser

WORKDIR /app
COPY --chown=appuser:appgroup . /app/
USER appuser
```

Isso garante que, mesmo na hipótese remota de uma vulnerabilidade no nível de aplicação, o atacante não terá acesso root ao container ou ao host.

---

## 🔒 2. SSL/TLS com Cloudflare & Proxy Reverso Nginx

Para garantir criptografia ponta a ponta e proteção contra ataques DDoS, o servidor web **Nginx** atua como proxy reverso escutando nas portas `80` (HTTP) e `443` (HTTPS):

1. **Redirecionamento Canônico**: O tráfego para `www.makisjeanty.com` é redirecionado via regra 301 para a raiz `https://makisjeanty.com`.
2. **Strict-Transport-Security (HSTS)**: Forçado para subdomínios com pré-carregamento.
3. **Modo Full Proxy**: A Cloudflare atua como escudo frontal na borda (Edge Network), terminando a conexão SSL pública e trafegando criptografado até o Nginx de origem.

---

## ⚡ 3. Concorrência e WebSockets com Daphne ASGI e Redis

Em vez de utilizar o WSGI tradicional, optamos pelo servidor de aplicação **Daphne (ASGI)**. Isso permite que a mesma infraestrutura sirva requisições HTTP síncronas e conexões **WebSocket bidirecionais** (utilizadas pelo Chat ao Vivo e Fórum da Comunidade).

O **Redis** é utilizado simultaneamente como:
- **Backend de Cache de Sessões**: Reduzindo consultas repetitivas ao banco MySQL.
- **Layer de Canais (Django Channels)**: Roteando mensagens de WebSocket entre clientes com latência inferior a 10ms.

---

## 📊 4. Verificação de Saúde (Health Checks Automatizados)

A aplicação conta com um endpoint seguro de monitoria em `/health/` que valida a conectividade com o banco de dados e o Redis antes de responder `HTTP 200 OK`:

```python
def health_check(request):
db_ok = connection.ensure_connection() is None
cache.set('_health_check', '1', 5)
redis_ok = (cache.get('_health_check') == '1')

status_code = 200 if (db_ok and redis_ok) else 503
return JsonResponse({
'status': 'ok' if status_code == 200 else 'degraded',
'database': 'ok' if db_ok else 'error',
'redis': 'ok' if redis_ok else 'error',
}, status=status_code)
```

---

## 🎯 Conclusão

Construir uma infraestrutura moderna não exige investimentos estratosféricos em nuvens proprietárias. Com **containers bem configurados**, **práticas de menor privilégio** e uma **camada de CDN bem ajustada**, é possível alcançar um nível de maturidade e performance enterprise mantendo custos operacionais extremamente baixos.

Comentários

Seja o primeiro a comentar.