Ricerca nel sito web

Come installare Koel Music Streaming Server utilizzando Docker su Rocky Linux 8


Su questa pagina

  1. Prerequisiti
  2. Passaggio 1: configurazione del firewall
  3. Passaggio 2 - Installa Docker
  4. Passaggio 3 - Installa Docker Compose
  5. Passaggio 4: crea la chiave dell'app Koel
  6. Passaggio 5 - Crea il file dell'ambiente Koel
  7. Passaggio 6: crea il file Koel Docker Compose
  8. Passaggio 7: avvia il contenitore Koel
    1. Inizializza Koel per la prima volta
    2. 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 comando docker, aggiungi il tuo nome utente alla docker 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 in URL_APP e imposta il limite di memoria in MB in base alle risorse del tuo server. Abbiamo impostato il metodo di streaming su x-sendfile poiché l'immagine docker di Koels utilizza Apache ed è preconfigurata con esso. L'impostazione FORCE_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 variabili DB_HOST e depends_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 variabile container_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 comando scp 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.