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