Muzibu.com CDN Mimarisi Planı
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?
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ış.
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)
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
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
Adım 1: Bunny Hesabı + Pull Zone
Name: muzibu-hls
Origin URL: https://muzibu.com
Origin Type: Pull Zone
cdn.muzibu.comcdn → {pullzone}.b-cdn.netAdı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
.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
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
| 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.
Bunny.net hesabı aç
14 gün ücretsiz. Kredi kartı gerekli ama ilk $10 bedava.
Pull Zone oluştur: muzibu-hls
Origin: https://muzibu.com | Hostname: cdn.muzibu.com
Cloudflare'da CNAME ekle
cdn.muzibu.com → {zone}.b-cdn.net (proxy OFF - gri bulut)
Bunny Token Auth + Cache Rules ayarla
Token key al, edge rules ayarla
Kod değişiklikleri (5 dosya)
.env, config, SignedUrlService, SongStreamController, ConvertToHLSJob
mztest'te test et
Önce test sunucusunda dene, sorun yoksa production'a al
Production'a deploy
Cloudflare cache rules + kod deploy + Horizon restart
Bunny'den bağımsız, şu an Cloudflare'da yapılabilecek iyileştirmeler: