Поиск по сайту:

Как установить Koel Music Streaming Server с помощью Docker на Rocky Linux 8


На этой странице

  1. Предпосылки
  2. Шаг 1. Настройка брандмауэра
  3. Шаг 2. Установите Docker
  4. Шаг 3. Установите Docker Compose
  5. Шаг 4. Создайте ключ приложения Koel
  6. Шаг 5. Создание файла среды Koel
  7. Шаг 6. Создание файла компоновки Koel Docker
  8. Шаг 7. Запуск контейнера Koel
    1. Инициализировать Koel в первый раз
    2. Изменить пароль администратора

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