ミュージックストリーミングサーバー(koel)をインストールします

外出先から自分の音楽関連のファイルをいつでも聴けるようにします。自分で購入したmp3ファイルやCDにある音楽データを聴けるようになります。koelというオープンソースなツールをセットアップして実現します。koelはクライアント側がVueで、サーバー側がLaravelで記述された、Webベースのパーソナルオーディオ ストリーミングサービスです。

What Is Koel? | koel
The official documentation for Koel, the music streaming solution that works

公式の説明書を参考にしてDockerを使用してインストールします。説明書の中にあるGithubのリンクをクリックすると詳しく説明されています。公式のDockerイメージも用意されています。

https://hub.docker.com/r/phanan/koel

それでは作業をしていきましょう。設置する環境はOSがUbuntu22.04になっております。まずはイメージを取得します。

docker pull phanan/koel

次に説明書を参考にkoelのコンテナを立ち上げます。koelはデータベースを必要としますが、このDockerコマンドにはデータベースは含まれていません。

docker run -d --name koel \
 -p 8888:80 \
 -v music:/music \
 -v covers:/var/www/html/public/img/covers \
 -v search_index:/var/www/html/storage/search-indexes \
phanan/koel

ファイヤーウォールが有効になっていたので開放します。

ufw allow 8888/tcp
ufw status

データベースは同じネットワーク内の別サーバーにあります。MySQL Community Serverが設置してあり、空のデータベースを作成しておきます。さらにそのユーザーが、外部接続して操作できる許可をしておきます。

データベースの設定について

前述の通り、データベースを同じネットワーク内の別サーバーに設定していました。このサーバーにはMySQL Community Serverをインストールし、外部からの接続を許可したユーザーが操作できるようにしています。しかし、Dockerを使用してMySQLのコンテナを作成する場合、デフォルトで外部接続が許可されていることがあります。これはローカルホストからの接続に限定されていることが多いですが、通常のMySQLインストールでは、外部接続を手動で許可する必要があるため、混乱するかもしれません。

そこで、以下にDockerでMySQLコンテナを設定し、必要なユーザーやデータベースを作成し、外部からの接続を許可する方法を、初心者にも分かりやすく解説します。

  1. MySQLコンテナの作成
    • まず、DockerでMySQLコンテナを作成します。この際、デフォルトでは外部からの接続が許可されているかもしれませんが、必要に応じて設定を確認しましょう。
    docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
    このコマンドでMySQLのコンテナが起動し、my-secret-pwというパスワードが設定されたrootユーザーが作成されます。
  2. 新規データベースの作成
    • MySQLコンテナに接続し、新しいデータベースを作成します。
    docker exec -it mysql-container mysql -u root -p
    次に、MySQLのコマンドラインにアクセスしたら、新しいデータベースを作成します。
    CREATE DATABASE mydatabase;
  3. ユーザーの作成と権限の付与
    • 外部からの接続を許可するユーザーを作成し、必要な権限を付与します。
    CREATE USER 'newuser'@'%' IDENTIFIED BY 'userpassword';
    GRANT ALL PRIVILEGES ON mydatabase.* TO 'newuser'@'%';
    FLUSH PRIVILEGES;
    %は、すべての外部ホストからの接続を許可するワイルドカードですが、セキュリティのために特定のIPアドレスを指定することもできます。
  4. 外部接続の確認
    • 最後に、外部からの接続が適切に設定されているかを確認します。このステップは、セキュリティの観点からも非常に重要です。

データベースの準備ができたらkoelのコンテナに入って初期設定ができるコマンドを入力します。指定されたユーザーでコンテナに入ります。

docker exec --user www-data -it koel bash
php artisan koel:init --no-assets

データベース名やユーザー名、ポート番号などを設定したらブラウザでアクセスします。

http://ipアドレス:8888

次のメールアドレスとパスワードでログインします。

email: admin@koel.dev
password: KoelIsCool

セキュリティ向上のため、これらを変更する場合はコマンドを入力します。

docker exec -it <container_name_for_koel> php artisan koel:admin:change-password

なお、コマンド入力ではなくブラウザでログインして変更も可能でした。

せっかくなのでmp3ファイルをアップロードして動作確認します。

アップロードしたファイルは、ホスト側では次のディレクトリ配下に領域が確保されます。もちろんコンテナ内でも確認することができます。

/var/lib/docker/volumes/

cd /var/lib/docker/volumes/

koelのコンテナは一般的なwebポートしかサポートしていないので、SSLに対応したページを作成するにはリバースプロキシの導入を検討します。

前回は、データベースが別サーバーにある前提での方法を説明しました。今回は、同一サーバー上にkoelとデータベースのコンテナを作成する手順を解説します。また、時間の経過によりkoelがバージョンアップされているため、その内容に基づいて記事を更新します。以下のGitHubページを参考に進めていきます。

GitHub - koel/docker: A minimal docker image for the koel music streaming server.
A minimal docker image for the koel music streaming server. - koel/docker
  1. リポジトリのクローン作成
    まず、GitHubからリポジトリをクローンします。このコマンドでクローンが作成され、docker-compose.mysql.ymlファイルが含まれたディレクトリが作成されます。
    git clone https://github.com/koel/docker.git
  2. docker-composeファイルの使用
    クローン作成後、docker-compose.mysql.ymlが含まれるディレクトリに移動し、次のコマンドを実行してコンテナを立ち上げます。
    docker-compose -f ./docker-compose.mysql.yml up -d
    環境によっては、以下のようにdocker composeを使用する必要があるかもしれません。
    docker compose -f ./docker-compose.mysql.yml up -d

この手順でkoelとデータベースが同一サーバー上にセットアップされ、初心者でも簡単に環境を構築できるはずです。

初回起動時の手順

初めてKoelを起動する際には、以下の手順を行う必要があります。

  1. APP_KEYの生成
  2. 管理者ユーザーの作成
  3. データベースの初期化

これらのステップは、koel:initコマンドを実行することで一度に行うことができます。

実行手順

まず、以下のコマンドでKoelのコンテナ内に入り、必要なコマンドを実行します。
<container_name_for_koel>の部分は、実際のKoelコンテナの名前に置き換えてください。

docker exec --user www-data -it <container_name_for_koel> bash

コンテナ内に入ったら、次のコマンドを実行して初期設定を行います:

php artisan koel:init --no-assets

--no-assetsオプションは、Koelの「Release」GitHubアクションによってフロントエンドのアセットがすでに生成されているため、それをスキップするためのものです。

デフォルトの管理者アカウント

注意: バージョン5.1.0以降、Koelは管理者アカウントのユーザー名、メールアドレス、パスワードを尋ねることはなく、以下の認証情報で自動的にアカウントが作成されます。

  • メール: admin@koel.dev
  • パスワード: KoelIsCool

この初期パスワードは非常に安全ではないため、次の手順でユーザーインターフェースから変更するか、以下のコマンドを実行して変更してください。

docker exec -it <container_name_for_koel> php artisan koel:admin:change-password

ポート80の競合に関する注意
ホストでもポート80を使用している場合、競合が発生する可能性があります。その場合は、docker-compose.ymlファイルで別のポートを指定するか、既存のサービスを停止する必要があります。例えば、ホスト側のポートを8080に変更するには、以下のように設定します。

ports:
- "8080:80"

この設定により、ホスト側で8080番ポートにアクセスすると、コンテナ内の80番ポートにリダイレクトされます。

ボリュームマウントに関する注意
docker-compose.mysql.ymlファイルには、音楽ファイルやカバー画像などを保存するためのボリュームが指定されています。これらのボリュームは、ホスト側のディレクトリとコンテナ内のディレクトリをリンクするため、データが永続化されます。

もし、特定のホスト側ディレクトリを指定したい場合は、docker-compose.mysql.ymlファイルでマウントパスを変更することができます。例えば、ホストの特定のディレクトリに音楽ファイルを保存したい場合は、以下のように設定します。

volumes:
- /path/to/your/music:/music

このように設定することで、ホスト側の指定ディレクトリにデータが保存され、コンテナを再作成してもデータが失われることはありません。

タイトルとURLをコピーしました