Muzibu.com HLS Streaming CDN Planı
7/9
Adım Tamamlandı
1
Küçük Düzeltme
1
Production Deploy
Ne yapıyoruz? Şarkıların donmasını engellemek için müzik dosyalarını dünya genelindeki hızlı sunuculara dağıtıyoruz.
Neden? Şu an tüm müzik trafiği tek sunucudan geliyor. Çok dinleyici olunca donma ve kalite düşüşü yaşanıyor.
Çözüm: Cloudflare siteyi korumaya devam ediyor. Bunny CDN sadece müzik dosyalarını ultra hızlı dağıtıyor.
Maliyet: Cloudflare Pro zaten var (ek maliyet yok). Bunny CDN ~$1-7/ay (kullanıma göre).
Sonuç: Bir toggle açınca aktif, kapatınca eski sisteme döner. Risk sıfır.
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=...&bcdn_token=... → Bunny CDN edge (Türkiye/EU) → Origin'den çek veya cache'den ver 3. GET muzibu.com/hls-key/muzibu/songs/123?sig=... → Encryption key HER ZAMAN origin sunucudan (güvenlik) 4. GET cdn.muzibu.com/hls/muzibu/songs/123/segment-000.ts → Bunny CDN edge cache → 365 gün cache (anında teslimat) 5. Player: AES-128 key ile decrypt → Müzik çalar ✓ Donma yok
Pull Zone ID: 5347238
Name: muzibu-hls
Hostname: muzibu-hls.b-cdn.net
Origin: https://muzibu.com
Regions: Europe + North America + Asia
Tier: Standard
cdn.muzibu.com → muzibu-hls.b-cdn.net | SSL sertifikası aktif
Token Auth: Enabled
Token Key: 646b6c86-af40-4660-a8b1-e060eb248c36
Yöntem: MD5 Basic Token Auth + Origin HMAC-SHA256
EU - Paris | Origin sunucuya gelen istek sayısını azaltır
Type: CNAME
Name: cdn
Target: muzibu-hls.b-cdn.net
Proxy: DNS only (GRİ BULUT) ← Kritik!
.env → BUNNY_CDN_ENABLED, BUNNY_CDN_URL, TOKEN_KEY, ZONE_ID
config/services.php → bunny config bloğu
app/Services/SignedUrlService.php → signBunnyUrl(), isBunnyCdnEnabled(), CDN URL desteği
SongStreamController.php → Dinamik CORS origin header
Neden: muzibu.com → www.muzibu.com 301 redirect yapıyor (Cloudflare ayarı). Bunny origin'den çekerken bu redirect'i takip edemiyor ve 403 veriyor.
# Bunny Dashboard:
CDN → Pull Zones → muzibu-hls → General
"Follow Redirects" → ENABLE
Save
# Origin URL değişmiyor, muzibu.com kalıyor.
# Sistem genelinde hiçbir şey değişmiyor.
# 1. Kodu production'a gönder git add . && git commit -m "Bunny CDN entegrasyonu" git push # Production sunucuda: git pull # 2. Production .env'ye ekle BUNNY_CDN_ENABLED=false ← Önce kapalı BUNNY_CDN_URL=https://cdn.muzibu.com BUNNY_CDN_TOKEN_KEY=646b6c86-af40-4660-a8b1-e060eb248c36 BUNNY_CDN_ZONE_ID=5347238 # 3. Cache temizle php artisan config:clear && php artisan cache:clear # 4. Test (Bunny kapalıyken her şey çalışmalı) curl -I https://cdn.muzibu.com/hls/muzibu/songs/SONG_ID/segment-000.ts # 5. Aktif et BUNNY_CDN_ENABLED=true php artisan config:clear # 6. Horizon yeniden başlat php artisan horizon:terminate # 7. Cloudflare HLS Cache Rule (#10) kaldır # (Bunny üstleniyor, Cloudflare'a gerek yok)
.env (yeni değişkenler)
BUNNY_CDN_ENABLED=false BUNNY_CDN_URL=https://cdn.muzibu.com BUNNY_CDN_TOKEN_KEY=646b6c86-af40-4660-a8b1-e060eb248c36 BUNNY_CDN_ZONE_ID=5347238
config/services.php (+12 satır)
'bunny' => [
'enabled' => env('BUNNY_CDN_ENABLED', false),
'url' => env('BUNNY_CDN_URL', ''),
'token_key' => env('BUNNY_CDN_TOKEN_KEY', ''),
'zone_id' => env('BUNNY_CDN_ZONE_ID', ''),
],
app/Services/SignedUrlService.php (3 yeni metod)
generateHlsUrl() → Bunny etkinse CDN URL döner + çift imza signBunnyUrl() → Bunny Basic Token Auth (MD5 + base64) isBunnyCdnEnabled() → Config kontrolü
İmza zinciri: Origin HMAC-SHA256 + Bunny MD5 Token = Çift güvenlik katmanı
SongStreamController.php (CORS güncellemesi)
Access-Control-Allow-Origin: * → request()->header('Origin') // Dinamik origin: muzibu.com veya cdn.muzibu.com
BUNNY_CDN_ENABLED=false (eski sistem): https://www.muzibu.com/hls/muzibu/songs/123/playlist.m3u8 ?expires=...&token=USER_ID&sig=HMAC_SHA256 BUNNY_CDN_ENABLED=true (yeni sistem): https://cdn.muzibu.com/hls/muzibu/songs/123/playlist.m3u8 ?expires=...&token=USER_ID&sig=HMAC_SHA256 ← Origin imzası &bcdn_token=MD5_BASE64&bcdn_expires=UNIX ← Bunny imzası
Cloudflare
DDoS + WAF + SSL
Bunny Token
MD5 imzalı URL
Origin İmza
HMAC-SHA256
AES-128
HLS şifreleme
1. Livewire No Cache
2. API No Cache
3. Admin No Cache
4. Assets CSS JS - 7 Days
5. FONTS - 1 Year
6. Thumbmaker Cache
7. Static Files 1 Month
8. Dashboard No Cache
9. User Pages No Cache
10. HLS Audio Cache ← Bunny aktifken KALDIRILACAK
✓ SSL: Full (Strict)
✓ HTTP/2 + HTTP/3
✓ TLS 1.3
✓ Brotli
✓ Early Hints
✓ Polish: Lossy + WebP
✓ Always Online
✗ Always Use HTTPS: Kapalı
✗ Rocket Loader: Kapalı
A muzibu.com → 51.210.24.70 PROXIED
A mztest → 159.253.45.107 DNS only
CNAME www → muzibu.com PROXIED
CNAME cdn → muzibu-hls.b-cdn.net DNS only ← YENİ
| Pull Zone ID | 5347238 |
| Name | muzibu-hls |
| Default URL | https://muzibu-hls.b-cdn.net |
| Custom Hostname | https://cdn.muzibu.com |
| Origin | https://muzibu.com |
| Token Auth Key | 646b6c86-af40-4660-a8b1-e060eb248c36 |
| Origin Shield | EU - Paris |
| Regions | Europe + North America + Asia |
| Edge Rules | 4 kural aktif |
| Follow Redirects | Açılması gerekiyor! |
| HTTP/2 + HTTP/3 | Aktif |
| HTTPS Redirect | Aktif |
| Hizmet | Aylık | Not |
|---|---|---|
| Cloudflare Pro | $20 | Zaten mevcut |
| Bunny CDN | ~$1-5 | 100-500 GB/ay (kullanıma göre) |
| Ek Maliyet | ~$1-5/ay | Min. ödeme yok |
1 şarkı ~5MB. 1000 dinleme/gün = ~150GB/ay = ~$1.50/ay
Herhangi bir sorun olursa tek satır değişiklikle eski sisteme dönülür:
# .env'de: BUNNY_CDN_ENABLED=false # Cache temizle: php artisan config:clear
Bunny kapalıyken tüm HLS trafiği eski yoldan (Cloudflare → Origin) geçer. Hiçbir şey bozulmaz.