Инструкция · 10 min read · Nov 03, 2025
Как установить сервер потоковой музыки Koel с использованием Docker на Rocky Linux 8

Koel — это веб-сервис потоковой передачи аудио, написанный на фреймворке Laravel PHP. Он позволяет вам транслировать вашу личную музыкальную коллекцию и получать к ней доступ из любой точки мира. Он поддерживает множество медиаформатов, включая AAC, OGG, WMA, FLAC и APE.
В этом руководстве вы узнаете, как установить сервер потоковой музыки Koel с использованием Docker на машине с Rocky Linux 8.
Предварительные требования
- Сервер с установленным Rocky Linux 8.5.
- Пользователь без прав root с привилегиями sudo.
- Обновите все.
$ sudo dnf update - Установите необходимые пакеты.
$ sudo dnf install yum-utils nano curl - Пользовательское доменное имя, указывающее на сервер, например
koel.example.com.
Шаг 1 - Настройка брандмауэра
Первый шаг — настроить брандмауэр. Rocky Linux использует брандмауэр Firewalld. Проверьте статус брандмауэра.
$ 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 - Установка Docker
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-compose.
$ 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
Мы сгенерируем ключ приложения Koel, запустив контейнер на короткое время. Выполните следующую команду, чтобы запустить контейнер и получить доступ к его оболочке.
$ 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
# Случайная строка из 32 символов. Вы можете оставить это пустым, если используете php artisan koel:init.
APP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4=
# ABSOLUTE путь к вашим медиафайлам. Это значение всегда можно изменить позже через веб-интерфейс.
MEDIA_PATH=/music
APP_ENV=production
APP_DEBUG=true
APP_URL=https://koel.example.com
# Максимальное время сканирования, в секундах. Увеличьте это, если у вас большая библиотека.
# Примечание: Эта настройка не имеет эффекта при сканировании через koel:sync.
APP_MAX_SCAN_TIME=600
# Лимит памяти, в МБ, используемый процессом сканирования.
# Например, если вы хотите установить лимит памяти в 2048 МБ, введите "2048" (без
# кавычек) здесь.
MEMORY_LIMIT=512
# Метод потоковой передачи.
# Может быть 'php' (по умолчанию), 'x-sendfile' или 'x-accel-redirect'
# См. https://docs.koel.dev/#streaming-music для получения дополнительной информации.
# Примечание: Эта настройка не имеет эффекта, если медиафайлы требуют транскодирования (например, FLAC).
STREAMING_METHOD=x-sendfile
# Если вы хотите, чтобы Koel интегрировался с Last.fm, укажите здесь данные API.
# См. https://docs.koel.dev/3rd-party.html#last-fm для получения дополнительной информации
LASTFM_API_KEY=
LASTFM_API_SECRET=
# Если вы хотите использовать Amazon S3 с Koel, заполните информацию здесь и следуйте
# руководству по установке на https://docs.koel.dev/aws-s3.html
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=
# Если вы хотите, чтобы Koel интегрировался с YouTube, укажите здесь ключ API.
# См. https://docs.koel.dev/3rd-party.html#youtube для получения дополнительной информации.
YOUTUBE_API_KEY=
# Вы также можете настроить Koel для использования CDN для обслуживания медиафайлов.
# Этот URL должен быть сопоставлен с домашним URL вашей установки Koel.
# Без завершающего слэша, пожалуйста.
CDN_URL=
# Битрейт выходного mp3 потока. Более высокое значение приводит к лучшему качеству,
# но медленному потоку и большему потреблению полосы пропускания.
OUTPUT_BIT_RATE=128
# Разрешить загрузку песен.
# Обратите внимание, что если вы загружаете более одной песни, Koel упакует их
# с помощью PHP ZipArchive. Поэтому, если модуль недоступен в текущем
# окружении, такая загрузка (тихо) не удастся.
ALLOW_DOWNLOAD=true
# Если это установлено в true, запрос на получение информации об исполнителе, альбоме и песне будет кэшироваться.
# Это может ускорить время загрузки Koel, особенно если ваша библиотека огромна.
# Однако процесс десериализации кэша может быть чувствителен к памяти, поэтому, если вы столкнетесь
# с ошибками, попробуйте установить это значение в false.
CACHE_MEDIA=true
# Koel пытается определить, использует ли ваш сайт HTTPS, и генерирует безопасные URL соответственно.
# Если это не удается по какой-либо причине, вы можете принудительно установить это значение в true.
FORCE_HTTPS=true
# Переменные ниже специфичны для Laravel.
# Вы можете изменить их, если знаете, что делаете. В противном случае просто оставьте их как есть.
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, так как образ Docker Koel использует Apache и предварительно настроен с ним. Настройка FORCE_HTTPS установлена в true, потому что мы будем использовать Nginx в качестве балансировщика нагрузки вместе с Let’s Encrypt SSL для обслуживания Koel в сети. Настройте другие службы, если хотите использовать их вместе с Koel.
Шаг 6 - Создание файла Docker Compose для Koel
Создайте и откройте файл 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, когда будет предложено.
Вышеуказанный файл запускает контейнеры на основе образов Docker 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. koel в команде ниже относится к имени контейнера, установленному через переменную container_name в файле Docker compose выше. Если у вас не установлено имя контейнера, вам нужно будет сначала найти имя контейнера и использовать его в следующей команде.
$ docker exec --user www-data -it koel bash
Выполните следующую команду, чтобы создать учетную запись администратора и инициализировать базу данных.
$ php artisan koel:init --no-assets
Изменение пароля администратора
Koel создает учетную запись администратора по умолчанию с следующими учетными данными.
email: [email protected]
password: KoelIsCool
Вы можете изменить пароль для учетной записи администратора, используя следующую команду из оболочки контейнера.
$ php artisan koel:admin:change-password
Выйдите из оболочки контейнера.
$ exit
Шаг 8 - Установка SSL
Чтобы установить SSL-сертификат с использованием Let’s 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 [email protected] -d koel.example.com
Вышеуказанная команда загрузит сертификат в директорию /etc/letsencrypt/live/koel.example.com на вашем сервере.
Сгенерируйте сертификат группы Диффи-Хеллмана.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Создайте корневой каталог для веб-челленджей для автоматического обновления Let’s 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, когда будет предложено.
Установите Nginx.
$ 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
Вставьте следующий код в него.
# Перенаправить все незащищенные на защищенные
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 на localhost.
Откройте файл /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
Вы можете получить доступ к Koel, посетив URL https://koel.example.com в вашем браузере. Вы увидите следующий экран входа.

Введите [email protected] в качестве имени пользователя и пароль, который вы установили, прежде чем войти. Следующий информационный панель появится после успешного входа.

Шаг 11 - Импорт музыки
Скопируйте музыкальные файлы, которые вы хотите импортировать, в папку ~/koel/music вашей системы. Вы можете использовать команду scp, чтобы импортировать файлы с вашего локального ПК на сервер.
$ scp test.mp3 user@:/home/user/koel/music
После того как вы скопировали файлы в папку ~/koel/music, выполните следующую команду, чтобы импортировать музыку в Koel.
$ docker exec --user www-data koel php artisan koel:sync
Музыка появится в веб-интерфейсе Koel, и вы сможете начать воспроизведение.
Веб-интерфейс Koel также позволяет загружать песни напрямую.
Шаг 12 - Обновление Koel
Перейдите в каталог Koel.
$ cd ~/koel
Получите последнюю версию образа Docker Koel.
$ docker-compose pull
Выключите контейнер.
$ docker-compose down --remove-orphans
Запустите контейнер с обновленными образами.
$ docker-compose up -d
Проверьте контейнеры Docker.
$ docker ps
Заключение
Это завершает руководство по установке сервиса потоковой музыки Koel с использованием Docker на сервере Rocky Linux. Если у вас есть какие-либо вопросы, оставьте их в комментариях ниже.
Get new posts in your inbox
No spam. Unsubscribe anytime.