sunucu tarafında büyük bir bakım turu: güvenlik, kararlılık ve temizlik
Bu sefer kullanıcıya doğrudan görünmeyen ama arka planda çok şey değiştiren bir güncelleme yaptık. Sunucu tarafında birikmiş güvenlik açıklarını, kararlılık sorunlarını ve eski/unutulmuş kod parçalarını tek seferde temizledik.
Öne çıkanlar: Cloudflare'in arkasındaki gerçek istemci IP'sinin doğru okunmasını sağlayan bir düzeltme, sunucuyu dışarıdan istismara açık bırakabilecek bir SSRF/DNS rebinding açığının kapatılması, ve zamanla artan bellek/sayaç sızıntılarının giderilmesi.
Cloudflare IP tespiti ve güvenlik sağlamlaştırması
Önceki backend altyapısının internal proxy katmanı yüzünden sunucumuz gerçek Cloudflare IP'sini bazen yanlış tespit edip meşru istekleri bile reddedebiliyordu. Bunu ProxyFix middleware ile düzelttik ve CORS preflight (OPTIONS) isteklerinin de bu kontrolden doğru şekilde geçmesini sağladık. Ayrıca dışarıdan sunucumuzu kandırıp iç ağa istek attırabilecek bir SSRF/DNS rebinding açığını kapattık: bunun için kullanılan eski indirme aracını (aria2c) tamamen kaldırdık ve ağ isteklerini kontrol eden güvenlik katmanını sağlamlaştırdık.
kararlılık: sızıntılar ve zaman aşımı tutarsızlıkları giderildi
Hız sınırlama (rate limit) mekanizması zamanla bellekte birikip şişebiliyordu; bunu otomatik süresi dolan bir TTLCache yapısıyla değiştirdik. Aynı IP'den gelen eşzamanlı istek sayacı bazı hata durumlarında sıfırlanmadan kalıyordu, bunu düzelttik. İndirme kuyruğu sayacının bazen negatife düşmesini engelledik. Sunucu artık tek işçi (worker) yerine 2 worker ile, ve subprocess'lerde gerçek zaman aşımı süreleriyle çalışıyor — gunicorn'un kendi timeout ayarıyla da koordineli.
kod temizliği ve küçük düzeltmeler
Tüm bağımlılıklar artık sabit sürümlere pinlendi (sürüm sürprizlerini önlemek için), tekrarlanan import'lar ve kullanılmayan boş fonksiyonlar temizlendi, dosya temizleme işlemleri artık loglanıyor ve periyodik olarak çalışıyor. Sessiz sesi kapatma (mute) özelliğindeki bir uzantı algılama hatası düzeltildi, ffmpeg'in nerede bulunacağı artık platformdan bağımsız (cross-platform) şekilde tespit ediliyor. Sunucu loglarının tamamı Türkçe'den İngilizce'ye çevrildi ve socketio bildirimleri artık hataya dayanıklı bir sarmalayıcı (safe_emit) üzerinden gönderiliyor.