Cách cài đặt Koel Music Streaming Server bằng Docker trên Rocky Linux 8

theanh

Administrator
Nhân viên
Koel là dịch vụ phát trực tuyến âm thanh dựa trên web được viết bằng khung Laravel PHP. Nó cho phép bạn phát trực tuyến bộ sưu tập nhạc cá nhân của mình và truy cập từ bất kỳ đâu trên thế giới. Nó hỗ trợ nhiều định dạng phương tiện, bao gồm AAC, OGG, WMA, FLAC và APE.

Trong hướng dẫn này, bạn sẽ học cách cài đặt Koel Music Streaming Server bằng Docker trên máy Rocky Linux 8.

Điều kiện tiên quyết​


  • Máy chủ chạy Rocky Linux 8.5.

  • Người dùng không phải root có quyền sudo.

  • Cập nhật mọi thứ.
Mã:
$ sudo dnf update
[*]
Cài đặt các gói thiết yếu.
Mã:
$ sudo dnf install yum-utils nano curl
[*]
Tên miền tùy chỉnh trỏ đến máy chủ như koel.example.com.

Bước 1 - Cấu hình Tường lửa​

Bước đầu tiên là cấu hình tường lửa. Rocky Linux sử dụng Firewalld Firewall. Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo firewall-cmd --staterunning
Tường lửa hoạt động với các vùng khác nhau và vùng công cộng là vùng mặc định mà chúng ta sẽ sử dụng. Liệt kê tất cả các dịch vụ và cổng đang hoạt động trên tường lửa.
Mã:
$ sudo firewall-cmd --permanent --list-services
Nó sẽ hiển thị đầu ra sau.
Mã:
cockpit dhcpv6-client ssh
Cho phép các cổng HTTP và HTTPS.
Mã:
$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd --permanent --add-service=https
Kiểm tra lại trạng thái của tường lửa.
Mã:
$ sudo firewall-cmd --permanent --list-services
Bạn sẽ thấy kết quả tương tự.
Mã:
cockpit dhcpv6-client http https ssh
Tải lại tường lửa để kích hoạt các thay đổi.
Mã:
$ sudo firewall-cmd --reload

Bước 2 - Cài đặt Docker​

Rocky Linux được tích hợp sẵn phiên bản Docker cũ hơn. Để cài đặt phiên bản mới nhất, trước tiên, hãy cài đặt kho lưu trữ Docker chính thức.
Mã:
$ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
Cài đặt phiên bản Docker mới nhất.
Mã:
$ sudo dnf install docker-ce docker-ce-cli containerd.io
Bật và chạy daemon Docker.
Mã:
$ sudo systemctl enable docker --now
Xác minh rằng nó đang chạy.
Mã:
? docker.service - Docker Application Container Engine Đã tải: đã tải (/usr/lib/systemd/system/docker.service; đã bật; cài đặt trước của nhà cung cấp: đã tắt) Đang hoạt động: đang hoạt động (đang chạy) kể từ Thứ bảy 2022-04-02 13:26:08 UTC; 2 giây trước Tài liệu: https://docs.docker.com PID chính: 21152 (dockerd) Nhiệm vụ: 7 Bộ nhớ: 30,9M CGroup: /system.slice/docker.service ??21152 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock...
Theo mặc định, Docker yêu cầu quyền root. Nếu bạn muốn tránh sử dụng sudo mỗi khi chạy lệnh docker, hãy thêm tên người dùng của bạn vào nhóm docker.
Mã:
$ sudo usermod -aG docker $(whoami)
Bạn sẽ cần đăng xuất khỏi máy chủ và đăng nhập lại với cùng một người dùng để bật thay đổi này.

Bước 3 - Cài đặt Docker Compose​

Tải xuống bản phát hành ổn định mới nhất của Docker Compose.
Mã:
$ 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
Áp dụng quyền thực thi cho tệp nhị phân Docker Compose file.
Mã:
$ sudo chmod +x /usr/local/bin/docker-compose
Kiểm tra cài đặt.
Mã:
$ docker-compose --versiondocker-compose phiên bản 1.29.2, bản dựng 5becea4c
Cài đặt tập lệnh Docker-compose Bash Completion.
Mã:
$ sudo curl \ -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \ -o /etc/bash_completion.d/docker-compose
Tải lại cài đặt hồ sơ của bạn để bash-completion hoạt động.
Mã:
$ source ~/.bashrc

Bước 4 - Tạo Khóa ứng dụng Koel​

Chúng tôi sẽ tạo khóa ứng dụng của Koel bằng cách chạy container trong một thời gian ngắn. Chạy lệnh sau để chạy container và truy cập shell của nó.
Mã:
$ docker run -it --rm phanan/koel bash
Khi đã vào container, hãy chạy lệnh sau để tạo khóa ứng dụng.
Mã:
$ php artisan key:generate --force
Xuất tệp môi trường đã sửa đổi với khóa ứng dụng mới được tạo.
Mã:
$ cat .envAPP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4=
Sao chép giá trị khóa và thoát khỏi shell chứa.
Mã:
$ exit

Bước 5 - Tạo tệp môi trường Koel​

Tạo thư mục cho Koel.
Mã:
$ mkdir ~/koel
Chuyển đến thư mục.
Mã:
$ cd ~/koel
Tạo thư mục nhạc.
Mã:
$ mkdir music
Tạo và mở tệp .env.
Mã:
$ nano .env
Dán mã sau vào đó.
Mã:
APP_NAME=Koel# Một chuỗi 32 ký tự ngẫu nhiên. Bạn có thể để trống nếu sử dụng php artisan koel:init.APP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4=# Đường dẫn TUYỆT ĐỐI đến phương tiện của bạn. Giá trị này luôn có thể được thay đổi sau thông qua giao diện web.MEDIA_PATH=/musicAPP_ENV=productionAPP_DEBUG=trueAPP_URL=https://koel.example.com# Thời gian quét tối đa, tính bằng giây. Tăng giá trị này nếu bạn có một thư viện lớn.# Lưu ý: Cài đặt này không có hiệu lực khi quét qua koel:sync.APP_MAX_SCAN_TIME=600# Giới hạn bộ nhớ, tính bằng MB, được quy trình quét sử dụng.# Ví dụ, nếu bạn muốn đặt giới hạn bộ nhớ là 2048MB, hãy nhập "2048" (không có# dấu ngoặc kép) tại đây.MEMORY_LIMIT=512# Phương pháp phát trực tuyến.# Có thể là 'php' (mặc định), 'x-sendfile' hoặc 'x-accel-redirect'# Xem https://docs.koel.dev/#streaming-music để biết thêm thông tin.# Lưu ý: Cài đặt này không có hiệu lực nếu phương tiện cần chuyển mã (ví dụ: FLAC).STREAMING_METHOD=x-sendfile# Nếu bạn muốn Koel tích hợp với Last.fm, hãy đặt thông tin chi tiết về API tại đây.# Xem https://docs.koel.dev/3rd-party.html#last-fm để biết thêm thông tinLASTFM_API_KEY=LASTFM_API_SECRET=# Nếu bạn muốn sử dụng Amazon S3 với Koel, hãy điền thông tin tại đây và làm theo# hướng dẫn cài đặt tại https://docs.koel.dev/aws-s3.htmlAWS_ACCESS_KEY_ID=AWS_SECRET_ACCESS_KEY=AWS_REGION=# Nếu bạn muốn Koel tích hợp với YouTube, hãy đặt khóa API tại đây.# Xem https://docs.koel.dev/3rd-party.html#youtube để biết thêm thông tin.YOUTUBE_API_KEY=# Bạn cũng có thể định cấu hình Koel để sử dụng CDN để phục vụ các tệp phương tiện.# URL này phải được ánh xạ tới URL trang chủ của cài đặt Koel của bạn.# Không có dấu gạch chéo theo sau, vui lòng.CDN_URL=# Tốc độ bit của luồng mp3 đầu ra. Giá trị cao hơn dẫn đến chất lượng tốt hơn,# nhưng phát trực tuyến chậm hơn và băng thông rộng hơn.OUTPUT_BIT_RATE=128# Có cho phép tải xuống bài hát không.# Lưu ý rằng nếu bạn tải xuống nhiều hơn một bài hát, Koel sẽ nén chúng# bằng ZipArchive của PHP. Vì vậy, nếu mô-đun không khả dụng trong môi trường hiện tại#, thì quá trình tải xuống như vậy sẽ (âm thầm) thất bại.ALLOW_DOWNLOAD=true# Nếu đặt thành true, truy vấn để lấy thông tin nghệ sĩ, album và bài hát sẽ được lưu vào bộ nhớ đệm.# Điều này có thể tăng tốc thời gian khởi động của Koel, đặc biệt nếu thư viện của bạn rất lớn.# Tuy nhiên, quá trình hủy tuần tự hóa bộ nhớ đệm có thể nhạy cảm với bộ nhớ, vì vậy nếu bạn gặp phải# lỗi, hãy thử đặt thành false.CACHE_MEDIA=true# Koel cố gắng phát hiện xem trang web của bạn có sử dụng HTTPS hay không và tạo URL an toàn theo đó.# Nếu vì lý do nào đó mà điều này xảy ra, bạn có thể buộc thực hiện bằng cách đặt giá trị này thành true.FORCE_HTTPS=true# Các biến bên dưới là dành riêng cho Laravel.# Bạn có thể thay đổi chúng nếu bạn biết mình đang làm gì. Nếu không, hãy để nguyên chúng.APP_LOG_LEVEL=debugBROADCAST_DRIVER=logCACHE_DRIVER=fileSESSION_DRIVER=fileQUEUE_DRIVER=sync
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Hầu hết các cài đặt ở trên đều tự giải thích. Các cài đặt sau đây cần được định cấu hình để hoạt động. Dán khóa ứng dụng được tạo ở bước trước vào biến APP_KEY. Nhập tên miền của bạn vào APP_URL và đặt giới hạn bộ nhớ tính bằng MB tùy thuộc vào tài nguyên của máy chủ. Chúng tôi đã đặt phương thức phát trực tuyến thành x-sendfile vì hình ảnh docker của Koel sử dụng Apache và được cấu hình sẵn. Thiết lập FORCE_HTTPS được đặt thành true vì chúng tôi sẽ sử dụng Nginx làm bộ cân bằng tải cùng với Let's Encrypt SSL để phục vụ Koel cho web. Cấu hình các dịch vụ khác nếu bạn muốn sử dụng chúng cùng với Koel.

Bước 6 - Tạo tệp Koel Docker Compose​

Tạo và mở tệp docker-compose.yml để chỉnh sửa.
Mã:
$ nano docker-compose.yml
Dán mã sau vào đó.
Mã:
phiên bản: '3.3'dịch vụ: koel: hình ảnh: phanan/koel container_name: koel phụ thuộc vào: - koeldb khởi động lại: trừ khi dừng cổng: - 8080:80 môi trường: - DB_CONNECTION=mysql - DB_HOST=koeldb - DB_USERNAME=koel - DB_PASSWORD=koelpassword - DB_DATABASE=koel khối lượng: - ./music:/music - ./.env:/var/www/html/.env - covers:/var/www/html/public/img/covers - search_index:/var/www/html/storage/search-indexes koeldb: hình ảnh: mysql/mysql-server:8.0 khởi động lại: trừ khi dừng khối lượng: - db:/var/lib/mysql môi trường: - MYSQL_ROOT_PASSWORD=rootpassword - MYSQL_DATABASE=koel - MYSQL_USER=koel - MYSQL_PASSWORD=koelpasswordvolumes: db: driver: local covers: driver: local search_index: driver: local
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tệp trên khởi chạy các container dựa trên Koel và hình ảnh docker của MySQL. Tệp này sẽ đưa Koel đến cổng 8080 trên máy của bạn. Tệp nhạc và tệp môi trường được gắn vào các vị trí tương ứng trên container. Thư mục dành cho các bản cover nhạc và chỉ mục tìm kiếm, cùng với dữ liệu MySQL, được gắn dưới dạng các ổ đĩa cục bộ. Chọn mật khẩu mạnh cho các biến MYSQL_ROOT_PASSWORD, MYSQL_PASSWORD và khớp các giá trị đó với các biến cho container Koel trong tệp trên. Để liên kết vùng chứa Koel với vùng chứa cơ sở dữ liệu, hãy đảm bảo các biến DB_HOST và depends_on được đặt tên theo tên dịch vụ của vùng chứa Cơ sở dữ liệu.

Bước 7 - Khởi động vùng chứa Koel​

Khởi chạy vùng chứa Koel bằng lệnh sau.
Mã:
$ docker-compose up -d

Khởi tạo Koel lần đầu tiên​

Đăng nhập vào shell vùng chứa Koel. koel trong lệnh bên dưới tham chiếu đến tên của bộ vùng chứa thông qua biến container_name trong tệp Docker compose ở trên. Nếu bạn không đặt tên container, trước tiên bạn sẽ phải tìm tên container và sử dụng tên đó trong lệnh sau.
Mã:
$ docker exec --user www-data -it koel bash
Chạy lệnh sau để tạo tài khoản quản trị viên và khởi tạo cơ sở dữ liệu.
Mã:
$ php artisan koel:init --no-assets

Đổi mật khẩu quản trị viên​

Koel tạo tài khoản quản trị viên mặc định với thông tin đăng nhập sau.
Mã:
email: [emailprotected]password: KoelIsCool
Bạn có thể thay đổi mật khẩu cho tài khoản quản trị viên bằng lệnh sau từ bên trong shell container.
Mã:
$ php artisan koel:admin:change-password
Thoát khỏi shell container.
Mã:
$ exit

Bước 8 - Cài đặt SSL​

Để cài đặt chứng chỉ SSL bằng Let's Encrypt, chúng ta cần cài đặt công cụ Certbot.

Trước tiên, bạn cần tải xuống và cài đặt kho lưu trữ EPEL.
Mã:
$ sudo dnf install epel-release
Chạy các lệnh sau để cài đặt Certbot.
Mã:
$ sudo dnf install certbot
Tạo chứng chỉ SSL.
Mã:
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d koel.example.com
Lệnh trên sẽ tải xuống chứng chỉ vào thư mục /etc/letsencrypt/live/koel.example.com trên máy chủ của bạn máy chủ.

Tạo chứng chỉ nhóm Diffie-Hellman.
Mã:
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Tạo thư mục gốc web thử thách để tự động gia hạn Let's Encrypt.
Mã:
$ sudo mkdir -p /var/lib/letsencrypt
Tạo Cron Job để gia hạn SSL. Nó sẽ chạy hàng ngày để kiểm tra chứng chỉ và gia hạn nếu cần. Để thực hiện việc đó, trước tiên, hãy tạo tệp /etc/cron.daily/certbot-renew và mở tệp đó để chỉnh sửa.
Mã:
$ sudo nano /etc/cron.daily/certbot-renew
Dán mã sau.
Mã:
#!/bin/shcertbot renew --cert-name koel.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Thay đổi quyền trên tệp tác vụ để làm cho tệp đó có thể thực thi được.
Mã:
$ sudo chmod +x /etc/cron.daily/certbot-renew

Bước 9 - Cài đặt Nginx​

Chúng tôi sẽ cài đặt phiên bản Nginx mới nhất. Tạo và mở tệp /etc/yum.repos.d/nginx.repo để chỉnh sửa.
Mã:
$ sudo nano /etc/yum.repos.d/nginx.repo
Dán các dòng sau vào đó.
Mã:
[nginx-stable]name=nginx stable repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=1enabled=1gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true[nginx-mainline]name=nginx mainline repobaseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/gpgcheck=1enabled=0gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Cài đặt Nginx.
Mã:
$ sudo dnf install nginx
Xác minh cài đặt.
Mã:
$ nginx -vphiên bản nginx: nginx/1.20.2
Bật và khởi động dịch vụ Nginx.
Mã:
$ sudo systemctl enable nginx --now
Tạo và mở tệp /etc/nginx/conf.d/koel.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/koel.conf
Dán mã sau vào đó.
Mã:
# Chuyển hướng tất cả các tệp không được mã hóa sang tệp được mã hóaserver { listen 80; listen [::]:80; server_name koel.example.com; return 301 https://$host$request_uri;}server { listen 443 ssl http2; lắng nghe [::]:443 ssl http2; tên_máy_chủ koel.example.com; chứng_nhận_ssl /etc/letsencrypt/live/koel.example.com/fullchain.pem; khóa_chứng_nhận_ssl /etc/letsencrypt/live/koel.example.com/privkey.pem; chứng_nhận_tin_cậy_ssl /etc/letsencrypt/live/koel.example.com/chain.pem; thời gian chờ ssl_session 1 ngày; bộ nhớ đệm ssl_session được chia sẻ:MozSSL:10 phút; ssl_session_tickets tắt; ssl_stapling bật; ssl_stapling_verify bật; ssl_dhparam /etc/ssl/certs/dhparam.pem; giao_thức_ssl 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; nhật ký truy cập /var/log/nginx/koel.example.com.access.log chính; nhật ký lỗi /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; }}
Sau khi hoàn tất, hãy lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc. Cấu hình trên cho phép Nginx hoạt động như một máy chủ proxy và liên kết với cổng 8080 trên máy chủ cục bộ.

Mở tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Thêm dòng sau trước dòng include /etc/nginx/conf.d/*.conf;.
Mã:
server_names_hash_bucket_size 64;
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Xác minh cú pháp tệp cấu hình Nginx.
Mã:
$ sudo nginx -tnginx: cú pháp tệp cấu hình /etc/nginx/nginx.conf là oknginx: configuration file /etc/nginx/nginx.conf test thành công
Khởi động lại dịch vụ Nginx để kích hoạt cấu hình mới.
Mã:
$ sudo systemctl restart nginx

Bước 10 - Truy cập Koel​

Bạn có thể truy cập Koel bằng cách truy cập URL https://koel.example.com trong trình duyệt của bạn. Bạn sẽ được chào đón bằng màn hình đăng nhập sau.



Nhập [emailprotected] làm tên người dùng và mật khẩu bạn đã đặt trước khi đăng nhập. Bảng điều khiển sau sẽ xuất hiện khi đăng nhập thành công.


Bước 11 - Nhập nhạc​

Sao chép các tệp nhạc bạn muốn nhập vào thư mục ~/koel/music của hệ thống. Bạn có thể sử dụng lệnh scp để nhập các tệp từ PC cục bộ của bạn vào máy chủ.
Mã:
$ scp test.mp3 user@:/home/user/koel/music
Sau khi bạn đã sao chép các tệp vào thư mục ~/koel/music, hãy chạy lệnh sau để nhập nhạc vào Koel.
Mã:
$ docker exec --user www-data koel php artisan koel:sync
Nhạc sẽ hiển thị trên giao diện web của Koel và bạn có thể bắt đầu phát.

Giao diện web của Koel cũng cho phép bạn tải trực tiếp các bài hát lên.

Bước 12 - Cập nhật Koel​

Chuyển sang thư mục Koel.
Mã:
$ cd ~/koel
Kéo hình ảnh Docker Koel mới nhất.
Mã:
$ docker-compose pull
Tắt nguồn container.
Mã:
$ docker-compose down --remove-orphans
Khởi động container bằng hình ảnh đã cập nhật.
Mã:
$ docker-compose up -d
Xác minh các container Docker.
Mã:
$ docker ps

Kết luận​

Bài hướng dẫn về cách cài đặt Koel Music Streaming Service bằng Docker trên máy chủ Rocky Linux đã kết thúc. Nếu bạn có bất kỳ câu hỏi nào, hãy đăng chúng trong phần bình luận bên dưới.
 
Back
Bên trên