Come installare Koel Music Streaming Server utilizzando Docker su Rocky Linux 8
Su questa pagina
- Prerequisiti
- Passaggio 1: configurazione del firewall
- Passaggio 2 - Installa Docker
- Passaggio 3 - Installa Docker Compose
- Passaggio 4: crea la chiave dell'app Koel
- Passaggio 5 - Crea il file dell'ambiente Koel
- Passaggio 6: crea il file Koel Docker Compose
- Passaggio 7: avvia il contenitore Koel
- Inizializza Koel per la prima volta
- Cambia la password dell'amministratore
Koel è un servizio di streaming audio basato sul Web scritto nel framework Laravel PHP. Ti consente di trasmettere in streaming la tua raccolta musicale personale e di accedervi da qualsiasi parte del mondo. Supporta più formati multimediali, inclusi AAC, OGG, WMA, FLAC e APE.
In questo tutorial imparerai come installare Koel Music Streaming Server utilizzando Docker su una macchina Rocky Linux 8.
Prerequisiti
-
A Server running Rocky Linux 8.5.
-
A non-root user with sudo privileges.
-
Update everything.
$ sudo dnf update
-
Install essential packages.
$ sudo dnf install yum-utils nano curl
-
A custom domain name pointing to the server like
koel.example.com
.
Passaggio 1: configurare il firewall
Il primo passo è configurare il firewall. Rocky Linux utilizza Firewalld Firewall. Controlla lo stato dei firewall.
$ sudo firewall-cmd --state running
Il firewall funziona con zone diverse 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 porte HTTP e HTTPS.
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https
Ricontrolla 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
Passaggio 2: installa Docker
Rocky Linux viene fornito con una versione precedente di Docker. Per installare l'ultima versione, per prima cosa installa il repository Docker ufficiale.
$ 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 ed esegui il demone Docker.
$ sudo systemctl enable docker --now
Verificare 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 i privilegi di root. Se vuoi evitare di usare
sudo
ogni volta che esegui il comandodocker
, aggiungi il tuo nome utente alladocker
gruppo.$ sudo usermod -aG docker $(whoami)
Sarà necessario disconnettersi dal server e riconnettersi come lo stesso utente per abilitare questa modifica.
Passaggio 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
Applicare le autorizzazioni eseguibili al file binario Docker Compose.
$ sudo chmod +x /usr/local/bin/docker-compose
Testare l'installazione.
$ docker-compose --version docker-compose version 1.29.2, build 5becea4c
Installa lo script Bash Completion 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 di bash.
$ source ~/.bashrc
Passaggio 4: crea la chiave dell'app Koel
Genereremo la chiave dell'app Koels eseguendo il contenitore per un breve momento. Eseguire il comando seguente per eseguire il contenitore e accedere alla sua shell.
$ docker run -it --rm phanan/koel bash
Una volta nel contenitore, eseguire il comando seguente per generare la chiave dell'applicazione.
$ php artisan key:generate --force
Emetti il file dell'ambiente modificato con la chiave dell'app appena generata.
$ cat .env APP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4=
Copia il valore della chiave ed esci dalla shell del contenitore.
$ exit
Passaggio 5: crea il file dell'ambiente Koel
Crea una directory per Koel.
$ mkdir ~/koel
Passa alla rubrica.
$ cd ~/koel
Crea la directory della musica.
$ mkdir music
Crea e apri il file
.env
.$ nano .env
Incolla il seguente codice al suo interno.
APP_NAME=Koel # A random 32-char string. You can leave this empty if use php artisan koel:init. APP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4= # The ABSOLUTE path to your media. This value can always be changed later via the web interface. MEDIA_PATH=/music APP_ENV=production APP_DEBUG=true APP_URL=https://koel.example.com # The maximum scan time, in seconds. Increase this if you have a huge library. # Note: This setting doesn't have effect when scanning via koel:sync. APP_MAX_SCAN_TIME=600 # The memory limit, in MB, used by the scanning process. # For example, if you want to set a memory limit of 2048MB, enter "2048" (without # quotes) here. MEMORY_LIMIT=512 # The streaming method. # Can be either 'php' (default), 'x-sendfile', or 'x-accel-redirect' # See https://docs.koel.dev/#streaming-music for more information. # Note: This setting doesn't have effect if the media needs transcoding (e.g. FLAC). STREAMING_METHOD=x-sendfile # If you want Koel to integrate with Last.fm, set the API details here. # See https://docs.koel.dev/3rd-party.html#last-fm for more information LASTFM_API_KEY= LASTFM_API_SECRET= # If you want to use Amazon S3 with Koel, fill the info here and follow the # installation guide at https://docs.koel.dev/aws-s3.html AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_REGION= # If you want Koel to integrate with YouTube, set the API key here. # See https://docs.koel.dev/3rd-party.html#youtube for more information. YOUTUBE_API_KEY= # You can also configure Koel to use a CDN to serve the media files. # This url must be mapped to the home URL of your Koel's installation. # No trailing slash, please. CDN_URL= # The bit rate of the output mp3 stream. Higher value results in better quality, # but slower streaming and more bandwidth. OUTPUT_BIT_RATE=128 # Whether to allow song downloading. # Note that if you're downloading more than one song, Koel will zip them up # using PHP's ZipArchive. So if the module isn't available in the current # environment, such a download will (silently) fail. ALLOW_DOWNLOAD=true # If this is set to true, the query to get artist, album, and song information will be cached. # This can give a boost to Koel's boot time, especially if your library is huge. # However, the cache deserialization process can be memory sensitive, so if you encounter # errors, try setting this to false. CACHE_MEDIA=true # Koel attempts to detect if your website use HTTPS and generates secure URLs accordingly. # If this attempts for any reason, you can force it by setting this value to true. FORCE_HTTPS=true # The variables below are Laravel-specific. # You can change them if you know what you're doing. Otherwise, just leave them as-is. 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 nella variabile
APP_KEY
. Inserisci il tuo nome di dominio inURL_APP
e imposta il limite di memoria in MB in base alle risorse del tuo server. Abbiamo impostato il metodo di streaming sux-sendfile
poiché l'immagine docker di Koels utilizza Apache ed è preconfigurata con esso. L'impostazioneFORCE_HTTPS
è impostata su true perché utilizzeremo Nginx come bilanciamento del carico insieme a Lets Encrypt SSL per servire Koel sul web. Configura altri servizi se desideri utilizzarli insieme a Koel.Passaggio 6: crea il file Koel Docker Compose
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 precedente avvia i contenitori basati sulle immagini docker di Koel e MySQL. Espone Koel alla porta 8080 sulla tua macchina. La musica e il file dell'ambiente vengono montati nelle rispettive posizioni sul contenitore. La directory per le copertine musicali e l'indice di ricerca, insieme ai dati MySQL, sono montati come volumi locali. Scegli una password complessa 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 variabiliDB_HOST
edepends_on
abbiano il nome del servizio Contenitori database.Passaggio 7: avviare il contenitore Koel
Avvia il contenitore Koel usando il seguente comando.
$ docker-compose up -d
Inizializza Koel per la prima volta
Accedi alla shell Koel Container.
koel
nel comando seguente fa riferimento al nome del contenitore impostato tramite la variabilecontainer_name
nel file di composizione Docker sopra. Se non hai impostato un nome del contenitore, dovrai prima trovare il nome del contenitore e utilizzarlo nel comando seguente.$ docker exec --user www-data -it koel bash
Eseguire il comando seguente per creare un account amministratore e inizializzare il database.
$ php artisan koel:init --no-assets
Modifica password amministratore
Koel crea un account amministratore predefinito con le seguenti credenziali.
email: password: KoelIsCool
È possibile modificare la password per l'account amministratore utilizzando il seguente comando dall'interno della shell del contenitore.
$ php artisan koel:admin:change-password
Uscire dalla shell del contenitore.
$ exit
Passaggio 8: installa SSL
Per installare un certificato SSL utilizzando Lets Encrypt, è necessario installare lo strumento Certbot.
Innanzitutto, devi scaricare e installare il repository EPEL.
$ sudo dnf install epel-release
Eseguire 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 -d koel.example.com
Il comando precedente scaricherà un certificato nella directory
/etc/letsencrypt/live/koel.example.com
sul tuo server.Genera un certificato di gruppo Diffie-Hellman.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Crea una directory radice Web di verifica per il rinnovo automatico di Lets Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Crea un Cron Job per rinnovare l'SSL. Verrà eseguito ogni giorno per controllare il certificato e rinnovarlo se necessario. Per questo, per prima cosa, crea il file
/etc/cron.daily/certbot-renew
e aprilo per modificarlo.$ 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.
Modificare le autorizzazioni sul file dell'attività per renderlo eseguibile.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Passaggio 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
Verificare 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.
# Redirect all non-encrypted to encrypted 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 di cui sopra consente a Nginx di agire come server proxy e di collegarsi alla porta 8080 su localhost.
Apri il file
/etc/nginx/nginx.conf
per la modifica.$ sudo nano /etc/nginx/nginx.conf
Aggiungere la riga seguente 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.
Verificare 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
Passaggio 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
come nome utente e la password che hai impostato prima di accedere. La seguente dashboard apparirà in caso di accesso riuscito.Passaggio 11: importa musica
Copia i file musicali che desideri importare nella cartella
~/koel/music
del tuo sistema. Puoi usare il comandoscp
per importare i file dal tuo PC locale al server.$ scp test.mp3 <yourserverIP>:/home/user/koel/music
Dopo aver copiato 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 verrà visualizzata nell'interfaccia web di Koels e potrai iniziare a suonare.
L'interfaccia web di Koels ti consente anche di caricare direttamente i brani.
Passaggio 12: aggiorna Koel
Passa alla directory Koel.
$ cd ~/koel
Estrai l'ultima immagine di Koel Docker.
$ docker-compose pull
Spegnere il contenitore.
$ docker-compose down --remove-orphans
Avvia il contenitore con le immagini aggiornate.
$ docker-compose up -d
Verifica i container Docker.
$ docker ps
Conclusione
Questo conclude il tutorial sull'installazione di Koel Music Streaming Service utilizzando Docker su un server Rocky Linux. Se hai domande, pubblicale nei commenti qui sotto.