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.

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.

É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.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.