Инструкция · 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 в вашем браузере. Вы увидите следующий экран входа.

Экран входа Koel

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

Панель управления Koel

Шаг 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. Если у вас есть какие-либо вопросы, оставьте их в комментариях ниже.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.