🎵

サブスク代わりに自宅の音楽をどこでも聴く!Docker+Plexで作るストリーミング環境

に公開

想定読者

本稿は、自宅に音楽ファイルを持っていて、Spotifyなどのサブスクより手持ちの曲を楽しみたい人向けの記事である。

はじめに | やりたいこと

本稿は、自宅にある音楽データを外出先からも聴けるようにするための、環境構築方法を記す記事である。

筆者は同じ曲ばかり聞きがちなので、Spotifyなどのサブスクサービスを使うよりも、曲を買って聞いたほうが安上がりである。
ただし、買った曲を外出先で聴くためには、スマホにわざわざ入れておく必要があり、曲数が増えるにつれ面倒になってきた。また、スマホとPCとでプレイリストを同期するのも面倒だった。
そこで、外出先からも自宅の音楽を聴けるように、Plex Media Serverを使って音楽ストリーミング環境を構築した。
これが想像以上に便利だったので、構築方法を共有する。

実際に構築した環境は以下のリンク先で共有している。

全体像

本稿で構築する環境の全体図を示す。

自宅サーバでPlex Media ServerをDocker Composeを使って立て、NASに保存している音楽データをPlexでストリーミングできるようにする。
外出先から自宅サーバへのアクセスは、Tailscaleを用いたVPN接続を利用する。

必要なもの

  • 自宅サーバ(e.g. ミニPC, Raspberry Pi)
    • 常時使う場合は常時稼働させる必要がある
    • DockerとDocker Composeがインストール済みである前提とする
  • 音楽ファイル(e.g. mp3, flac, m4a)

手順

外出先からアクセスするためにVPNを設定する

外出先から音楽を聞けるようにするため、自宅サーバへのVPN接続を設定する。これについてはメインではないため、詳細は割愛する。

筆者はTailscaleを使ってVPNを構築している。

音楽データを準備する

音楽データを自宅サーバのDockerコンテナからアクセスできるようにする。Dockerコンテナからアクセスできれば問題ない。
筆者はNASに保存しているので、NASをマウントした[1]

Docker ComposeでPlexサーバを構築する

Plexアカウントを作成する

最初にPlexのアカウントを作る。アカウント作成は無料。後ほどこのアカウントでPlexにログインする必要がある。

筆者は一人で使っているが、複数人で使う場合は、それぞれのアカウントを作成しておくとよい。

Plexサーバ起動の準備をする

Plexサーバ起動の準備をする。まず、自宅サーバで、Plexサーバを立てるためのディレクトリを作成し移動する。

自宅サーバで実行
mkdir plex
cd plex

次に、configディレクトリを作成しておく。これはPlexの設定を保存するためのディレクトリである。

自宅サーバで実行
mkdir config

続いて、Docker Composeの設定ファイルを作成する。nanovimなどのエディタを使って、以下のように設定ファイルを作成する。

自宅サーバで実行
nano compose.yaml

compose.yamlの内容は以下のようにする[2]

compose.yaml
services:
  plex:
    container_name: plex
    image: plexinc/pms-docker:latest
    restart: unless-stopped
    network_mode: host
    environment:
      - TZ=Asia/Tokyo  # タイムゾーン
      - PLEX_UID=1000  # ホストユーザーID(`id` コマンドで確認)
      - PLEX_GID=1000  # ホストグループID
      - PLEX_CLAIM=claim-xxxxxxxxxxxxxx  # Plexのclaimコード(任意、Plexアカウントと紐付けたい場合)
    volumes:
      - ./config:/config  # Plexの設定保存先
      - /mnt/nas_buffalo/music:/data/music:ro  # 音楽データディレクトリ(読み取り専用)

ここで、PLEX_UIDPLEX_GIDには、ホストのユーザーIDとグループIDを指定する。これらは、idコマンドで確認できる。

id

PLEX_CLAIMには、Plexのclaimコードを設定する。claimコードを設定すると、Plexアカウントと自動で紐付けられ、自動でログインされる。これを設定しなくてもログインすればよいだけなので、必須ではない。自分一人しか使わない場合は、設定しておくとちょっと楽になる。claimコードは、以下のリンクから取得できる。

最後に、volumesにマウントするディレクトリ(例だと/mnt/nas_buffalo/music)を、音楽データの格納されたディレクトリへのパスに変更する。

この時点で、ディレクトリ構成は以下のようになっているはずである。

.
├── compose.yaml
└── config

Plexサーバを起動する

コンテナをビルドし起動する。

docker compose up -d

ログは以下のコマンドで確認できる。

docker logs plex

Plexサーバが起動しない場合は、以下の点を確認する。

  • docker compose up -d実行時のログにエラーが出ていないか
  • PLEX_UIDPLEX_GIDが正しいか
  • configディレクトリが作成されているか、また正しいパーミッションが設定されているか
    • PLEX_UIDPLEX_GIDのユーザーが書き込み可能でなければならない(1敗)
  • compose.yamlvolumesで指定したディレクトリが正しいか
    • 音楽データのディレクトリにアクセスできなければならない
    • 少なくともPLEX_UIDPLEX_GIDのユーザーが読み取り可能でなければならない

Plexの初回設定をしてライブラリーを作成する

Plexサーバが起動したら、http://<サーバーのIP>:32400/webにアクセスする。下記のような画面が表示される。PLEX_CLAIMを設定していない場合は、ログイン画面が表示されるのでログインする。

初回アクセスの画面
初回アクセスの画面

その後有料プランの案内が出る。本稿のようにVPNをつないで使う場合は無料プランで問題ない。

ログインすると、サーバのセットアップ画面が表示される。まず名前を付ける。これは自分がわかる名前でよい。オススメは端末の名前である。

サーバに名前をつける
サーバに名前をつける

「自宅の外から、自身のメディアにアクセスすることを許可」はチェックを外して無効にしておく。VPNを使う場合は必要ない。そもそも有料プランでないと使えない。

次にライブラリーを追加する。「ライブラリーに追加」ボタンをクリックする。

「ライブラリーに追加」ボタンをクリック
「ライブラリーに追加」ボタンをクリック

ライブラリーの種類は「音楽」を選ぶ。名前は任意で変更してよい。
メディアフォルダは、/data/musicを指定する。これはcompose.yamlで指定したマウント先のディレクトリである。
詳細設定は任意で変更する。

以上が完了すると、自動で音楽のスキャンが始まる。しばらく待つと、ライブラリーに音楽が追加される。
とくに曲数が多い場合は、初回は時間がかかるので、気長に待つ。

スマホからアクセスする(Plexampを使う)

Plexのスマホアプリをインストールする。音楽のストリーミングに特化しているPlexampアプリを使う。

アプリを起動し、先ほど作成したPlexアカウントでログインする。その後、「Select a library」の画面が表示され、先ほど設定したライブラリーが表示されるので選択する。すると、ライブラリーに追加した音楽が利用できるようになる。

ライブラリーに追加した音楽が表示されているようす
ライブラリーに追加した音楽が表示されているようす

おわりに | まとめ

DockerとPlex Media Serverを使うことで、自宅の音楽データをストリーミング化し、PN経由で外出先から聴けるようにする環境を構築できた。
これにより、データを転送したり同期したりしなくても、同じ音楽を楽しむことができるようになった。また、Plexのプレイリスト機能を使うことで、スマホとPCでプレイリストを同期する手間も省けるようになった。

自宅鯖はいいぞ。

おまけ | 別のマシンへ移行する

構築したPlexサーバを別のマシンへ移行する場合は、以下の手順で行う。

  1. 現在稼働しているPlexコンテナをdocker compose downで停止する
  2. 既存のcompose.yamlファイルとconfigディレクトリを新しいマシンにコピーする
  3. 新しいマシンにDockerとDocker Composeをインストールする
  4. 新しいマシンが音楽データにアクセスできるように、compose.yamlvolumesを新しいマシンの音楽データのパスに変更する
  5. 新しいマシンでdocker compose up -dを実行してPlexサーバを起動する

以上で、プレイリストや設定を引き継いだまま、Plexサーバを別のマシンへ移行できる。

参考リンク

脚注
  1. え、NAS自体にPlex Media Serverを立てればいいんじゃないかって?BuffaloのNAS(LS720D)にそんな高度な機能はない。 ↩︎

  2. 使っているコンテナは、Plex公式の用意しているコンテナにしている。詳細はDocker Hubを参照のこと。 ↩︎

Discussion