All-in-one-Container für einen eigenen Internetradio-Sender
1.3K
All-in-one-Container für einen eigenen Internetradio-Sender: SHOUTcast DNAS v2, AutoDJ (Liquidsoap) und eine deutschsprachige Verwaltungsoberfläche (PHP/SQLite) in einem Image. Mehrere Streams, DJ-Konten mit Live-Übergabe, Hörerliste mit Karte, Geo-/Provider-Sperren und Installation als App auf dem Handy.
Aktuelle Version: 1.30
Das Image ist als Test- und Heimbetriebs-Umgebung gedacht. Ändere vor dem Produktivbetrieb alle Standardpasswörter (siehe unten).
Streaming
streammaxuser)DJs
Musik
Hörer & Sicherheit
Bedienung
docker-compose.yml:
services:
shoutcast-webui:
image: chrno79/shoutcast-webui:latest
container_name: shoutcast-webui
restart: unless-stopped
environment:
TZ: Europe/Berlin # Zeitzone
SC_ADMIN_PASSWORD: "bitte-aendern" # SHOUTcast-Admin (admin.cgi)
SC_SOURCE_PASSWORD: "bitte-aendern" # echtes, gemeinsames Source-Passwort
WEBUI_ADMIN_USER: admin # Admin WebUI-Login
WEBUI_ADMIN_PASS: "mind-8-zeichen" # Admin Passwort
RADIO_NAME: Mein Radio # Radio Name
RADIO_GENRE: Schlager # Stream Genre
PUBLIC_HOST: radio.example.org # wird DJs in der Verwaltung angezeigt
GEOIP_UPDATE: "1" # GeoLite2-Datenbanken beim Start laden
SEED_SAMPLE_TRACKS: "true" # Biep-Tracks anlegen, wenn der AutoDJ-Ordner leer ist
# AUTODJ_FTP_PASS: "bitte-aendern" # optional, nur für externe Server benötigt
# SC_USERID: "" # optional, SHOUTcast-Premium-Lizenz
# SC_LICENSEID: "" # optional, SHOUTcast-Premium-Lizenz
# SC_PUBLIC_SERVER: "never" # Eintrag im SHOUTcast-Verzeichnis (never / default / always)
ports:
- "7080:80" # WebUI
- "7000:8200" # Stream + admin.cgi über das Hörer-Gate
- "7004:8004" # DJ-Eingang Kanal 1
- "7005:8004" # DJ-Eingang Kanal 1 (Port + 1) SHOUTcast-v1-Clients
- "7010-7019:8010-8019" # DJ-Eingänge der Kanäle 2-6
# - "21:21" # FTP (optional)
# - "21000-21010" # FTP (optional, Passivports)
volumes:
- ./storage:/var/www/shoutcast-webui/storage # Datenbank, .env, Musik
- ./autodj:/srv/autodj
Starten mit docker compose up -d, dann die WebUI unter http://localhost:7080 öffnen und mit WEBUI_ADMIN_USER / WEBUI_ADMIN_PASS anmelden.
| Container-Port | Zweck |
|---|---|
| 80 | WebUI |
| 8200 | Hörer-Gate: dieser Port gehört nach außen (Stream + admin.cgi, prüft Sperrliste, Geo- und Provider-Regeln) |
| 8000 | SHOUTcast direkt (ohne Gate, nicht für Hörer veröffentlichen) |
| 8004 | DJ-Eingang Kanal 1 (Source-Proxy); SHOUTcast-v1-Clients ggf. Port+1 |
| 8010–8019 | DJ-Eingänge der Kanäle 2–6 (je Kanal Port N und N+1) |
| 21, 21000–21010 | FTP (optional, Passivports) nur nötig, wenn FTP von außerhalb des Hosts genutzt wird |
Die WebUI zeigt DJs und Hörern die äußeren Ports an: Container-Port minus CHANNEL_PORT_OFFSET (Standard 1000, passend zum Beispiel oben). Bei anderem Port-Schema CHANNEL_PORT_OFFSET anpassen; für Kanal 1 gibt es zusätzlich PROXY_PUBLIC_PORT und STREAM_PUBLIC_PORT.
| Variable | Standard | Bedeutung |
|---|---|---|
SC_ADMIN_PASSWORD | admin123 | SHOUTcast-Admin-Passwort |
SC_SOURCE_PASSWORD | source123 | gemeinsames Source-Passwort (sehen DJs nie) |
WEBUI_ADMIN_USER / WEBUI_ADMIN_PASS | admin / admin12345 | erster WebUI-Admin (mind. 8 Zeichen) |
AUTODJ_FTP_PASS | autodj123 | Passwort des FTP-Benutzers autodj (optional) |
RADIO_NAME / RADIO_GENRE | WebUI Testradio / Schlager | Name und Genre von Kanal 1 |
PUBLIC_HOST | localhost | öffentliche Adresse, wird in der DJ-Verwaltung angezeigt |
SC_PUBLIC_SERVER | never | Eintrag im SHOUTcast-Verzeichnis (never / default / always) |
SC_USERID / SC_LICENSEID | leer | optionale SHOUTcast-Premium-Lizenz |
GEOIP_UPDATE | 0 | 1 = GeoLite2-Datenbanken und geoip2.phar beim Start laden |
SEED_SAMPLE_TRACKS | true | Beispieltracks anlegen, wenn der AutoDJ-Ordner leer ist |
FTP_PASV_ADDRESS | leer | nur nötig, wenn FTP von außerhalb des Hosts genutzt wird |
TZ | Europe/Berlin | Zeitzone |
Weitere Einstellungen (Homepage-API, FTP-Push u. a.) liegen in storage/.env und lassen sich in der WebUI unter Einstellungen ändern.
| Pfad im Container | Inhalt |
|---|---|
/var/www/shoutcast-webui/storage | SQLite-Datenbank, .env, Musikordner, Ban-Listen: unbedingt sichern |
/srv/autodj | Ordner, den der AutoDJ tatsächlich spielt |
Die WebUI und das Hörer-Gate lesen die echte Client-IP aus X-Forwarded-For (interne Netze 10/8, 172.16/12, 192.168/16 gelten als vertrauenswürdige Proxys). Für Stream-Hörer den Proxy auf den Gate-Port 8200 zeigen lassen, nicht auf 8000, sonst greifen Sperren und Länderregeln nicht. Für die Installation als App ist HTTPS nötig.
HTML-Seiten werden bewusst nie zwischengespeichert, nur CSS und Icons; ohne Verbindung erscheint eine Offline-Seite.
GEOIP_UPDATE=0) werden Geo- und Provider-Regeln nicht angewendet; der Stream bleibt dann erreichbar.Ubuntu 24.04 · Apache + PHP 8.5 · SQLite · SHOUTcast DNAS v2 · Liquidsoap · vsftpd · supervisord · MaxMind GeoLite2
Content type
Image
Digest
sha256:2d1b94490…
Size
286.5 MB
Last updated
about 5 hours ago
docker pull chrno79/shoutcast-webui