サブスク代わりに自宅の音楽をどこでも聴く!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の設定ファイルを作成する。nanoやvimなどのエディタを使って、以下のように設定ファイルを作成する。
nano compose.yaml
compose.yamlの内容は以下のようにする[2]。
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_UIDとPLEX_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_UIDとPLEX_GIDが正しいか -
configディレクトリが作成されているか、また正しいパーミッションが設定されているか-
PLEX_UIDとPLEX_GIDのユーザーが書き込み可能でなければならない(1敗)
-
-
compose.yamlのvolumesで指定したディレクトリが正しいか- 音楽データのディレクトリにアクセスできなければならない
- 少なくとも
PLEX_UIDとPLEX_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サーバを別のマシンへ移行する場合は、以下の手順で行う。
- 現在稼働しているPlexコンテナを
docker compose downで停止する - 既存の
compose.yamlファイルとconfigディレクトリを新しいマシンにコピーする - 新しいマシンにDockerとDocker Composeをインストールする
- 新しいマシンが音楽データにアクセスできるように、
compose.yamlのvolumesを新しいマシンの音楽データのパスに変更する - 新しいマシンで
docker compose up -dを実行してPlexサーバを起動する
以上で、プレイリストや設定を引き継いだまま、Plexサーバを別のマシンへ移行できる。
参考リンク
-
え、NAS自体にPlex Media Serverを立てればいいんじゃないかって?BuffaloのNAS(LS720D)にそんな高度な機能はない。 ↩︎
-
使っているコンテナは、Plex公式の用意しているコンテナにしている。詳細はDocker Hubを参照のこと。 ↩︎
Discussion