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.

Koel-Anmeldescreen

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.

Koel-Dashboard

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.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.