Cloudflare + Bunny CDN

Muzibu.com CDN Mimarisi Planı

Uygulanabilir - Birlikte harika çalışırlar

Basit Anlatım (Herkes İçin)

Ne yapıyoruz? Muzibu'nun dosyalarını dünya genelindeki sunuculara dağıtıyoruz. Böylece kullanıcı İstanbul'dan girerse İstanbul'daki sunucudan, Almanya'dan girerse Almanya'daki sunucudan dosya alır.

Neden iki farklı CDN?

  • Cloudflare = Sitenin genel koruması ve hızlandırması. Görseller, CSS, JS dosyaları buradan gelir. Zaten mevcut ve ücretsiz.
  • Bunny CDN = Sadece müzik dosyaları için. HLS dediğimiz parçalı müzik akışı çok bant genişliği harcar. Bunny bu işte çok ucuz (~0.01$/GB) ve çok hızlı.

Neden Cloudflare'dan müzik akıtmıyoruz? Cloudflare ücretsiz planda büyük medya dosyalarını cache'lemez (ToS ihlali). Müzik streaming yaparsak hesabı kapatabilirler. Bunny ise tam olarak bunun için tasarlanmış.

Şu Anki Durum

Kullanıcı

Cloudflare (DNS + SSL)

Sunucu (HER ŞEY buradan)

├── Site HTML/CSS/JS

├── Görseller + Thumbmaker

├── HLS Playlist (.m3u8) ← Sunucu yükü

├── HLS Segments (.ts) ← Bant genişliği

└── Encryption Key ← Her şarkıda istek

Tüm müzik trafiği sunucudan

100 eşzamanlı dinleyici = sunucu zorlanır

Cloudflare ToS riski (streaming)

Yeni Mimari

Kullanıcı

Cloudflare (DNS + SSL + Cache)

├──→ Site, Görseller, API

└──→ cdn.muzibu.com (Bunny)

Cloudflare üzerinden:

├── Site HTML/CSS/JS (cache)

├── Görseller + Thumbmaker (cache)

└── API istekleri (pass-through)

Bunny CDN üzerinden:

├── HLS Playlist (.m3u8)

├── HLS Segments (.ts)

└── Encryption Key (token korumalı)

Sunucu yükü %80 azalır

Dünya genelinde hızlı stream

Cloudflare ToS uyumlu

Teknik Detaylar (Geliştiriciler İçin)

Cloudflare Yapılandırması (Zaten Mevcut)

Cache Rules (Önerilen)

# Statik dosyalar - 30 gün cache
/*.css  → Cache: 30d
/*.js   → Cache: 30d
/*.webp → Cache: 30d
/*.jpg  → Cache: 7d
/*.png  → Cache: 7d
/*.woff2 → Cache: 365d

# Thumbmaker - 7 gün cache
/thumbmaker* → Cache: 7d

# API - cache yapma
/api/*  → Bypass Cache
/hls/*  → Bypass Cache

Page Rules

# 1. Admin panel - cache bypass
muzibu.com/admin/*
  → Cache Level: Bypass
  → Security: High

# 2. Storage görseller
muzibu.com/storage/*
  → Cache Level: Cache Everything
  → Edge TTL: 7 days

# 3. API
muzibu.com/api/*
  → Cache Level: Bypass

Bunny CDN Kurulum Adımları

Adım 1: Bunny Hesabı + Pull Zone

  • bunny.net hesabı aç (14 gün ücretsiz deneme)
  • Pull Zone oluştur:

    Name: muzibu-hls

    Origin URL: https://muzibu.com

    Origin Type: Pull Zone

  • Custom Hostname ekle: cdn.muzibu.com
  • Cloudflare'da CNAME ekle: cdn → {pullzone}.b-cdn.net

Adım 2: Bunny Token Authentication

# Pull Zone Settings → Security

Token Authentication: Enabled

Token Key: [otomatik üretilir]

Token Path: /storage/tenant1001/muzibu/hls/*

# Böylece sadece imzalı URL'ler çalışır

# Hotlink koruması otomatik

Adım 3: Cache Ayarları

# Edge Rules (Bunny Dashboard)

*.ts → Cache: 365 gün (segment değişmez)

*.m3u8 → Cache: 1 saat (playlist dinamik)

enc.bin → Cache yok (her istek origin'e)

# CORS Headers

Access-Control-Allow-Origin: https://muzibu.com

Kod Değişiklikleri

.env (yeni değişkenler)

# Bunny CDN

BUNNY_CDN_ENABLED=true

BUNNY_CDN_URL=https://cdn.muzibu.com

BUNNY_CDN_TOKEN_KEY=your-bunny-token-key

BUNNY_CDN_ZONE_ID=12345

SignedUrlService.php (HLS URL'lerini CDN'e yönlendir)

// ÖNCE (şu an)
$baseUrl = config('app.url');
$hlsUrl = "{$baseUrl}/hls/muzibu/songs/{$songId}/playlist.m3u8";

// SONRA (CDN ile)
$cdnUrl = config('services.bunny.url', config('app.url'));
$hlsUrl = "{$cdnUrl}/hls/muzibu/songs/{$songId}/playlist.m3u8";
// + Bunny token imzası ekle

ConvertToHLSJob.php (Playlist'teki key URL'ini güncelle)

// Playlist içindeki enc.bin URL'i
// Key her zaman origin sunucudan gelmeli (güvenlik)
$keyUri = config('app.url') . '/hls-key/muzibu/songs/' . $song->song_id;
// CDN değil, direkt sunucu! (token + imza kontrolü)

Değişecek dosyalar listesi

1. .env → Bunny CDN değişkenleri

2. config/services.php → bunny config

3. app/Services/SignedUrlService.php → CDN URL

4. SongStreamController.php → CORS headers

5. ConvertToHLSJob.php → Key URI

Toplam: 5 dosya değişikliği

Yeni Stream Akışı

Kullanıcı şarkı çalar:

1. GET muzibu.com/api/muzibu/songs/123/stream
   → Cloudflare → Sunucu → JSON: {stream_url: "https://cdn.muzibu.com/hls/..."}

2. GET cdn.muzibu.com/hls/muzibu/songs/123/playlist.m3u8?token=...
   → Bunny CDN (cache varsa CDN'den, yoksa origin'den çeker)

3. GET muzibu.com/hls-key/muzibu/songs/123?sig=...
   → Cloudflare → Sunucu (encryption key HER ZAMAN sunucudan)
   → Key ASLA CDN'de cache'lenmez! (güvenlik)

4. GET cdn.muzibu.com/hls/muzibu/songs/123/segment-000.ts
   → Bunny CDN (cache hit → anında, miss → origin'den çek + cache'le)
   → 1 yıl cache (segment hiç değişmez)

5. Player: AES-128 key ile segment'i decrypt → Müzik çalar

Güvenlik Katmanları

Cloudflare

  • DDoS koruması
  • WAF (Web Application Firewall)
  • SSL/TLS
  • Bot koruması
  • Rate limiting

Bunny CDN

  • Token authentication
  • Hotlink koruması
  • Geo-blocking (opsiyonel)
  • Referer kısıtlaması
  • SSL/TLS

Uygulama

  • AES-128 HLS encryption
  • HMAC imzalı URL'ler
  • Zamanlı token (expire)
  • Premium üyelik kontrolü
  • Key ayrı endpoint

Maliyet Tahmini

Hizmet Plan Aylık Maliyet Not
Cloudflare Free $0 Zaten mevcut
Bunny CDN Pay-as-you-go ~$1-5 100-500 GB/ay (başlangıç)
Bunny Storage Opsiyonel ~$1-2 HLS dosyalarını Bunny'de depolamak için
TOPLAM ~$1-7/ay Kullanıma göre değişir

Hesaplama: 1 şarkı ~5MB (HLS). 1000 dinleme/gün = ~5GB/gün = ~150GB/ay = ~$1.50/ay Bunny maliyeti.

Bunny'nin minimum ödeme yok, sadece kullandığın kadar ödersin.

Uygulama Planı (Adım Adım)

1

Bunny.net hesabı aç

14 gün ücretsiz. Kredi kartı gerekli ama ilk $10 bedava.

2

Pull Zone oluştur: muzibu-hls

Origin: https://muzibu.com | Hostname: cdn.muzibu.com

3

Cloudflare'da CNAME ekle

cdn.muzibu.com → {zone}.b-cdn.net (proxy OFF - gri bulut)

4

Bunny Token Auth + Cache Rules ayarla

Token key al, edge rules ayarla

5

Kod değişiklikleri (5 dosya)

.env, config, SignedUrlService, SongStreamController, ConvertToHLSJob

6

mztest'te test et

Önce test sunucusunda dene, sorun yoksa production'a al

7

Production'a deploy

Cloudflare cache rules + kod deploy + Horizon restart

Cloudflare Mevcut Optimizasyonlar (Hemen Yapılabilir)

Bunny'den bağımsız, şu an Cloudflare'da yapılabilecek iyileştirmeler:

Cache Rules

  • /storage/* → Cache Everything, 7d
  • /thumbmaker* → Cache Everything, 7d
  • /build/* → Cache Everything, 30d
  • /css/* /js/* → Cache Everything, 30d

Performance

  • Auto Minify: JS + CSS + HTML
  • Brotli: Enabled
  • Early Hints: Enabled
  • HTTP/3: Enabled
18 Şubat 2026 • Muzibu.com