Как установить Koel Music Streaming Server с помощью Docker на Rocky Linux 8
На этой странице
- Предпосылки
- Шаг 1. Настройка брандмауэра
- Шаг 2. Установите Docker
- Шаг 3. Установите Docker Compose
- Шаг 4. Создайте ключ приложения Koel
- Шаг 5. Создание файла среды Koel
- Шаг 6. Создание файла компоновки Koel Docker
- Шаг 7. Запуск контейнера Koel
- Инициализировать Koel в первый раз
- Изменить пароль администратора
Koel — это веб-сервис потоковой передачи аудио, написанный на фреймворке Laravel PHP. Это позволяет вам транслировать вашу личную музыкальную коллекцию и получать к ней доступ из любой точки мира. Он поддерживает несколько медиаформатов, включая AAC, OGG, WMA, FLAC и APE.
В этом руководстве вы узнаете, как установить Koel Music Streaming Server с помощью Docker на компьютер Rocky Linux 8.
Предпосылки
-
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
.
Шаг 1. Настройте брандмауэр
Первым шагом является настройка брандмауэра. Rocky Linux использует Firewalld Firewall. Проверьте состояние брандмауэров.
$ sudo firewall-cmd --state running
Брандмауэр работает с разными зонами, и мы будем использовать публичную зону по умолчанию. Перечислите все службы и порты, активные на брандмауэре.
$ sudo firewall-cmd --permanent --list-services
Он должен показать следующий вывод.
cockpit dhcpv6-client ssh
Разрешить порты HTTP и HTTPS.
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https
Перепроверьте состояние брандмауэра.
$ sudo firewall-cmd --permanent --list-services
Вы должны увидеть аналогичный вывод.
cockpit dhcpv6-client http https ssh
Перезагрузите брандмауэр, чтобы изменения вступили в силу.
$ sudo firewall-cmd --reload
Шаг 2 — Установите Докер
Rocky Linux поставляется со старой версией Docker. Чтобы установить последнюю версию, сначала установите официальный репозиторий Docker.
$ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
Установите последнюю версию Docker.
$ sudo dnf install docker-ce docker-ce-cli containerd.io
Включите и запустите демон Docker.
$ sudo systemctl enable docker --now
Убедитесь, что он запущен.
? 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 ...
По умолчанию Docker требует привилегий root. Если вы хотите избежать использования
sudo
при каждом запуске командыdocker
, добавьте свое имя пользователя вdocker
группа.$ sudo usermod -aG docker $(whoami)
Вам нужно будет выйти из сервера и снова войти в систему как тот же пользователь, чтобы активировать это изменение.
Шаг 3 — Установите Docker Compose
Загрузите последнюю стабильную версию 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
Примените исполняемые разрешения к двоичному файлу Docker Compose.
$ sudo chmod +x /usr/local/bin/docker-compose
Протестируйте установку.
$ docker-compose --version docker-compose version 1.29.2, build 5becea4c
Установите скрипт завершения Bash для создания Docker.
$ sudo curl \ -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \ -o /etc/bash_completion.d/docker-compose
Перезагрузите настройки своего профиля, чтобы заработало завершение bash.
$ source ~/.bashrc
Шаг 4 — Создайте ключ приложения Koel
Мы сгенерируем ключ приложения Koels, запустив контейнер на короткое время. Выполните следующую команду, чтобы запустить контейнер и получить доступ к его оболочке.
$ docker run -it --rm phanan/koel bash
Оказавшись в контейнере, выполните следующую команду, чтобы сгенерировать ключ приложения.
$ php artisan key:generate --force
Выведите измененный файл среды с вновь сгенерированным ключом приложения.
$ cat .env APP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4=
Скопируйте значение ключа и выйдите из оболочки контейнера.
$ exit
Шаг 5 — Создайте файл среды Koel
Создайте каталог для Koel.
$ mkdir ~/koel
Перейдите в каталог.
$ cd ~/koel
Создайте музыкальный каталог.
$ mkdir music
Создайте и откройте файл
.env
.$ nano .env
Вставьте в него следующий код.
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
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Большинство настроек говорят сами за себя выше. Для работы необходимо настроить следующие параметры. Вставьте ключ приложения, сгенерированный на предыдущем шаге, в переменную
APP_KEY
. Введите имя своего домена в разделеAPP_URL
и установите лимит памяти в МБ в зависимости от ресурсов вашего сервера. Мы установили для метода потоковой передачиx-sendfile
, так как образ докера Koels использует Apache и поставляется с предварительно настроенным с ним. Для параметраFORCE_HTTPS
установлено значение true, поскольку мы будем использовать Nginx в качестве балансировщика нагрузки вместе с Lets Encrypt SSL для обслуживания Koel в Интернете. Настройте другие службы, если хотите использовать их вместе с Koel.Шаг 6 — Создайте файл компоновки Koel Docker
Создайте и откройте файл
docker-compose.yml
для редактирования.$ nano docker-compose.yml
Вставьте в него следующий код.
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
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Приведенный выше файл запускает контейнеры на основе образов докеров Koel и MySQL. Он предоставляет Koel доступ к порту 8080 на вашем компьютере. Музыка и файл среды монтируются в соответствующие места в контейнере. Каталог музыкальных обложек и индекс поиска вместе с данными MySQL монтируются как локальные тома. Выберите надежный пароль для переменных
MYSQL_ROOT_PASSWORD
,MYSQL_PASSWORD
и сопоставьте эти значения с переменными для контейнера Koel в файле выше. Чтобы связать контейнер Koel с контейнером базы данных, убедитесь, что переменныеDB_HOST
иdepends_on
названы в соответствии с именем службы контейнеров базы данных.Шаг 7 — Запустите контейнер Koel
Запустите контейнер Koel с помощью следующей команды.
$ docker-compose up -d
Инициализируйте Koel в первый раз
Войдите в оболочку Koel Container.
koel
в приведенной ниже команде ссылается на имя контейнера, установленного с помощью переменнойcontainer_name
в файле компоновки Docker выше. Если у вас нет установленного имени контейнера, вам придется сначала найти имя контейнера и использовать его в следующей команде.$ docker exec --user www-data -it koel bash
Выполните следующую команду, чтобы создать учетную запись администратора и инициализировать базу данных.
$ php artisan koel:init --no-assets
Изменить пароль администратора
Koel создает учетную запись администратора по умолчанию со следующими учетными данными.
email: password: KoelIsCool
Вы можете изменить пароль для учетной записи администратора, используя следующую команду из оболочки контейнера.
$ php artisan koel:admin:change-password
Выйдите из оболочки контейнера.
$ exit
Шаг 8 — Установите SSL
Чтобы установить SSL-сертификат с помощью Lets Encrypt, нам нужно установить инструмент Certbot.
Во-первых, вам нужно скачать и установить репозиторий EPEL.
$ sudo dnf install epel-release
Выполните следующие команды, чтобы установить Certbot.
$ sudo dnf install certbot
Создайте SSL-сертификат.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m -d koel.example.com
Приведенная выше команда загрузит сертификат в каталог
/etc/letsencrypt/live/koel.example.com
на вашем сервере.Создайте групповой сертификат Диффи-Хеллмана.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Создайте корневую веб-директорию для автоматического обновления Lets Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Создайте задание Cron для обновления SSL. Он будет запускаться каждый день, чтобы проверять сертификат и при необходимости обновлять его. Для этого сначала создайте файл
/etc/cron.daily/certbot-renew
и откройте его для редактирования.$ sudo nano /etc/cron.daily/certbot-renew
Вставьте следующий код.
#!/bin/sh certbot renew --cert-name koel.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Измените права доступа к файлу задачи, чтобы сделать его исполняемым.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Шаг 9 — Установите Nginx
Мы будем устанавливать последнюю версию Nginx. Создайте и откройте файл
/etc/yum.repos.d/nginx.repo
для редактирования.$ sudo nano /etc/yum.repos.d/nginx.repo
Вставьте в него следующие строки.
[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
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Установите Нгинкс.
$ sudo dnf install nginx
Проверьте установку.
$ nginx -v nginx version: nginx/1.20.2
Включите и запустите службу Nginx.
$ sudo systemctl enable nginx --now
Создайте и откройте файл
/etc/nginx/conf.d/koel.conf
для редактирования.$ sudo nano /etc/nginx/conf.d/koel.conf
Вставьте в него следующий код.
# 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; } }
После завершения сохраните файл, нажав Ctrl + X и введя Y при появлении запроса. Приведенная выше конфигурация позволяет Nginx действовать как прокси-сервер и привязываться к порту 8080 на локальном хосте.
Откройте файл
/etc/nginx/nginx.conf
для редактирования.$ sudo nano /etc/nginx/nginx.conf
Добавьте следующую строку перед строкой
include /etc/nginx/conf.d/*.conf;
.server_names_hash_bucket_size 64;
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Проверьте синтаксис файла конфигурации 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
Перезапустите службу Nginx, чтобы активировать новую конфигурацию.
$ sudo systemctl restart nginx
Шаг 10 — Доступ к Коэлю
Вы можете получить доступ к Koel, посетив URL-адрес
https://koel.example.com
в своем браузере. Вас встретит следующий экран входа в систему.Введите
[email
в качестве имени пользователя и пароля, который вы установили перед входом в систему. При успешном входе появится следующая панель инструментов.Шаг 11 — Импорт музыки
Скопируйте музыкальные файлы, которые вы хотите импортировать, в папку
~/koel/music
вашей системы. Вы можете использовать командуscp
для импорта файлов с локального ПК на сервер.$ scp test.mp3 <yourserverIP>:/home/user/koel/music
Скопировав файлы в папку
~/koel/music
, выполните следующую команду, чтобы импортировать музыку в Koel.$ docker exec --user www-data koel php artisan koel:sync
Музыка появится в веб-интерфейсе Koels, и вы сможете начать играть.
Веб-интерфейс Koels также позволяет напрямую загружать песни.
Шаг 12 — Обновите Koel
Перейдите в каталог Koel.
$ cd ~/koel
Загрузите последний образ Koel Docker.
$ docker-compose pull
Выключите контейнер.
$ docker-compose down --remove-orphans
Запустите контейнер с обновленными образами.
$ docker-compose up -d
Проверьте контейнеры Docker.
$ docker ps
Заключение
На этом мы завершаем руководство по установке Koel Music Streaming Service с помощью Docker на сервер Rocky Linux. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.