自分だけのメディアサーバを立てる

· 5 min read
自分だけのメディアサーバを立てる

以前、課題で自分だけの動画サイトを構築するという課題をしましたが
今回は自分専用のメディアサーバを立ててみたいと思います。

Media Server | Plex allows you to stream video smarter.

すごいところ

  • PlexをインストールするだけでDLNAとYoutubeスタイルの両方が利用できる。
  • ファイルを入れるだけで、ジャケット、作品概要、あらすじ、字幕、テーマソングを拾ってきてくれる。手打ちよりも簡単で、統一感がある動画ライブラリに。
  • 動画の場合どこまで再生したかを全てのデバイスで一致させているので、シークいらず。
  • 動画の画質を調整できるので回線速度の変化があってもストリーミング出来る。
  • 開発スピードの早さ。ChromeCastやAmazon Fire TVなどの最新デバイスにも対応。
  • フリー版でも機能が充実している(有料版はさらに充実している)
  • 日本語化されている
  • マルチプラットフォームに対応している(サーバもクライアントも)
  • ウェブブラウザさえあればよい
  • ポートの開放など必要なく外出先からでも見られる
  • スマートデバイスアプリあり
  • GUIで設定が完結する
  • 豊富な設定項目が用意されている
  • 見た目がオシャレ
  • 簡単一発インストール(今回は簡単ではなかったですが・・・)

だめなところ

  • 日本語化のローカライズが微妙。日本語4割・英語6割くらい
  • 日本語の情報が少ない=知名度が低い

Plexの仕組み

公式サイトのスクショが一番わかりいいので貼っておきます。

要は、WindowsでもMacでもLinuxでも
インストールしたらその端末がメディアサーバになるよってものです。

セットアップに際して

元々Plexは外部から直接アクセスさせる仕組みになっているわけではなく
Plexのサーバを経由して外部アクセスを可能にしています。

今回はPLEXのサーバを経由せず、直接サーバにアクセスできる仕組みにします。

サーバ構成

今回はAWSを使いました。plex.hdserver.infoというドメインをRoute53上で設定し
Amazon LightsailにPlexをインストールした形になります。

Lightsailの料金プランは$3.50のプラン、リージョンは東京、OSはAmazon linuxを使用しました。

メディアデータ(音楽とか動画とか)は外部からアップロード・ダウンロードができるようにしてます。
※Lightsailはデータ転送枠が決まっているため、本当はストリーミングサーバを建てるには不向きだったりします・・・

インストール

1. システムを最新の状態にしておく

言わずもがな。

# yum -y update

2. Plexのrpmをダウンロードする

公式サイトのダウンロードページにRedhat版のrpmが置いてあるのでダウンロードします。

# wget https://downloads.plex.tv/plex-media-server/1.12.3.4973-215c28d86/plexmediaserver-1.12.3.4973-215c28d86.x86_64.rpm

3. yumインストールします

rpmからのインストールになります。

# yum install plexmediaserver*.rpm

4. plexmediaserverの起動、自動起動をONにします。

# service plexmediaserver start
# chkconfig plexmediaserver on

5. plexレポジトリを有効化しておく(オプション)

レポジトリを有効化しておくと、yum updateしたときに自動で更新がかかります。
こちらはお好みで。

# vi /etc/yum.repos.d/plex.repo 
[PlexRepo]
name=PlexRepo
baseurl=https://downloads.plex.tv/repo/rpm/$basearch/
enabled=0 ★0→1
gpgkey=https://downloads.plex.tv/plex-keys/PlexSign.key
gpgcheck=1

これでPlexのインストールは完了です。簡単でしょ?

Apacheでリバースプロキシさせる

ただインストールしただけだとデフォルトでは32400ポートでアクセスする形となり、しかもLANからしかアクセスできません。
そこでApacheのmod_proxy(リバースプロキシ)を使用して、サブドメインでPlexを運用します。

「インターネット(80/443ポート)→Apache→(32400ポート)Plex」という形で
フロントのApacheを経由させることでインターネットからポートを指定せずとも接続出来るようにします。

1. Apacheのインストール

割愛してもよかったですが…。2.2系です。

# yum -y install httpd mod_ssl
# httpd -vServer version: Apache/2.2.34 (Unix)

2. Apacheの設定

今回は443ポート(https://)で運用してます。
80ポートからのアクセスは443にリダイレクトかかります。

「https://plex.hdserver/」でアクセスすると
「http://plex.hdserver:32400」で動作しているPlex Media Serverにアクセスできる仕様です。

# vi /etc/httpd/conf.d/vhosts.conf 
<VirtualHost>
        ServerName plex.hdserver.info
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^plex\.hdserver\.info
        RewriteRule ^/(.*)$ https://plex.hdserver.info/$1 [R=301,L]
 
</VirtualHost>
 
<VirtualHost *:443>
        ServerName plex.hdserver.info
 
        ProxyRequests Off
        ProxyPreserveHost On
 
        ProxyPass / http://127.0.0.1:32400/
        ProxyPassReverse / http://127.0.0.1:32400/
 
        ProxyPass /:/websockets/notifications wss://127.0.0.1:32400/:/websockets/notifications
        ProxyPassReverse /:/websockets/notifications wss://127.0.0.1:32400/:/websockets/notifications
 
        RewriteCond %{HTTP_HOST} !^plex\.hdserver\.info$ [NC]
        RewriteRule ^/$ http://%{HTTP_HOST}/ [L,R=301]
 
        ErrorLog logs/plex.error.log
        CustomLog logs/plex.access.log combined
 
</VirtualHost>

ちなみにこの段階ではサーバのSSL証明書を用意していないので、
ブラウザからアクセスするとセキュリティ警告が出ます。
サーバの証明書はLet’s Encryptの無料証明書を使いました。

Let’s Encryptを使用してSSL証明書を発行する

Let’s Encryptの使い方については公式リファレンスに詳しく書いてあるので、ここでは割愛します。

今回はスタンドアロンで証明書を取ってきているので、
コマンド実行時はApacheを落とす必要があります。
あと、Amazon Linuxだと –debug オプションつけないと動かないです。

# /etc/init.d/httpd stop
# ./certbot-auto certonly -a standalone -d plex.hdserver.info --debug
# /etc/init.d/httpd start

無事SSL証明書が発行できたら、
Apacheのconfに証明書のパスを書いておきます。

SSLCertificateFile /etc/letsencrypt/live/plex.hdserver.info/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/plex.hdserver.info/chain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/plex.hdserver.info/privkey.pem

これで、PlexをサブドメインかつSSL通信で利用することが出来るようになりました。

初期設定を行う

ここまで来たらあとはGUI操作になります。
https://plex.hdserver.info/アクセスしましょう。

サインイン画面がでるはずです。
アカウント登録が必要なので登録して、ログインします。

ここでハマった

最初にログインしたら以下の画面に遷移しました。

Plexサーバが見つからないと表示されてますが、初期設定をしないと表示されないのですが
初期設定は同じローカルネットワーク内からでないとできないっぽいです。

公式サイトではSSHのポートフォワーディングをして初期設定をする様ガイドされてましたが
自分はこの方法でもダメでした。。

解決方法

Lightsailで同じネットワーク内にWindowsサーバ立てて、そこのブラウザから初期設定画面に行きました。
ちょっと頭の悪い方法ですが、この方法に辿り着くまで1日かかりました・・・

この画面がでてきたら成功です。ウィザードに従ってセットアップを完了しましょう。

初期設定完了後

以下の画面がでたらセットアップ完了です。おつかれさまでした。
あとは適当に設定イジったり、サーバにメディアデータをコピーするなりしてenjoyしましょう。


参考サイト