Cdn

CDN para Assets Estáticos - C-Suite

Este documento descreve a estratégia e configuração de CDN para servir assets estáticos do ecossistema C-Suite.

Visão Geral

Usar CDN (Content Delivery Network) para servir assets estáticos (CSS, JavaScript, imagens) reduz carga nos servidores e melhora performance para usuários.

Benefícios

Opções de CDN

1. CloudFront (AWS)

Vantagens:
- Integração nativa com S3
- SSL/TLS automático
- Cache configurável
- Integração com AWS

Configuração:

# cloudfront.yml
Resources:
  StaticAssetsDistribution:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        Origins:
          - DomainName: s3-bucket.s3.amazonaws.com
            Id: S3Origin
            S3OriginConfig:
              OriginAccessIdentity: ""
        Enabled: true
        DefaultCacheBehavior:
          TargetOriginId: S3Origin
          ViewerProtocolPolicy: redirect-to-https
          AllowedMethods:
            - GET
            - HEAD
          CachedMethods:
            - GET
            - HEAD
          ForwardedValues:
            QueryString: false
            Cookies:
              Forward: none
          MinTTL: 86400
          DefaultTTL: 86400
          MaxTTL: 31536000

2. Cloudflare

Vantagens:
- Gratuito para uso básico
- Fácil configuração
- DDoS protection
- Analytics

Configuração:

  1. Criar conta Cloudflare
  2. Adicionar domínio
  3. Configurar DNS
  4. Ativar CDN
  5. Configurar cache rules

3. Traefik com Cache

Vantagens:
- Já está em uso
- Sem custo adicional
- Controle total

Configuração:

labels:
  - "traefik.http.middlewares.static-cache.headers.customResponseHeaders.Cache-Control=max-age=31536000"
  - "traefik.http.routers.static.middlewares=static-cache"

Estratégia de Implementação

Fase 1: Assets Estáticos Básicos

  1. Identificar assets:
  2. CSS files
  3. JavaScript files
  4. Images
  5. Fonts

  6. Configurar S3 bucket:
    bash aws s3 mb s3://csuite-static-assets aws s3 sync ./static s3://csuite-static-assets/static/

  7. Configurar CloudFront:

  8. Criar distribution
  9. Configurar origin (S3)
  10. Configurar cache behavior

Fase 2: Versionamento de Assets

# Adicionar hash ao nome do arquivo
def get_asset_url(filename: str) -> str:
    hash = hashlib.md5(open(filename, 'rb').read()).hexdigest()[:8]
    name, ext = os.path.splitext(filename)
    return f"{name}.{hash}{ext}"

Fase 3: Integração com Apps

# Em templates Jinja2
<link rel="stylesheet" href="{{ cdn_url }}/static/css/style.css">
<script src="{{ cdn_url }}/static/js/main.js"></script>

Configuração por Ambiente

Development

CDN_ENABLED=false
CDN_URL=http://localhost:8000

Staging

CDN_ENABLED=true
CDN_URL=https://cdn-staging.example.com

Production

CDN_ENABLED=true
CDN_URL=https://cdn.example.com

Cache Headers

Assets Estáticos

Cache-Control: public, max-age=31536000, immutable

Assets Dinâmicos

Cache-Control: public, max-age=3600

Monitoramento

Métricas

Alertas

Best Practices

  1. Versionamento: Use hash nos nomes de arquivos
  2. Compressão: Habilite gzip/brotli
  3. HTTPS: Sempre use HTTPS
  4. Cache: Configure TTL apropriado
  5. Fallback: Tenha fallback se CDN falhar

Referências

🔊 Text-to-Speech

1.0x
1.0
Pronto para reproduzir