Si të instaloni serverin Koel Music Streaming duke përdorur Docker në Rocky Linux 8


Koel është një shërbim transmetimi audio i bazuar në ueb, i shkruar në kuadrin Laravel PHP. Kjo ju lejon të transmetoni koleksionin tuaj personal të muzikës dhe ta përdorni atë nga kudo në botë. Ai mbështet formate të shumta mediatike, duke përfshirë AAC, OGG, WMA, FLAC dhe APE.

Në këtë tutorial, do të mësoni se si të instaloni serverin Koel Music Streaming duke përdorur Docker në një makinë Rocky Linux 8.

Parakushtet

  • 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.

Hapi 1 - Konfiguro Firewall

Hapi i parë është konfigurimi i murit të zjarrit. Rocky Linux përdor Firewall-in e Firewalld. Kontrolloni statusin e mureve të zjarrit.

$ sudo firewall-cmd --state
running

Firewall punon me zona të ndryshme dhe zona publike është ajo e paracaktuar që do të përdorim. Listoni të gjitha shërbimet dhe portat aktive në murin e zjarrit.

$ sudo firewall-cmd --permanent --list-services

Duhet të tregojë daljen e mëposhtme.

cockpit dhcpv6-client ssh

Lejo portet HTTP dhe HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Rishikoni statusin e murit të zjarrit.

$ sudo firewall-cmd --permanent --list-services

Ju duhet të shihni një dalje të ngjashme.

cockpit dhcpv6-client http https ssh

Ringarko murin e zjarrit për të aktivizuar ndryshimet.

$ sudo firewall-cmd --reload

Hapi 2 - Instaloni Docker

Rocky Linux dërgohet me një version më të vjetër të Docker. Për të instaluar versionin më të fundit, së pari, instaloni depon zyrtare të Docker.

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Instaloni versionin më të fundit të Docker.

$ sudo dnf install docker-ce docker-ce-cli containerd.io

Aktivizo dhe ekzekuto demonin Docker.

$ sudo systemctl enable docker --now

Verifiko që po funksionon.

? 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
...

Si parazgjedhje, Docker kërkon privilegje rrënjësore. Nëse dëshironi të shmangni përdorimin e sudo sa herë që ekzekutoni komandën docker, shtoni emrin tuaj të përdoruesit në docker grup.

$ sudo usermod -aG docker $(whoami)

Ju do të duhet të dilni nga serveri dhe të hyni përsëri si i njëjti përdorues për të mundësuar këtë ndryshim.

Hapi 3 - Instaloni Docker Compose

Shkarkoni versionin më të fundit të qëndrueshëm të 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

Aplikoni lejet e ekzekutueshme në skedarin binar të Docker Compose.

$ sudo chmod +x /usr/local/bin/docker-compose

Testoni instalimin.

$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c

Instaloni skriptin Docker-compose Bash Completion.

$ sudo curl \
    -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \
    -o /etc/bash_completion.d/docker-compose

Ringarko cilësimet e profilit për të funksionuar përfundimi i bash-it.

$ source ~/.bashrc

Hapi 4 - Krijo çelësin e aplikacionit Koel

Ne do të gjenerojmë çelësin e aplikacionit Koels duke drejtuar kontejnerin për një moment të shkurtër. Ekzekutoni komandën e mëposhtme për të ekzekutuar kontejnerin dhe për të hyrë në guaskën e tij.

$ docker run -it --rm phanan/koel bash

Pasi të jeni në kontejner, ekzekutoni komandën e mëposhtme për të gjeneruar çelësin e aplikacionit.

$ php artisan key:generate --force

Nxirrni skedarin e modifikuar të mjedisit me çelësin e aplikacionit të krijuar rishtazi.

$ cat .env
APP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4=

Kopjoni vlerën kryesore dhe dilni nga guaska e kontejnerit.

$ exit

Hapi 5 - Krijo skedarin e mjedisit Koel

Krijo një direktori për Koel.

$ mkdir ~/koel

Kaloni në drejtori.

$ cd ~/koel

Krijoni drejtorinë e muzikës.

$ mkdir music

Krijoni dhe hapni skedarin .env.

$ nano .env

Vendos kodin e mëposhtëm në të.

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

Ruani skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet.

Shumica e cilësimeve janë vetë-shpjeguese më sipër. Cilësimet e mëposhtme duhet të konfigurohen për ta bërë atë të funksionojë. Ngjitni çelësin e aplikacionit të krijuar në hapin e mëparshëm kundrejt ndryshores APP_KEY. Futni emrin e domenit nën APP_URL dhe vendosni kufirin e kujtesës në MB në varësi të burimeve të serverit tuaj. Ne kemi vendosur metodën e transmetimit në x-sendfile pasi imazhi i dokerit të Koels përdor Apache dhe vjen i para-konfiguruar me të. Cilësimi FORCE_HTTPS është vendosur si i vërtetë sepse ne do të përdorim Nginx si balancues ngarkesash së bashku me Lets Encrypt SSL për t'i shërbyer Koelit në ueb. Konfiguro shërbime të tjera nëse dëshiron t'i përdorësh ato së bashku me Koel.

Hapi 6 - Krijo skedarin e kompozimit të Koel Docker

Krijoni dhe hapni skedarin docker-compose.yml për modifikim.

$ nano docker-compose.yml

Ngjitni kodin e mëposhtëm në të.

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

Ruani skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet.

Skedari i mësipërm lëshon kontejnerë të bazuar në imazhet e dokerit të Koel dhe MySQL. Ai ekspozon Koel në portin 8080 në kompjuterin tuaj. Muzika dhe skedari i mjedisit montohen në vendndodhjet përkatëse në kontejner. Drejtoria për kopertinat muzikore dhe indeksi i kërkimit, së bashku me të dhënat MySQL, janë montuar si vëllime lokale. Zgjidhni një fjalëkalim të fortë për variablat MYSQL_ROOT_PASSWORD, MYSQL_PASSWORD dhe përputhni ato vlera me variablat për kontejnerin Koel në skedarin e mësipërm. Për të lidhur kontejnerin Koel me kontejnerin e bazës së të dhënave, sigurohuni që variablat DB_HOST dhe varet_on janë emëruar sipas emrit të shërbimit të kontejnerëve të bazës së të dhënave.

Hapi 7 - Nisni Kontejnerin Koel

Nisni kontejnerin Koel duke përdorur komandën e mëposhtme.

$ docker-compose up -d

Inicializoni Koelin për herë të parë

Hyni në guaskën e Koel Container. koel në komandën e mëposhtme i referohet emrit të grupit të kontejnerit nëpërmjet ndryshores container_name në skedarin e kompozimit të Docker më sipër. Nëse nuk keni një grup emri të kontejnerit, së pari do të duhet të gjeni emrin e kontejnerit dhe ta përdorni atë në komandën e mëposhtme.

$ docker exec --user www-data -it koel bash

Ekzekutoni komandën e mëposhtme për të krijuar një llogari administratori dhe për të inicializuar bazën e të dhënave.

$ php artisan koel:init --no-assets

Ndrysho fjalëkalimin e administratorit

Koel krijon një llogari administratori të paracaktuar me kredencialet e mëposhtme.

email: 
password: KoelIsCool

Ju mund të ndryshoni fjalëkalimin për llogarinë e administratorit duke përdorur komandën e mëposhtme nga brenda guaskës së kontejnerit.

$ php artisan koel:admin:change-password

Dilni nga guaska e kontejnerit.

$ exit

Hapi 8 - Instaloni SSL

Për të instaluar një certifikatë SSL duke përdorur Lets Encrypt, duhet të instalojmë mjetin Certbot.

Së pari, duhet të shkarkoni dhe instaloni depon e EPEL.

$ sudo dnf install epel-release

Ekzekutoni komandat e mëposhtme për të instaluar Certbot.

$ sudo dnf install certbot

Gjeneroni certifikatën SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d koel.example.com

Komanda e mësipërme do të shkarkojë një certifikatë në drejtorinë /etc/letsencrypt/live/koel.example.com në serverin tuaj.

Krijo një certifikatë grupi Diffie-Hellman.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Krijoni një direktorium rrënjësor të uebit sfidues për rinovimin automatik të Lets Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Krijo një Cron Job për të rinovuar SSL. Do të funksionojë çdo ditë për të kontrolluar certifikatën dhe për ta rinovuar nëse është e nevojshme. Për këtë, së pari, krijoni skedarin /etc/cron.daily/certbot-renew dhe hapeni atë për redaktim.

$ sudo nano /etc/cron.daily/certbot-renew

Ngjit kodin e mëposhtëm.

#!/bin/sh
certbot renew --cert-name koel.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Ruani skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet.

Ndryshoni lejet në skedarin e detyrës për ta bërë atë të ekzekutueshëm.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Hapi 9 - Instaloni Nginx

Ne do të instalojmë versionin më të fundit të Nginx. Krijoni dhe hapni skedarin /etc/yum.repos.d/nginx.repo për modifikim.

$ sudo nano /etc/yum.repos.d/nginx.repo

Ngjitni rreshtat e mëposhtëm në të.

[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

Ruani skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet.

Instaloni Nginx.

$ sudo dnf install nginx

Verifikoni instalimin.

$ nginx -v
nginx version: nginx/1.20.2

Aktivizo dhe nis shërbimin Nginx.

$ sudo systemctl enable nginx --now

Krijoni dhe hapni skedarin /etc/nginx/conf.d/koel.conf për modifikim.

$ sudo nano /etc/nginx/conf.d/koel.conf

Vendos kodin e mëposhtëm në të.

# 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;
    }
}

Pasi të keni përfunduar, ruani skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet. Konfigurimi i mësipërm lejon Nginx të veprojë si një server proxy dhe të lidhet me portin 8080 në localhost.

Hapni skedarin /etc/nginx/nginx.conf për modifikim.

$ sudo nano /etc/nginx/nginx.conf

Shtoni rreshtin e mëposhtëm përpara rreshtit include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Ruani skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet.

Verifikoni sintaksën e skedarit të konfigurimit 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

Rinisni shërbimin Nginx për të aktivizuar konfigurimin e ri.

$ sudo systemctl restart nginx

Hapi 10 - Hyni në Koel

Mund të hyni në Koel duke vizituar URL-në https://koel.example.com në shfletuesin tuaj. Ju do të përshëndeteni nga ekrani i mëposhtëm i hyrjes.

Futni [email  si emrin tuaj të përdoruesit dhe fjalëkalimin që keni vendosur përpara se të identifikoheni. Paneli i mëposhtëm do të shfaqet pas identifikimit të suksesshëm.

Hapi 11 - Importoni muzikë

Kopjoni skedarët muzikorë që dëshironi të importoni në dosjen ~/koel/music të sistemit tuaj. Ju mund të përdorni komandën scp për të importuar skedarët nga kompjuteri juaj lokal në server.

$ scp test.mp3 <yourserverIP>:/home/user/koel/music

Pasi të keni kopjuar skedarët në dosjen ~/koel/music, ekzekutoni komandën e mëposhtme për të importuar muzikën në Koel.

$ docker exec --user www-data koel php artisan koel:sync

Muzika do të shfaqet në ndërfaqen e internetit të Koels dhe mund të filloni të luani.

Ndërfaqja e internetit e Koels ju lejon gjithashtu të ngarkoni këngë drejtpërdrejt.

Hapi 12 - Përditëso Koel

Kaloni në drejtorinë Koel.

$ cd ~/koel

Tërhiq imazhin më të fundit të Koel Docker.

$ docker-compose pull

Fikni enën.

$ docker-compose down --remove-orphans

Filloni kontejnerin me imazhe të përditësuara.

$ docker-compose up -d

Verifikoni kontejnerët Docker.

$ docker ps

konkluzioni

Kjo përfundon tutorialin për instalimin e Shërbimit të Transmetimit të Muzikës Koel duke përdorur Docker në një server Rocky Linux. Nëse keni ndonjë pyetje, postojini ato në komentet më poshtë.