Streaming Musicale · 11 min read · Nov 03, 2025
Come installare il server di streaming musicale Koel utilizzando Docker su Rocky Linux 8

Koel è un servizio di streaming audio basato sul web scritto nel framework PHP Laravel. Ti consente di trasmettere in streaming la tua collezione musicale personale e accedervi da qualsiasi parte del mondo. Supporta più formati multimediali, tra cui AAC, OGG, WMA, FLAC e APE.
In questo tutorial, imparerai come installare il server di streaming musicale Koel utilizzando Docker su una macchina Rocky Linux 8.
Prerequisiti
- Un server che esegue Rocky Linux 8.5.
- Un utente non root con privilegi sudo.
- Aggiorna tutto.
$ sudo dnf update - Installa i pacchetti essenziali.
$ sudo dnf install yum-utils nano curl - Un nome di dominio personalizzato che punta al server come
koel.example.com.
Passo 1 - Configura il Firewall
Il primo passo è configurare il firewall. Rocky Linux utilizza Firewalld Firewall. Controlla lo stato del firewall.
$ sudo firewall-cmd --state
running
Il firewall funziona con diverse zone, e la zona pubblica è quella predefinita che utilizzeremo. Elenca tutti i servizi e le porte attive sul firewall.
$ sudo firewall-cmd --permanent --list-services
Dovrebbe mostrare il seguente output.
cockpit dhcpv6-client ssh
Consenti le porte HTTP e HTTPS.
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
Controlla nuovamente lo stato del firewall.
$ sudo firewall-cmd --permanent --list-services
Dovresti vedere un output simile.
cockpit dhcpv6-client http https ssh
Ricarica il firewall per abilitare le modifiche.
$ sudo firewall-cmd --reload
Passo 2 - Installa Docker
Rocky Linux viene fornito con una versione più vecchia di Docker. Per installare l’ultima versione, prima installa il repository ufficiale di Docker.
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
Installa l’ultima versione di Docker.
$ sudo dnf install docker-ce docker-ce-cli containerd.io
Abilita e avvia il demone Docker.
$ sudo systemctl enable docker --now
Verifica che sia in esecuzione.
? 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
...
Per impostazione predefinita, Docker richiede privilegi di root. Se desideri evitare di utilizzare sudo ogni volta che esegui il comando docker, aggiungi il tuo nome utente al gruppo docker.
$ sudo usermod -aG docker $(whoami)
Dovrai disconnetterti dal server e riconnetterti come lo stesso utente per abilitare questa modifica.
Passo 3 - Installa Docker Compose
Scarica l’ultima versione stabile di 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
Applica i permessi eseguibili al file binario di Docker Compose.
$ sudo chmod +x /usr/local/bin/docker-compose
Testa l’installazione.
$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c
Installa lo script di completamento Bash di 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
Ricarica le impostazioni del tuo profilo per far funzionare il completamento bash.
$ source ~/.bashrc
Passo 4 - Crea la chiave dell’app Koel
Genereremo la chiave dell’app Koel eseguendo il contenitore per un breve momento. Esegui il seguente comando per avviare il contenitore e accedere alla sua shell.
$ docker run -it --rm phanan/koel bash
Una volta nel contenitore, esegui il seguente comando per generare la chiave dell’applicazione.
$ php artisan key:generate --force
Output del file di ambiente modificato con la chiave dell’app generata di recente.
$ cat .env
APP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4=
Copia il valore della chiave e esci dalla shell del contenitore.
$ exit
Passo 5 - Crea il file di ambiente Koel
Crea una directory per Koel.
$ mkdir ~/koel
Passa alla directory.
$ cd ~/koel
Crea la directory musicale.
$ mkdir music
Crea e apri il file .env.
$ nano .env
Incolla il seguente codice al suo interno.
APP_NAME=Koel
# Una stringa casuale di 32 caratteri. Puoi lasciare questo vuoto se usi php artisan koel:init.
APP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4=
# Il percorso ASSOLUTO ai tuoi media. Questo valore può sempre essere cambiato in seguito tramite l'interfaccia web.
MEDIA_PATH=/music
APP_ENV=production
APP_DEBUG=true
APP_URL=https://koel.example.com
# Il tempo massimo di scansione, in secondi. Aumenta questo se hai una libreria enorme.
# Nota: Questa impostazione non ha effetto quando si scansiona tramite koel:sync.
APP_MAX_SCAN_TIME=600
# Il limite di memoria, in MB, utilizzato dal processo di scansione.
# Ad esempio, se desideri impostare un limite di memoria di 2048MB, inserisci "2048" (senza
# virgolette) qui.
MEMORY_LIMIT=512
# Il metodo di streaming.
# Può essere 'php' (predefinito), 'x-sendfile' o 'x-accel-redirect'
# Vedi https://docs.koel.dev/#streaming-music per ulteriori informazioni.
# Nota: Questa impostazione non ha effetto se i media necessitano di transcodifica (ad es. FLAC).
STREAMING_METHOD=x-sendfile
# Se desideri che Koel si integri con Last.fm, imposta qui i dettagli dell'API.
# Vedi https://docs.koel.dev/3rd-party.html#last-fm per ulteriori informazioni
LASTFM_API_KEY=
LASTFM_API_SECRET=
# Se desideri utilizzare Amazon S3 con Koel, compila le informazioni qui e segui la
# guida all'installazione su https://docs.koel.dev/aws-s3.html
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=
# Se desideri che Koel si integri con YouTube, imposta qui la chiave API.
# Vedi https://docs.koel.dev/3rd-party.html#youtube per ulteriori informazioni.
YOUTUBE_API_KEY=
# Puoi anche configurare Koel per utilizzare un CDN per servire i file multimediali.
# Questo URL deve essere mappato all'URL principale dell'installazione di Koel.
# Nessuna barra finale, per favore.
CDN_URL=
# Il bit rate dello stream mp3 di output. Un valore più alto comporta una qualità migliore,
# ma uno streaming più lento e più larghezza di banda.
OUTPUT_BIT_RATE=128
# Se consentire il download delle canzoni.
# Nota che se stai scaricando più di una canzone, Koel le comprimerà
# utilizzando ZipArchive di PHP. Quindi, se il modulo non è disponibile nell'ambiente attuale,
# un tale download fallirà (silenziosamente).
ALLOW_DOWNLOAD=true
# Se questo è impostato su true, la query per ottenere informazioni su artista, album e canzone sarà memorizzata nella cache.
# Questo può dare un impulso al tempo di avvio di Koel, specialmente se la tua libreria è enorme.
# Tuttavia, il processo di deserializzazione della cache può essere sensibile alla memoria, quindi se incontri
# errori, prova a impostarlo su false.
CACHE_MEDIA=true
# Koel tenta di rilevare se il tuo sito web utilizza HTTPS e genera URL sicuri di conseguenza.
# Se questo tentativo fallisce per qualsiasi motivo, puoi forzarlo impostando questo valore su true.
FORCE_HTTPS=true
# Le variabili sottostanti sono specifiche di Laravel.
# Puoi cambiarle se sai cosa stai facendo. Altrimenti, lasciale così come sono.
APP_LOG_LEVEL=debug
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
La maggior parte delle impostazioni sono autoesplicative sopra. Le seguenti impostazioni devono essere configurate per farlo funzionare. Incolla la chiave dell’app generata nel passaggio precedente contro la variabile APP_KEY. Inserisci il tuo nome di dominio sotto APP_URL e imposta il limite di memoria in MB a seconda delle risorse del tuo server. Abbiamo impostato il metodo di streaming su x-sendfile poiché l’immagine Docker di Koel utilizza Apache e viene fornita preconfigurata con esso. L’impostazione FORCE_HTTPS è impostata su true perché utilizzeremo Nginx come bilanciatore di carico insieme a Let’s Encrypt SSL per servire Koel sul web. Configura altri servizi se desideri utilizzarli insieme a Koel.
Passo 6 - Crea il file Docker Compose di Koel
Crea e apri il file docker-compose.yml per la modifica.
$ nano docker-compose.yml
Incolla il seguente codice al suo interno.
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
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Il file sopra avvia contenitori basati sulle immagini Docker di Koel e MySQL. Espone Koel alla porta 8080 sulla tua macchina. La musica e il file di ambiente sono montati nelle rispettive posizioni sul contenitore. La directory per le copertine musicali e l’indice di ricerca, insieme ai dati di MySQL, è montata come volumi locali. Scegli una password forte per le variabili MYSQL_ROOT_PASSWORD, MYSQL_PASSWORD e abbina quei valori con le variabili per il contenitore Koel nel file sopra. Per collegare il contenitore Koel con il contenitore del database, assicurati che le variabili DB_HOST e depends_on siano denominate dopo il nome del servizio del contenitore del database.
Passo 7 - Avvia il contenitore Koel
Avvia il contenitore Koel utilizzando il seguente comando.
$ docker-compose up -d
Inizializza Koel per la prima volta
Accedi alla shell del contenitore Koel. koel nel comando qui sotto si riferisce al nome del contenitore impostato tramite la variabile container_name nel file Docker compose sopra. Se non hai impostato un nome per il contenitore, dovrai prima trovare il nome del contenitore e usarlo nel comando seguente.
$ docker exec --user www-data -it koel bash
Esegui il seguente comando per creare un account amministratore e inizializzare il database.
$ php artisan koel:init --no-assets
Cambia la password dell’amministratore
Koel crea un account amministratore predefinito con le seguenti credenziali.
email: [email protected]
password: KoelIsCool
Puoi cambiare la password per l’account amministratore utilizzando il seguente comando dalla shell del contenitore.
$ php artisan koel:admin:change-password
Esci dalla shell del contenitore.
$ exit
Passo 8 - Installa SSL
Per installare un certificato SSL utilizzando Let’s Encrypt, dobbiamo installare lo strumento Certbot.
Innanzitutto, devi scaricare e installare il repository EPEL.
$ sudo dnf install epel-release
Esegui i seguenti comandi per installare Certbot.
$ sudo dnf install certbot
Genera il certificato SSL.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d koel.example.com
Il comando sopra scaricherà un certificato nella directory /etc/letsencrypt/live/koel.example.com sul tuo server.
Genera un certificato Diffie-Hellman group.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Crea una directory web root di sfida per il rinnovo automatico di Let’s Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Crea un lavoro Cron per rinnovare l’SSL. Verrà eseguito ogni giorno per controllare il certificato e rinnovarlo se necessario. Per questo, prima crea il file /etc/cron.daily/certbot-renew e aprilo per la modifica.
$ sudo nano /etc/cron.daily/certbot-renew
Incolla il seguente codice.
#!/bin/sh
certbot renew --cert-name koel.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Cambia i permessi sul file del compito per renderlo eseguibile.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Passo 9 - Installa Nginx
Installeremo l’ultima versione di Nginx. Crea e apri il file /etc/yum.repos.d/nginx.repo per la modifica.
$ sudo nano /etc/yum.repos.d/nginx.repo
Incolla le seguenti righe al suo interno.
[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
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Installa Nginx.
$ sudo dnf install nginx
Verifica l’installazione.
$ nginx -v
nginx version: nginx/1.20.2
Abilita e avvia il servizio Nginx.
$ sudo systemctl enable nginx --now
Crea e apri il file /etc/nginx/conf.d/koel.conf per la modifica.
$ sudo nano /etc/nginx/conf.d/koel.conf
Incolla il seguente codice al suo interno.
# Reindirizza tutto il non criptato a criptato
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;
}
}
Una volta terminato, salva il file premendo Ctrl + X e inserendo Y quando richiesto. La configurazione sopra consente a Nginx di agire come server proxy e di legarsi alla porta 8080 su localhost.
Apri il file /etc/nginx/nginx.conf per la modifica.
$ sudo nano /etc/nginx/nginx.conf
Aggiungi la seguente riga prima della riga include /etc/nginx/conf.d/*.conf;.
server_names_hash_bucket_size 64;
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Verifica la sintassi del file di configurazione di 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
Riavvia il servizio Nginx per abilitare la nuova configurazione.
$ sudo systemctl restart nginx
Passo 10 - Accedi a Koel
Puoi accedere a Koel visitando l’URL https://koel.example.com nel tuo browser. Sarai accolto dalla seguente schermata di accesso.

Inserisci [email protected] come nome utente e la password che hai impostato prima di accedere. Il seguente dashboard apparirà dopo un accesso riuscito.

Passo 11 - Importa Musica
Copia i file musicali che desideri importare nella cartella ~/koel/music del tuo sistema. Puoi utilizzare il comando scp per importare i file dal tuo PC locale al server.
$ scp test.mp3 user@:/home/user/koel/music
Una volta copiati i file nella cartella ~/koel/music, esegui il seguente comando per importare la musica in Koel.
$ docker exec --user www-data koel php artisan koel:sync
La musica apparirà nell’interfaccia web di Koel e potrai iniziare a suonare.
L’interfaccia web di Koel consente anche di caricare canzoni direttamente.
Passo 12 - Aggiorna Koel
Passa alla directory di Koel.
$ cd ~/koel
Scarica l’ultima immagine Docker di Koel.
$ docker-compose pull
Spegni il contenitore.
$ docker-compose down --remove-orphans
Avvia il contenitore con le immagini aggiornate.
$ docker-compose up -d
Verifica i contenitori Docker.
$ docker ps
Conclusione
Questo conclude il tutorial su come installare il servizio di streaming musicale Koel utilizzando Docker su un server Rocky Linux. Se hai domande, pubblicale nei commenti qui sotto.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.