Installation Docker · 12 min read · Nov 03, 2025

Comment installer le serveur de streaming musical Koel en utilisant Docker sur Rocky Linux 8

Koel est un service de streaming audio basé sur le web écrit dans le framework PHP Laravel. Il vous permet de diffuser votre collection musicale personnelle et d’y accéder de n’importe où dans le monde. Il prend en charge plusieurs formats multimédias, y compris AAC, OGG, WMA, FLAC et APE.

Dans ce tutoriel, vous apprendrez à installer le serveur de streaming musical Koel en utilisant Docker sur une machine Rocky Linux 8.

Prérequis

  • Un serveur exécutant Rocky Linux 8.5.
  • Un utilisateur non-root avec des privilèges sudo.
  • Mettez tout à jour. $ sudo dnf update
  • Installez les paquets essentiels. $ sudo dnf install yum-utils nano curl
  • Un nom de domaine personnalisé pointant vers le serveur comme koel.example.com.

Étape 1 - Configurer le pare-feu

La première étape consiste à configurer le pare-feu. Rocky Linux utilise le pare-feu Firewalld. Vérifiez l’état du pare-feu.

$ sudo firewall-cmd --state
running

Le pare-feu fonctionne avec différentes zones, et la zone publique est celle par défaut que nous allons utiliser. Listez tous les services et ports actifs sur le pare-feu.

$ sudo firewall-cmd --permanent --list-services

Il devrait afficher la sortie suivante.

cockpit dhcpv6-client ssh

Autorisez les ports HTTP et HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Vérifiez à nouveau l’état du pare-feu.

$ sudo firewall-cmd --permanent --list-services

Vous devriez voir une sortie similaire.

cockpit dhcpv6-client http https ssh

Rechargez le pare-feu pour activer les modifications.

$ sudo firewall-cmd --reload

Étape 2 - Installer Docker

Rocky Linux est livré avec une version plus ancienne de Docker. Pour installer la dernière version, installez d’abord le dépôt officiel de Docker.

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Installez la dernière version de Docker.

$ sudo dnf install docker-ce docker-ce-cli containerd.io

Activez et exécutez le démon Docker.

$ sudo systemctl enable docker --now

Vérifiez qu’il fonctionne.

? 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
...

Par défaut, Docker nécessite des privilèges root. Si vous souhaitez éviter d’utiliser sudo chaque fois que vous exécutez la commande docker, ajoutez votre nom d’utilisateur au groupe docker.

$ sudo usermod -aG docker $(whoami)

Vous devrez vous déconnecter du serveur et vous reconnecter en tant que même utilisateur pour activer ce changement.

Étape 3 - Installer Docker Compose

Téléchargez la dernière version stable de Docker Compose.

$ 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

Appliquez des permissions exécutables au fichier binaire Docker Compose.

$ sudo chmod +x /usr/local/bin/docker-compose

Testez l’installation.

$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c

Installez le script de complétion Bash de 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

Rechargez vos paramètres de profil pour faire fonctionner la complétion bash.

$ source ~/.bashrc

Étape 4 - Créer la clé de l’application Koel

Nous allons générer la clé de l’application Koel en exécutant le conteneur pendant un court moment. Exécutez la commande suivante pour exécuter le conteneur et accéder à son shell.

$ docker run -it --rm phanan/koel bash

Une fois dans le conteneur, exécutez la commande suivante pour générer la clé de l’application.

$ php artisan key:generate --force

Affichez le fichier d’environnement modifié avec la clé d’application nouvellement générée.

$ cat .env
APP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4=

Copiez la valeur de la clé et quittez le shell du conteneur.

$ exit

Étape 5 - Créer le fichier d’environnement Koel

Créez un répertoire pour Koel.

$ mkdir ~/koel

Passez au répertoire.

$ cd ~/koel

Créez le répertoire de musique.

$ mkdir music

Créez et ouvrez le fichier .env.

$ nano .env

Collez le code suivant dedans.

APP_NAME=Koel

# Une chaîne aléatoire de 32 caractères. Vous pouvez laisser cela vide si vous utilisez php artisan koel:init.
APP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4=

# Le chemin ABSOLU vers vos médias. Cette valeur peut toujours être modifiée ultérieurement via l'interface web.
MEDIA_PATH=/music

APP_ENV=production
APP_DEBUG=true
APP_URL=https://koel.example.com

# Le temps maximum de scan, en secondes. Augmentez cela si vous avez une énorme bibliothèque.
# Remarque : Ce paramètre n'a pas d'effet lors du scan via koel:sync.
APP_MAX_SCAN_TIME=600

# La limite de mémoire, en Mo, utilisée par le processus de scan.
# Par exemple, si vous souhaitez définir une limite de mémoire de 2048 Mo, entrez "2048" (sans
# guillemets) ici.
MEMORY_LIMIT=512

# La méthode de streaming.
# Peut être soit 'php' (par défaut), 'x-sendfile', ou 'x-accel-redirect'
# Voir https://docs.koel.dev/#streaming-music pour plus d'informations.
# Remarque : Ce paramètre n'a pas d'effet si les médias nécessitent un transcodage (par exemple FLAC).
STREAMING_METHOD=x-sendfile

# Si vous souhaitez que Koel s'intègre à Last.fm, définissez les détails de l'API ici.
# Voir https://docs.koel.dev/3rd-party.html#last-fm pour plus d'informations
LASTFM_API_KEY=
LASTFM_API_SECRET=

# Si vous souhaitez utiliser Amazon S3 avec Koel, remplissez les informations ici et suivez le
# guide d'installation à https://docs.koel.dev/aws-s3.html
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=

# Si vous souhaitez que Koel s'intègre à YouTube, définissez la clé API ici.
# Voir https://docs.koel.dev/3rd-party.html#youtube pour plus d'informations.
YOUTUBE_API_KEY=

# Vous pouvez également configurer Koel pour utiliser un CDN pour servir les fichiers multimédias.
# Cette URL doit être mappée à l'URL d'accueil de votre installation de Koel.
# Pas de barre oblique à la fin, s'il vous plaît.
CDN_URL=

# Le débit binaire du flux mp3 de sortie. Une valeur plus élevée donne une meilleure qualité,
# mais un streaming plus lent et plus de bande passante.
OUTPUT_BIT_RATE=128

# Que ce soit pour autoriser le téléchargement de chansons.
# Remarque : si vous téléchargez plus d'une chanson, Koel les compressera
# en utilisant ZipArchive de PHP. Donc, si le module n'est pas disponible dans l'environnement actuel,
# un tel téléchargement échouera (silencieusement).
ALLOW_DOWNLOAD=true

# Si cela est défini sur true, la requête pour obtenir des informations sur l'artiste, l'album et la chanson sera mise en cache.
# Cela peut donner un coup de pouce au temps de démarrage de Koel, surtout si votre bibliothèque est énorme.
# Cependant, le processus de désérialisation du cache peut être sensible à la mémoire, donc si vous rencontrez
# des erreurs, essayez de définir cela sur false.
CACHE_MEDIA=true

# Koel tente de détecter si votre site utilise HTTPS et génère des URL sécurisées en conséquence.
# Si cela échoue pour une raison quelconque, vous pouvez le forcer en définissant cette valeur sur true.
FORCE_HTTPS=true

# Les variables ci-dessous sont spécifiques à Laravel.
# Vous pouvez les modifier si vous savez ce que vous faites. Sinon, laissez-les telles quelles.
APP_LOG_LEVEL=debug
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

La plupart des paramètres sont explicites ci-dessus. Les paramètres suivants doivent être configurés pour que cela fonctionne. Collez la clé d’application générée à l’étape précédente contre la variable APP_KEY. Entrez votre nom de domaine sous APP_URL, et définissez la limite de mémoire en Mo en fonction des ressources de votre serveur. Nous avons défini la méthode de streaming sur x-sendfile car l’image docker de Koel utilise Apache et est préconfigurée avec. Le paramètre FORCE_HTTPS est défini sur true car nous allons utiliser Nginx comme équilibreur de charge avec Let’s Encrypt SSL pour servir Koel sur le web. Configurez d’autres services si vous souhaitez les utiliser avec Koel.

Étape 6 - Créer le fichier Docker Compose de Koel

Créez et ouvrez le fichier docker-compose.yml pour l’édition.

$ nano docker-compose.yml

Collez le code suivant dedans.

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

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Le fichier ci-dessus lance des conteneurs basés sur les images docker de Koel et MySQL. Il expose Koel au port 8080 sur votre machine. Le répertoire de musique et le fichier d’environnement sont montés aux emplacements respectifs sur le conteneur. Le répertoire pour les couvertures de musique et l’index de recherche, ainsi que les données MySQL, sont montés en tant que volumes locaux. Choisissez un mot de passe fort pour les variables MYSQL_ROOT_PASSWORD, MYSQL_PASSWORD et faites correspondre ces valeurs avec les variables pour le conteneur Koel dans le fichier ci-dessus. Pour lier le conteneur Koel avec le conteneur de base de données, assurez-vous que les variables DB_HOST et depends_on sont nommées d’après le nom de service du conteneur de base de données.

Étape 7 - Démarrer le conteneur Koel

Lancez le conteneur Koel en utilisant la commande suivante.

$ docker-compose up -d

Initialiser Koel pour la première fois

Connectez-vous au shell du conteneur Koel. koel dans la commande ci-dessous fait référence au nom du conteneur défini via la variable container_name dans le fichier Docker compose ci-dessus. Si vous n’avez pas de nom de conteneur défini, vous devrez d’abord trouver le nom du conteneur et l’utiliser dans la commande suivante.

$ docker exec --user www-data -it koel bash

Exécutez la commande suivante pour créer un compte administrateur et initialiser la base de données.

$ php artisan koel:init --no-assets

Changer le mot de passe de l’administrateur

Koel crée un compte administrateur par défaut avec les identifiants suivants.

email: [email protected]
password: KoelIsCool

Vous pouvez changer le mot de passe du compte administrateur en utilisant la commande suivante depuis le shell du conteneur.

$ php artisan koel:admin:change-password

Quittez le shell du conteneur.

$ exit

Étape 8 - Installer SSL

Pour installer un certificat SSL en utilisant Let’s Encrypt, nous devons installer l’outil Certbot.

Tout d’abord, vous devez télécharger et installer le dépôt EPEL.

$ sudo dnf install epel-release

Exécutez les commandes suivantes pour installer Certbot.

$ sudo dnf install certbot

Générez le certificat SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d koel.example.com

La commande ci-dessus téléchargera un certificat dans le répertoire /etc/letsencrypt/live/koel.example.com sur votre serveur.

Générez un certificat de groupe Diffie-Hellman.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Créez un répertoire racine de défi pour le renouvellement automatique de Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Créez un travail Cron pour renouveler le SSL. Il s’exécutera tous les jours pour vérifier le certificat et le renouveler si nécessaire. Pour cela, créez d’abord le fichier /etc/cron.daily/certbot-renew et ouvrez-le pour l’édition.

$ sudo nano /etc/cron.daily/certbot-renew

Collez le code suivant.

#!/bin/sh
certbot renew --cert-name koel.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Changez les permissions sur le fichier de tâche pour le rendre exécutable.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Étape 9 - Installer Nginx

Nous allons installer la dernière version de Nginx. Créez et ouvrez le fichier /etc/yum.repos.d/nginx.repo pour l’édition.

$ sudo nano /etc/yum.repos.d/nginx.repo

Collez les lignes suivantes dedans.

[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

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Installez Nginx.

$ sudo dnf install nginx

Vérifiez l’installation.

$ nginx -v
nginx version: nginx/1.20.2

Activez et démarrez le service Nginx.

$ sudo systemctl enable nginx --now

Créez et ouvrez le fichier /etc/nginx/conf.d/koel.conf pour l’édition.

$ sudo nano /etc/nginx/conf.d/koel.conf

Collez le code suivant dedans.

# Rediriger tout le non-chiffré vers le chiffré
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;
    }
}

Une fois terminé, enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité. La configuration ci-dessus permet à Nginx d’agir en tant que serveur proxy et de se lier au port 8080 sur localhost.

Ouvrez le fichier /etc/nginx/nginx.conf pour l’édition.

$ sudo nano /etc/nginx/nginx.conf

Ajoutez la ligne suivante avant la ligne include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Vérifiez la syntaxe du fichier de configuration Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Redémarrez le service Nginx pour activer la nouvelle configuration.

$ sudo systemctl restart nginx

Étape 10 - Accéder à Koel

Vous pouvez accéder à Koel en visitant l’URL https://koel.example.com dans votre navigateur. Vous serez accueilli par l’écran de connexion suivant.

Écran de connexion Koel

Entrez [email protected] comme nom d’utilisateur et le mot de passe que vous avez défini avant de vous connecter. Le tableau de bord suivant apparaîtra après une connexion réussie.

Tableau de bord Koel

Étape 11 - Importer de la musique

Copiez les fichiers musicaux que vous souhaitez importer dans le dossier ~/koel/music de votre système. Vous pouvez utiliser la commande scp pour importer les fichiers de votre PC local vers le serveur.

$ scp test.mp3 user@:/home/user/koel/music

Une fois que vous avez copié les fichiers dans le dossier ~/koel/music, exécutez la commande suivante pour importer la musique dans Koel.

$ docker exec --user www-data koel php artisan koel:sync

La musique apparaîtra dans l’interface web de Koel, et vous pourrez commencer à jouer.

L’interface web de Koel vous permet également de télécharger des chansons directement.

Étape 12 - Mettre à jour Koel

Passez au répertoire Koel.

$ cd ~/koel

Tirez la dernière image Docker de Koel.

$ docker-compose pull

Éteignez le conteneur.

$ docker-compose down --remove-orphans

Démarrez le conteneur avec les images mises à jour.

$ docker-compose up -d

Vérifiez les conteneurs Docker.

$ docker ps

Conclusion

Cela conclut le tutoriel sur l’installation du service de streaming musical Koel en utilisant Docker sur un serveur Rocky Linux. Si vous avez des questions, postez-les dans les commentaires ci-dessous.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.