音楽ストリーミング · 4 min read · Nov 03, 2025
Rocky Linux 8でDockerを使用してKoel音楽ストリーミングサーバーをインストールする方法

Koelは、Laravel PHPフレームワークで書かれたウェブベースのオーディオストリーミングサービスです。これにより、個人の音楽コレクションをストリーミングし、世界中のどこからでもアクセスできます。AAC、OGG、WMA、FLAC、APEなど、複数のメディアフォーマットをサポートしています。
このチュートリアルでは、Rocky Linux 8マシン上でDockerを使用してKoel音楽ストリーミングサーバーをインストールする方法を学びます。
前提条件
- Rocky Linux 8.5を実行しているサーバー。
- sudo権限を持つ非rootユーザー。
- すべてを更新します。
$ 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権限を必要とします。dockerコマンドを実行するたびにsudoを使用したくない場合は、ユーザー名を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
Docker-compose Bash Completionスクリプトをインストールします。
$ 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-completionを機能させるためにプロファイル設定を再読み込みします。
$ 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=
# メディアへの絶対パス。この値は後でウェブインターフェースを介して変更できます。
MEDIA_PATH=/music
APP_ENV=production
APP_DEBUG=true
APP_URL=https://koel.example.com
# 最大スキャン時間(秒)。ライブラリが巨大な場合はこれを増やします。
# 注意:この設定はkoel:syncを介してスキャンする場合には影響しません。
APP_MAX_SCAN_TIME=600
# スキャンプロセスで使用されるメモリ制限(MB)。
# たとえば、2048MBのメモリ制限を設定したい場合は、ここに「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=
# KoelでAmazon S3を使用したい場合は、ここに情報を入力し、
# 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はKoelのインストールのホームURLにマッピングされる必要があります。
# トレーリングスラッシュは不要です。
CDN_URL=
# 出力mp3ストリームのビットレート。値が高いほど品質が向上しますが、
# ストリーミングが遅くなり、帯域幅が増加します。
OUTPUT_BIT_RATE=128
# 曲のダウンロードを許可するかどうか。
# 複数の曲をダウンロードする場合、KoelはPHPのZipArchiveを使用してそれらをzip化します。
# したがって、現在の環境にモジュールがない場合、そのダウンロードは(静かに)失敗します。
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の下にドメイン名を入力し、サーバーのリソースに応じてMB単位でメモリ制限を設定します。ストリーミング方法はx-sendfileに設定しました。これはKoelのDockerイメージがApacheを使用し、事前に設定されているためです。FORCE_HTTPS設定はtrueに設定されています。これは、Nginxをロードバランサーとして使用し、Let’s Encrypt SSLを使用してKoelをウェブに提供するためです。他のサービスを使用したい場合は、それらを設定してください。
ステップ6 - Koel Docker Composeファイルの作成
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のDockerイメージに基づいてコンテナを起動します。Koelをマシンのポート8080に公開します。音楽と環境ファイルは、コンテナ内のそれぞれの場所にマウントされます。音楽カバーと検索インデックスのディレクトリ、およびMySQLデータはローカルボリュームとしてマウントされます。MYSQL_ROOT_PASSWORD、MYSQL_PASSWORDの変数に強力なパスワードを選択し、上記のファイルのKoelコンテナの変数と一致させてください。Koelコンテナをデータベースコンテナにリンクするには、DB_HOSTとdepends_on変数がデータベースコンテナのサービス名に名前を付ける必要があります。
ステップ7 - Koelコンテナの起動
次のコマンドを使用してKoelコンテナを起動します。
$ docker-compose up -d
初めてKoelを初期化する
Koelコンテナシェルにログインします。以下のコマンドのkoelは、上記のDocker Composeファイルでcontainer_name変数を介して設定されたコンテナの名前を指します。コンテナ名が設定されていない場合は、最初にコンテナの名前を見つけて、次のコマンドでそれを使用する必要があります。
$ 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のインストール
Let’s Encryptを使用してSSL証明書をインストールするには、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ディレクトリに証明書をダウンロードします。
Diffie-Hellmanグループ証明書を生成します。
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Let’s Encryptの自動更新のためのチャレンジウェブルートディレクトリを作成します。
$ sudo mkdir -p /var/lib/letsencrypt
SSLを更新するためのCronジョブを作成します。これは毎日実行され、証明書を確認し、必要に応じて更新します。そのために、最初に/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はプロキシサーバーとして機能し、localhostのポート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にアクセス
ブラウザでhttps://koel.example.comにアクセスすることでKoelにアクセスできます。次のログイン画面が表示されます。

ユーザー名として[email protected]を入力し、ログイン前に設定したパスワードを入力します。成功したログイン後、次のダッシュボードが表示されます。

ステップ11 - 音楽のインポート
インポートしたい音楽ファイルをシステムの~/koel/musicフォルダにコピーします。scpコマンドを使用して、ローカルPCからサーバーにファイルをインポートできます。
$ 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
最新のKoel Dockerイメージをプルします。
$ docker-compose pull
コンテナをシャットダウンします。
$ docker-compose down --remove-orphans
更新されたイメージでコンテナを起動します。
$ docker-compose up -d
Dockerコンテナを確認します。
$ docker ps
結論
これで、Rocky Linuxサーバー上でDockerを使用してKoel音楽ストリーミングサービスをインストールするチュートリアルが終了しました。質問がある場合は、下のコメントに投稿してください。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。