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.
[*]
Cài đặt các gói thiết yếu.
[*]
Tên miền tùy chỉnh trỏ đến máy chủ như koel.example.com.
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.
Nó sẽ hiển thị đầu ra sau.
Cho phép các cổng HTTP và HTTPS.
Kiểm tra lại trạng thái của tường lửa.
Bạn sẽ thấy kết quả tương tự.
Tải lại tường lửa để kích hoạt các thay đổi.
Cài đặt phiên bản Docker mới nhất.
Bật và chạy daemon Docker.
Xác minh rằng nó đang chạy.
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.
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.
Áp dụng quyền thực thi cho tệp nhị phân Docker Compose file.
Kiểm tra cài đặt.
Cài đặt tập lệnh Docker-compose Bash Completion.
Tải lại cài đặt hồ sơ của bạn để bash-completion hoạt động.
Khi đã vào container, hãy chạy lệnh sau để tạo khóa ứng dụng.
Xuất tệp môi trường đã sửa đổi với khóa ứng dụng mới được tạo.
Sao chép giá trị khóa và thoát khỏi shell chứa.
Chuyển đến thư mục.
Tạo thư mục nhạc.
Tạo và mở tệp .env.
Dán mã sau vào đó.
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.
Dán mã sau vào đó.
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.
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.
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.
Thoát khỏi shell container.
Trước tiên, bạn cần tải xuống và cài đặt kho lưu trữ EPEL.
Chạy các lệnh sau để cài đặt Certbot.
Tạo chứng chỉ SSL.
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.
Tạo thư mục gốc web thử thách để tự động gia hạn Let's Encrypt.
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.
Dán mã sau.
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.
Dán các dòng sau vào đó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Cài đặt Nginx.
Xác minh cài đặt.
Bật và khởi động dịch vụ Nginx.
Tạo và mở tệp /etc/nginx/conf.d/koel.conf để chỉnh sửa.
Dán mã sau vào đó.
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.
Thêm dòng sau trước dòng include /etc/nginx/conf.d/*.conf;.
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.
Khởi động lại dịch vụ Nginx để kích hoạt cấu hình mới.
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.
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.
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.
Kéo hình ảnh Docker Koel mới nhất.
Tắt nguồn container.
Khởi động container bằng hình ảnh đã cập nhật.
Xác minh các container Docker.
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
Mã:
$ sudo firewall-cmd --permanent --list-services
Mã:
cockpit dhcpv6-client ssh
Mã:
$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd --permanent --add-service=https
Mã:
$ sudo firewall-cmd --permanent --list-services
Mã:
cockpit dhcpv6-client http https ssh
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
Mã:
$ sudo dnf install docker-ce docker-ce-cli containerd.io
Mã:
$ sudo systemctl enable docker --now
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...
Mã:
$ sudo usermod -aG docker $(whoami)
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
Mã:
$ sudo chmod +x /usr/local/bin/docker-compose
Mã:
$ docker-compose --versiondocker-compose phiên bản 1.29.2, bản dựng 5becea4c
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
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
Mã:
$ php artisan key:generate --force
Mã:
$ cat .envAPP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4=
Mã:
$ exit
Bước 5 - Tạo tệp môi trường Koel
Tạo thư mục cho Koel.
Mã:
$ mkdir ~/koel
Mã:
$ cd ~/koel
Mã:
$ mkdir music
Mã:
$ nano .env
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
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
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
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
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
Mã:
$ php artisan koel:admin:change-password
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
Mã:
$ sudo dnf install certbot
Mã:
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d koel.example.com
Tạo chứng chỉ nhóm Diffie-Hellman.
Mã:
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Mã:
$ sudo mkdir -p /var/lib/letsencrypt
Mã:
$ sudo nano /etc/cron.daily/certbot-renew
Mã:
#!/bin/shcertbot renew --cert-name koel.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
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
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
Cài đặt Nginx.
Mã:
$ sudo dnf install nginx
Mã:
$ nginx -vphiên bản nginx: nginx/1.20.2
Mã:
$ sudo systemctl enable nginx --now
Mã:
$ sudo nano /etc/nginx/conf.d/koel.conf
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; }}
Mở tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Mã:
server_names_hash_bucket_size 64;
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
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
Mã:
$ docker exec --user www-data koel php artisan koel:sync
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
Mã:
$ docker-compose pull
Mã:
$ docker-compose down --remove-orphans
Mã:
$ docker-compose up -d
Mã:
$ docker ps