Un site web statique optimisé en coût, servi depuis Cloudflare R2 avec un cache CDN agressif et un modèle de tarification sans frais de sortie. C’est l’architecture derrière allaboutdata.eu lui-même.
Architecture
flowchart TB
subgraph DevWorkflow["Developer Workflow"]
Dev[Developer]
GitPush[Git Push to main]
end
subgraph GH["GitHub"]
GHRepo[Repository]
subgraph GHA["GitHub Actions"]
Trigger[Trigger: push to main
web/** or .github/**] S3Sync[aws s3 sync to R2
S3-compatible API] CacheCtl[aws s3 cp
Cache-Control: max-age=604800] end end subgraph CF["Cloudflare"] CFDNS[DNS Zone
allaboutdata-test.uk] CFTLS[HTTPS / TLS
Managed Certificate] CFCDN[Cloudflare CDN
Global Edge Network] subgraph CFRules["Rulesets (Terraform)"] Rewrite[Transform Rule
/ → /index.html] CacheRule[Cache Rule
Edge: 7d / Browser: 4h] end subgraph CFR2["R2 Object Storage"] Bucket[R2 Bucket
WEUR Region] end end subgraph IaC["Infrastructure as Code"] TF[Terraform
Cloudflare Provider v5] end User[End User
Browser] %% Deploy Flow Dev --> GitPush GitPush --> GHRepo GHRepo --> Trigger Trigger --> S3Sync S3Sync --> CacheCtl CacheCtl -->|S3-compatible endpoint| Bucket %% Terraform Provisioning TF -->|Provisions| Bucket TF -->|Provisions| CFDNS TF -->|Provisions| Rewrite TF -->|Provisions| CacheRule %% Request Flow User -->|HTTPS Request| CFDNS CFDNS --> CFTLS CFTLS --> CFCDN CFCDN --> Rewrite Rewrite --> CacheRule CacheRule -->|Cache MISS| Bucket CacheRule -->|Cache HIT| User Bucket -->|Origin Response| CFCDN CFCDN -->|Response| User %% Styling classDef cloudflare fill:#F6821F,stroke:#F6821F,color:#fff classDef github fill:#24292E,stroke:#24292E,color:#fff classDef user fill:#4285F4,stroke:#1a73e8,color:#fff classDef terraform fill:#7B42BC,stroke:#5C2D91,color:#fff classDef storage fill:#F6821F,stroke:#E05D00,color:#fff class CFDNS,CFTLS,CFCDN,Rewrite,CacheRule cloudflare class Bucket storage class GHRepo,Trigger,S3Sync,CacheCtl github class User,Dev,GitPush user class TF terraform
web/** or .github/**] S3Sync[aws s3 sync to R2
S3-compatible API] CacheCtl[aws s3 cp
Cache-Control: max-age=604800] end end subgraph CF["Cloudflare"] CFDNS[DNS Zone
allaboutdata-test.uk] CFTLS[HTTPS / TLS
Managed Certificate] CFCDN[Cloudflare CDN
Global Edge Network] subgraph CFRules["Rulesets (Terraform)"] Rewrite[Transform Rule
/ → /index.html] CacheRule[Cache Rule
Edge: 7d / Browser: 4h] end subgraph CFR2["R2 Object Storage"] Bucket[R2 Bucket
WEUR Region] end end subgraph IaC["Infrastructure as Code"] TF[Terraform
Cloudflare Provider v5] end User[End User
Browser] %% Deploy Flow Dev --> GitPush GitPush --> GHRepo GHRepo --> Trigger Trigger --> S3Sync S3Sync --> CacheCtl CacheCtl -->|S3-compatible endpoint| Bucket %% Terraform Provisioning TF -->|Provisions| Bucket TF -->|Provisions| CFDNS TF -->|Provisions| Rewrite TF -->|Provisions| CacheRule %% Request Flow User -->|HTTPS Request| CFDNS CFDNS --> CFTLS CFTLS --> CFCDN CFCDN --> Rewrite Rewrite --> CacheRule CacheRule -->|Cache MISS| Bucket CacheRule -->|Cache HIT| User Bucket -->|Origin Response| CFCDN CFCDN -->|Response| User %% Styling classDef cloudflare fill:#F6821F,stroke:#F6821F,color:#fff classDef github fill:#24292E,stroke:#24292E,color:#fff classDef user fill:#4285F4,stroke:#1a73e8,color:#fff classDef terraform fill:#7B42BC,stroke:#5C2D91,color:#fff classDef storage fill:#F6821F,stroke:#E05D00,color:#fff class CFDNS,CFTLS,CFCDN,Rewrite,CacheRule cloudflare class Bucket storage class GHRepo,Trigger,S3Sync,CacheCtl github class User,Dev,GitPush user class TF terraform
La Stack
- Build : Hugo Static Site Generator
- Stockage : Cloudflare R2 (Compatible S3)
- CDN : Réseau Global Cloudflare (300+ PoPs)
- Sortie : 0,00 $ (Zéro frais de sortie)
- TLS : HTTPS Automatique
Pourquoi R2 ?
Le stockage cloud traditionnel facture chaque octet qui quitte le bucket. Cloudflare R2 élimine entièrement les frais de sortie, ce qui en fait la solution idéale pour les sites statiques riches en contenu.
Combiné au CDN global de Cloudflare, votre contenu est mis en cache au edge — ce qui signifie que la plupart des requêtes n’atteignent jamais le bucket d’origine.
Analyse des Coûts
| Composant | Coût Mensuel |
|---|---|
| Stockage R2 | ~0,015 $/Go |
| Opérations R2 | ~0,004 $ |
| CDN | Inclus |
| Sortie | 0,00 $ |
| Total | < 0,04 $/mois |
Pipeline de Déploiement
Le site est construit avec Hugo, et la sortie est synchronisée vers R2 via GitHub Actions. Le déploiement complet prend moins de 30 secondes du push à la mise en ligne.