Einführung
Das Bedrud-Backend ist eine Single-Binary-Meeting-Plattform, geschrieben in Go 1.24+. Alle Abhängigkeiten – Medienserver, Web-Frontend, TURN-Server – sind in einer einzigen ausführbaren Datei gebündelt.
Kerntechnologien
- Core Framework: Fiber v2 (Zero-Allocation-Router, Express-ähnliche API).
- Database Layer: GORM mit Unterstützung für SQLite (Standard) und PostgreSQL (Produktion).
- Media Engine: LiveKit (als begleitendes Binary eingebettet).
- Auth System: Mehrschichtiges Auth-System mit Unterstützung für JWT, OAuth2 (Google/GitHub/Twitter) und Passwort-losen FIDO2-Passkeys.
- Embedded Static Assets: Nutzt das
embed-Paket aus Go 1.16+, um das React-Frontend (SSR-vorgerenderte Client-Assets) zu bündeln. - Deployment: Integrierter Debian/Ubuntu-Auto-Installer mit systemd-Orchestrierung und ACME (Let’s Encrypt)-Unterstützung.
Warum diese Architektur?
WebRTC-Plattformen betreiben üblicherweise separate Dienste für Signalisierung, TURN, Web-Serving und Datenbankverwaltung. Bedrud konsolidiert all dies in einem einzigen Binary, indem es:
- Das Medienserver-Binary zur Laufzeit extrahiert.
- Medientraffic über den Haupt-HTTP(S)-Port weiterleitet.
- Die Konfiguration auf Betriebssystemebene (SSL, systemd) automatisch über das Binary selbst verwaltet.
Architektur auf oberster Ebene
Das Backend folgt einer standardmäßigen Schichtenarchitektur:
- Server-Schicht (
internal/server): Richtet die Fiber-App, Routen und Middleware ein. - Handler-Schicht (
internal/handlers): Verwaltet HTTP-Anfragen und -Antworten. - Repository-Schicht (
internal/repository): Verwaltet Datenbankabfragen mit GORM. - Modell-Schicht (
internal/models): Definiert die Datenbanktabellen und Go-Strukturen. - Service/Logik-Schicht: In Handler und Repositories integriert, mit spezialisierten Paketen wie
internal/authundinternal/livekit.
Haupteinstiegspunkt
Die Anwendung startet in server/cmd/bedrud/main.go. Sie verfügt über drei Hauptmodi:
run: Startet den vollständigen Meeting-Server.livekit: Startet nur den eingebetteten Medienserver.install: Richtet den Server automatisch auf Debian/Ubuntu-Systemen ein.
Dokumentationsabschnitte
- Code-Struktur: Wo befindet sich was?
- Datenbank & Modelle: Wie werden Daten gespeichert?
- Authentifizierung: Wie melden sich Benutzer an?
- API-Handler: Wie werden Anfragen verarbeitet?
- LiveKit-Integration: Wie funktioniert der Videoserver?
- WebRTC-Konnektivität: Wie bauen Clients Medienverbindungen auf? (STUN/ICE/TURN/SFU)
- TURN-Server: TURN-Relay-Architektur, Konfiguration und Fehlerbehebung
- Installation & Deployment: Wie funktioniert der Auto-Installer?