Giriş
Bedrud arka ucu, Go 1.24+ ile yazılmış tek ikili (single-binary) toplantı platformudur. Medya sunucusu, web ön ucu, TURN sunucusu gibi tüm bağımlılıklar tek bir çalıştırılabilir dosyaya gömülüdür.
Temel Teknolojiler
- Çekirdek Framework: Fiber v2 (Sıfır tahsisatlı yönlendirici, Express benzeri API).
- Veritabanı Katmanı: SQLite (standart) ve PostgreSQL (üretim) desteğiyle GORM.
- Medya Motoru: LiveKit (Eş ikili olarak gömülü).
- Kimlik Doğrulama Sistemi: JWT, OAuth2 (Google/GitHub/Twitter) ve parolasız FIDO2 Passkey destekli çok katmanlı kimlik doğrulama.
- Gömülü Statik Dosyalar: Go 1.16+
embedpaketi kullanılarak React ön ucunun (SSR ön renderlı istemci dosyaları) paketlenmesi. - Dağıtım: systemd orkestrasyonu ve ACME (Let’s Encrypt) desteğiyle entegre Debian/Ubuntu otomatik kurucu.
Neden Bu Mimari?
WebRTC platformları genellikle sinyalleşme, TURN, web sunucusu ve veritabanı yönetimi için ayrı servisler çalıştırır. Bedrud, bunları tek bir ikili dosyada birleştirir:
- Medya sunucusu ikili dosyasını çalışma zamanında çıkararak.
- Medya trafiğini ana HTTP(S) portu üzerinden proxyleyerek.
- İşletim sistemi düzeyindeki yapılandırmayı (SSL, systemd) ikili dosya kendisi aracılığıyla otomatikleştirerek.
Üst Düzey Mimari
Arka uç, standart katmanlı bir mimari izler:
- Sunucu Katmanı (
internal/server): Fiber uygulamasını, rotaları ve ara katmanı (middleware) kurar. - İşleyici Katmanı (
internal/handlers): HTTP isteklerini ve yanıtlarını yönetir. - Depo Katmanı (
internal/repository): GORM kullanarak veritabanı sorgularını gerçekleştirir. - Model Katmanı (
internal/models): Veritabanı tablolarını ve Go yapılarını tanımlar. - Hizmet/Mantık Katmanı: Basitlik için işleyicilere ve depolara entegre edilmiştir;
internal/authveinternal/livekitgibi özelleşmiş paketler bulunur.
Ana Giriş Noktası
Uygulama server/cmd/bedrud/main.go dosyasından başlar. Üç ana moda sahiptir:
run: Tam toplantı sunucusunu başlatır.livekit: Yalnızca gömülü medya sunucusunu başlatır.install: Debian/Ubuntu sistemlerinde sunucuyu otomatik olarak kurar.
Dokümantasyon Bölümleri
- Kod Yapısı: Her şey nerede bulunur?
- Veritabanı ve Modeller: Veriler nasıl saklanır?
- Kimlik Doğrulama: Kullanıcılar nasıl giriş yapar?
- API İşleyicileri: İstekler nasıl işlenir?
- LiveKit Entegrasyonu: Video sunucusu nasıl çalışır?
- WebRTC Bağlantısı: İstemciler medya bağlantılarını nasıl kurar? (STUN/ICE/TURN/SFU)
- TURN Sunucusu: TURN röle mimarisi, yapılandırma ve sorun giderme
- Kurulum ve Dağıtım: Otomatik kurucu nasıl çalışır?