Musik Streaming · 11 min read · Nov 03, 2025
So installieren Sie den Koel Musik-Streaming-Server mit Docker auf Rocky Linux 8

Koel ist ein webbasiertes Audio-Streaming-Dienst, das im Laravel PHP-Framework geschrieben ist. Es ermöglicht Ihnen, Ihre persönliche Musiksammlung zu streamen und von überall auf der Welt darauf zuzugreifen. Es unterstützt mehrere Medienformate, darunter AAC, OGG, WMA, FLAC und APE.
In diesem Tutorial lernen Sie, wie Sie den Koel Musik-Streaming-Server mit Docker auf einer Rocky Linux 8-Maschine installieren.
Voraussetzungen
- Ein Server, der Rocky Linux 8.5 ausführt.
- Ein Nicht-Root-Benutzer mit Sudo-Rechten.
- Aktualisieren Sie alles.
$ sudo dnf update - Installieren Sie die erforderlichen Pakete.
$ sudo dnf install yum-utils nano curl - Ein benutzerdefinierter Domainname, der auf den Server zeigt, wie
koel.example.com.
Schritt 1 - Firewall konfigurieren
Der erste Schritt besteht darin, die Firewall zu konfigurieren. Rocky Linux verwendet die Firewalld-Firewall. Überprüfen Sie den Status der Firewall.
$ sudo firewall-cmd --state
running
Die Firewall arbeitet mit verschiedenen Zonen, und die öffentliche Zone ist die Standardzone, die wir verwenden werden. Listen Sie alle Dienste und Ports auf, die in der Firewall aktiv sind.
$ sudo firewall-cmd --permanent --list-services
Es sollte die folgende Ausgabe anzeigen.
cockpit dhcpv6-client ssh
Erlauben Sie HTTP- und HTTPS-Ports.
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
Überprüfen Sie den Status der Firewall erneut.
$ sudo firewall-cmd --permanent --list-services
Sie sollten eine ähnliche Ausgabe sehen.
cockpit dhcpv6-client http https ssh
Laden Sie die Firewall neu, um die Änderungen zu aktivieren.
$ sudo firewall-cmd --reload
Schritt 2 - Docker installieren
Rocky Linux wird mit einer älteren Version von Docker ausgeliefert. Um die neueste Version zu installieren, installieren Sie zuerst das offizielle Docker-Repository.
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
Installieren Sie die neueste Version von Docker.
$ sudo dnf install docker-ce docker-ce-cli containerd.io
Aktivieren und starten Sie den Docker-Daemon.
$ sudo systemctl enable docker --now
Überprüfen Sie, ob es läuft.
? docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2022-04-02 13:26:08 UTC; 2s ago
Docs: https://docs.docker.com
Main PID: 21152 (dockerd)
Tasks: 7
Memory: 30.9M
CGroup: /system.slice/docker.service
??21152 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
...
Standardmäßig benötigt Docker Root-Rechte. Wenn Sie vermeiden möchten, bei jedem Ausführen des docker-Befehls sudo zu verwenden, fügen Sie Ihren Benutzernamen zur docker-Gruppe hinzu.
$ sudo usermod -aG docker $(whoami)
Sie müssen sich vom Server abmelden und erneut als derselbe Benutzer anmelden, um diese Änderung zu aktivieren.
Schritt 3 - Docker Compose installieren
Laden Sie die neueste stabile Version von Docker Compose herunter.
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Wenden Sie ausführbare Berechtigungen auf die Docker Compose-Binärdatei an.
$ sudo chmod +x /usr/local/bin/docker-compose
Testen Sie die Installation.
$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c
Installieren Sie das Bash-Vervollständigungs-Skript für Docker-Compose.
$ sudo curl \
-L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \
-o /etc/bash_completion.d/docker-compose
Laden Sie Ihre Profileinstellungen neu, um die Bash-Vervollständigung zu aktivieren.
$ source ~/.bashrc
Schritt 4 - Erstellen Sie den Koel App-Schlüssel
Wir werden den App-Schlüssel von Koel generieren, indem wir den Container für einen kurzen Moment ausführen. Führen Sie den folgenden Befehl aus, um den Container zu starten und auf seine Shell zuzugreifen.
$ docker run -it --rm phanan/koel bash
Sobald Sie im Container sind, führen Sie den folgenden Befehl aus, um den Anwendungsschlüssel zu generieren.
$ php artisan key:generate --force
Geben Sie die modifizierte Umgebungsdatei mit dem neu generierten App-Schlüssel aus.
$ cat .env
APP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4=
Kopieren Sie den Schlüsselwert und verlassen Sie die Containerschale.
$ exit
Schritt 5 - Erstellen Sie die Koel-Umgebungsdatei
Erstellen Sie ein Verzeichnis für Koel.
$ mkdir ~/koel
Wechseln Sie in das Verzeichnis.
$ cd ~/koel
Erstellen Sie das Musikverzeichnis.
$ mkdir music
Erstellen und öffnen Sie die .env-Datei.
$ nano .env
Fügen Sie den folgenden Code ein.
APP_NAME=Koel
# Ein zufälliger 32-Zeichen-String. Sie können dies leer lassen, wenn Sie php artisan koel:init verwenden.
APP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4=
# Der ABSOLUTE Pfad zu Ihren Medien. Dieser Wert kann später über die Weboberfläche immer geändert werden.
MEDIA_PATH=/music
APP_ENV=production
APP_DEBUG=true
APP_URL=https://koel.example.com
# Die maximale Scanzeit in Sekunden. Erhöhen Sie dies, wenn Sie eine riesige Bibliothek haben.
# Hinweis: Diese Einstellung hat keine Auswirkungen, wenn über koel:sync gescannt wird.
APP_MAX_SCAN_TIME=600
# Das Speicherkontingent in MB, das vom Scanprozess verwendet wird.
# Wenn Sie beispielsweise ein Speicherkontingent von 2048MB festlegen möchten, geben Sie hier "2048" (ohne
# Anführungszeichen) ein.
MEMORY_LIMIT=512
# Die Streaming-Methode.
# Kann entweder 'php' (Standard), 'x-sendfile' oder 'x-accel-redirect' sein.
# Siehe https://docs.koel.dev/#streaming-music für weitere Informationen.
# Hinweis: Diese Einstellung hat keine Auswirkungen, wenn die Medien transkodiert werden müssen (z. B. FLAC).
STREAMING_METHOD=x-sendfile
# Wenn Sie möchten, dass Koel mit Last.fm integriert wird, geben Sie hier die API-Details ein.
# Siehe https://docs.koel.dev/3rd-party.html#last-fm für weitere Informationen
LASTFM_API_KEY=
LASTFM_API_SECRET=
# Wenn Sie Amazon S3 mit Koel verwenden möchten, füllen Sie die Informationen hier aus und folgen Sie der
# Installationsanleitung unter https://docs.koel.dev/aws-s3.html
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=
# Wenn Sie möchten, dass Koel mit YouTube integriert wird, geben Sie hier den API-Schlüssel ein.
# Siehe https://docs.koel.dev/3rd-party.html#youtube für weitere Informationen.
YOUTUBE_API_KEY=
# Sie können Koel auch so konfigurieren, dass ein CDN verwendet wird, um die Mediendateien bereitzustellen.
# Diese URL muss auf die Start-URL Ihrer Koel-Installation abgebildet werden.
# Kein abschließender Schrägstrich, bitte.
CDN_URL=
# Die Bitrate des ausgegebenen mp3-Streams. Höhere Werte führen zu besserer Qualität,
# aber langsamerem Streaming und mehr Bandbreite.
OUTPUT_BIT_RATE=128
# Ob das Herunterladen von Songs erlaubt ist.
# Beachten Sie, dass, wenn Sie mehr als einen Song herunterladen, Koel diese mit
# PHPs ZipArchive komprimiert. Wenn das Modul in der aktuellen
# Umgebung nicht verfügbar ist, schlägt ein solcher Download (stillschweigend) fehl.
ALLOW_DOWNLOAD=true
# Wenn dies auf true gesetzt ist, wird die Abfrage zum Abrufen von Künstler-, Album- und Songinformationen zwischengespeichert.
# Dies kann die Startzeit von Koel beschleunigen, insbesondere wenn Ihre Bibliothek riesig ist.
# Der Prozess der Deserialisierung des Caches kann jedoch speicherintensiv sein. Wenn Sie auf Fehler stoßen,
# versuchen Sie, dies auf false zu setzen.
CACHE_MEDIA=true
# Koel versucht zu erkennen, ob Ihre Website HTTPS verwendet, und generiert entsprechend sichere URLs.
# Wenn dies aus irgendeinem Grund nicht funktioniert, können Sie dies erzwingen, indem Sie diesen Wert auf true setzen.
FORCE_HTTPS=true
# Die folgenden Variablen sind Laravel-spezifisch.
# Sie können sie ändern, wenn Sie wissen, was Sie tun. Andernfalls lassen Sie sie einfach so.
APP_LOG_LEVEL=debug
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.
Die meisten der oben genannten Einstellungen sind selbsterklärend. Die folgenden Einstellungen müssen konfiguriert werden, um es zum Laufen zu bringen. Fügen Sie den in Schritt 4 generierten App-Schlüssel gegen die Variable APP_KEY ein. Geben Sie Ihren Domainnamen unter APP_URL ein und setzen Sie das Speicherkontingent in MBs je nach den Ressourcen Ihres Servers. Wir haben die Streaming-Methode auf x-sendfile gesetzt, da das Docker-Image von Koel Apache verwendet und damit vorkonfiguriert ist. Die Einstellung FORCE_HTTPS ist auf true gesetzt, da wir Nginx als Lastenausgleich zusammen mit Let’s Encrypt SSL verwenden werden, um Koel im Web bereitzustellen. Konfigurieren Sie andere Dienste, wenn Sie diese zusammen mit Koel verwenden möchten.
Schritt 6 - Erstellen Sie die Koel Docker Compose-Datei
Erstellen und öffnen Sie die Datei docker-compose.yml zur Bearbeitung.
$ nano docker-compose.yml
Fügen Sie den folgenden Code ein.
version: '3.3'
services:
koel:
image: phanan/koel
container_name: koel
depends_on:
- koeldb
restart: unless-stopped
ports:
- 8080:80
environment:
- DB_CONNECTION=mysql
- DB_HOST=koeldb
- DB_USERNAME=koel
- DB_PASSWORD=koelpassword
- DB_DATABASE=koel
volumes:
- ./music:/music
- ./.env:/var/www/html/.env
- covers:/var/www/html/public/img/covers
- search_index:/var/www/html/storage/search-indexes
koeldb:
image: mysql/mysql-server:8.0
restart: unless-stopped
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=koel
- MYSQL_USER=koel
- MYSQL_PASSWORD=koelpassword
volumes:
db:
driver: local
covers:
driver: local
search_index:
driver: local
Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.
Die obige Datei startet Container basierend auf den Docker-Images von Koel und MySQL. Sie exponiert Koel auf Port 8080 auf Ihrer Maschine. Die Musik- und Umgebungsdatei werden an die jeweiligen Standorte im Container gemountet. Das Verzeichnis für Musikcover und den Suchindex sowie die MySQL-Daten werden als lokale Volumes gemountet. Wählen Sie ein starkes Passwort für die Variablen MYSQL_ROOT_PASSWORD, MYSQL_PASSWORD und stimmen Sie diese Werte mit den Variablen für den Koel-Container in der obigen Datei ab. Um den Koel-Container mit dem Datenbank-Container zu verknüpfen, stellen Sie sicher, dass die Variablen DB_HOST und depends_on nach dem Servicenamen des Datenbankcontainers benannt sind.
Schritt 7 - Starten Sie den Koel-Container
Starten Sie den Koel-Container mit dem folgenden Befehl.
$ docker-compose up -d
Koel zum ersten Mal initialisieren
Melden Sie sich an der Koel-Container-Shell an. koel im folgenden Befehl bezieht sich auf den Namen des Containers, der über die Variable container_name in der oben genannten Docker-Compose-Datei festgelegt wurde. Wenn Sie keinen Containernamen festgelegt haben, müssen Sie zuerst den Namen des Containers finden und diesen im folgenden Befehl verwenden.
$ docker exec --user www-data -it koel bash
Führen Sie den folgenden Befehl aus, um ein Administratorkonto zu erstellen und die Datenbank zu initialisieren.
$ php artisan koel:init --no-assets
Ändern Sie das Administratorkennwort
Koel erstellt ein Standard-Administratorkonto mit den folgenden Anmeldeinformationen.
email: [email protected]
password: KoelIsCool
Sie können das Passwort für das Administratorkonto mit dem folgenden Befehl von innerhalb der Containerschale ändern.
$ php artisan koel:admin:change-password
Verlassen Sie die Containerschale.
$ exit
Schritt 8 - SSL installieren
Um ein SSL-Zertifikat mit Let’s Encrypt zu installieren, müssen wir das Certbot-Tool installieren.
Zuerst müssen Sie das EPEL-Repository herunterladen und installieren.
$ sudo dnf install epel-release
Führen Sie die folgenden Befehle aus, um Certbot zu installieren.
$ sudo dnf install certbot
Generieren Sie das SSL-Zertifikat.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d koel.example.com
Der obige Befehl lädt ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/koel.example.com auf Ihrem Server herunter.
Generieren Sie ein Diffie-Hellman-Gruppe-Zertifikat.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Erstellen Sie ein Challenge-Web-Root-Verzeichnis für die automatische Erneuerung von Let’s Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Erstellen Sie einen Cron-Job zur Erneuerung des SSL. Er wird jeden Tag ausgeführt, um das Zertifikat zu überprüfen und es bei Bedarf zu erneuern. Erstellen Sie dazu zuerst die Datei /etc/cron.daily/certbot-renew und öffnen Sie sie zur Bearbeitung.
$ sudo nano /etc/cron.daily/certbot-renew
Fügen Sie den folgenden Code ein.
#!/bin/sh
certbot renew --cert-name koel.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.
Ändern Sie die Berechtigungen der Aufgaben-Datei, um sie ausführbar zu machen.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Schritt 9 - Nginx installieren
Wir werden die neueste Version von Nginx installieren. Erstellen und öffnen Sie die Datei /etc/yum.repos.d/nginx.repo zur Bearbeitung.
$ sudo nano /etc/yum.repos.d/nginx.repo
Fügen Sie die folgenden Zeilen ein.
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.
Installieren Sie Nginx.
$ sudo dnf install nginx
Überprüfen Sie die Installation.
$ nginx -v
nginx version: nginx/1.20.2
Aktivieren und starten Sie den Nginx-Dienst.
$ sudo systemctl enable nginx --now
Erstellen und öffnen Sie die Datei /etc/nginx/conf.d/koel.conf zur Bearbeitung.
$ sudo nano /etc/nginx/conf.d/koel.conf
Fügen Sie den folgenden Code ein.
# Leiten Sie alle nicht verschlüsselten Anfragen an verschlüsselte weiter
server {
listen 80;
listen [::]:80;
server_name koel.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name koel.example.com;
ssl_certificate /etc/letsencrypt/live/koel.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/koel.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/koel.example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
access_log /var/log/nginx/koel.example.com.access.log main;
error_log /var/log/nginx/koel.example.com.error.log;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Host $host;
client_max_body_size 400M;
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
}
}
Sobald Sie fertig sind, speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden. Die obige Konfiguration ermöglicht es Nginx, als Proxy-Server zu fungieren und an den Port 8080 auf localhost zu binden.
Öffnen Sie die Datei /etc/nginx/nginx.conf zur Bearbeitung.
$ sudo nano /etc/nginx/nginx.conf
Fügen Sie die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; hinzu.
server_names_hash_bucket_size 64;
Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.
Überprüfen Sie die Syntax der Nginx-Konfigurationsdatei.
$ sudo nginx -t
nginx: die Konfigurationsdatei /etc/nginx/nginx.conf hat die Syntax ok
nginx: Konfigurationsdatei /etc/nginx/nginx.conf Test war erfolgreich
Starten Sie den Nginx-Dienst neu, um die neue Konfiguration zu aktivieren.
$ sudo systemctl restart nginx
Schritt 10 - Greifen Sie auf Koel zu
Sie können auf Koel zugreifen, indem Sie die URL https://koel.example.com in Ihrem Browser besuchen. Sie werden mit dem folgenden Anmeldebildschirm begrüßt.

Geben Sie [email protected] als Ihren Benutzernamen und das Passwort ein, das Sie vor der Anmeldung festgelegt haben. Das folgende Dashboard wird nach erfolgreicher Anmeldung angezeigt.

Schritt 11 - Musik importieren
Kopieren Sie die Musikdateien, die Sie importieren möchten, in den Ordner ~/koel/music Ihres Systems. Sie können den scp-Befehl verwenden, um die Dateien von Ihrem lokalen PC auf den Server zu importieren.
$ scp test.mp3 user@:/home/user/koel/music
Sobald Sie die Dateien in den Ordner ~/koel/music kopiert haben, führen Sie den folgenden Befehl aus, um die Musik in Koel zu importieren.
$ docker exec --user www-data koel php artisan koel:sync
Die Musik wird in der Weboberfläche von Koel angezeigt, und Sie können mit dem Abspielen beginnen.
Die Weboberfläche von Koel ermöglicht es Ihnen auch, Songs direkt hochzuladen.
Schritt 12 - Koel aktualisieren
Wechseln Sie in das Koel-Verzeichnis.
$ cd ~/koel
Holen Sie sich das neueste Koel-Docker-Image.
$ docker-compose pull
Fahren Sie den Container herunter.
$ docker-compose down --remove-orphans
Starten Sie den Container mit aktualisierten Bildern.
$ docker-compose up -d
Überprüfen Sie die Docker-Container.
$ docker ps
Fazit
Damit endet das Tutorial zur Installation des Koel Musik-Streaming-Dienstes mit Docker auf einem Rocky Linux-Server. Wenn Sie Fragen haben, posten Sie diese in den Kommentaren unten.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.