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.

Schermata di accesso Koel

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

Dashboard Koel

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.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.