2015年3月21日土曜日

Odroid C1 / Ubuntu でサーバ構築 5: Subsonicで音楽ストリーミングサーバにする

Odroid C1を利用してサーバを構築する.今回はSubsonicでメディアストリーミングサーバにします.
Subsonicは指定ディレクトリ以下の音楽ファイルなどを検索し,Web上でストリーミング配信が行えるJavaベースのシステムです.開発元にお金を支払うことでビデオなどの配信やスマートフォンからのアクセス,DLNAにも対応します.ユーザ名とパスワードで保護されます.

Subsonic事始め

インストール

Subsonicをダウンロードします.公式サイトからダウンロードのURL(恐らくsourceforge)を確認してwgetで取得します.ダウンロードページではなく,debファイルの直リンクURLですね.
ダウンロードしてインストールします.
$wget -O subsonic.deb http://downloads.sourceforge.net/project/subsonic/subsonic/5.2.1/subsonic-5.2.1.deb
$sudo dpkg -i subsonic.deb

SubsonicはJavaだからjreが必要なんじゃなかったけ??と思いつつインストールしました. パッケージマネージャがそのことを指摘するかと思いきやしない.

ともかく,この段階でsubsonicは既に稼働しているはずです.初期設定では4040ポートでアクセスを受け付けているのでブラウザから開きます.

http://192.168.1.xx:4040/

subsonicに初アクセス

設定

最初にadminユーザのパスワード設定行います.ログインページにもサッサと設定するように警告されていますね.ユーザ名admin, パスワードadminでログインして,,,表示されるページの指示に従ってパスワードを変更します.

再度ログインして音楽などのメディアディレクトリを指定すれば勝手にファイルを調べてくれて使えるようになります.カンタン

SSL(Https:443)でのアクセス,Apacheのリバースプロキシ

Subsonicの設定

ここまででもSubsonicは機能するのですが,安全のためにSSLを使ってhttpsによるアクセスをできるようにしましょう.
今回は,アクセスにはhttpsを使ったhttps://<ドメイン>/subsonic/ のURLにします.
まずはsubsonicの設定ファイルを編集します.SUBSONIC_ARGSを以下のように変更しました.httpsは後述のApacheで実現します.そのため,--port=4040 --https-port=443といった設定を今回は行いません.

$sudo emacs /etc/default/subsonic
SUBSONIC_ARGS="--max-memory=200 --context-path=/subsonic" 

--max-memoryは使用するメモリの最大値を指定するようですが,どれくらいがいいのでしょうか?? 一方の--context-pathはhttps://<ドメイン>/subsonic以下でSubsonicを運営するため,追加します.https://xxx/sonic以下で運営したい場合は/sonicにします.
その他の設定項目は

OpenSSLとApache, 鍵の作成

続いて,Httpsを実現するためにOpenSSLと,Apacheを設定します.OpenSSLはプリインストール済みかと思いますが確認します.
$whicl openssl
/usr/bin/openssl

無ければapt-getでインストールしましょう.

続いてApacheもインストールします.通常のUbuntu ServerならばOSインストール時に一緒にインストールすることもできますが,ODROIDのUbuntuでは恐らくないでしょう.
ApacheをインストールしてSSLのモジュールをONにします.また,SSLのサイトもONにします.
$sudo apt-get install apache2
$sudo a2enmod ssl
$sudo a2ensite default-ssl

SSLのための鍵を作成します.今回は/etc/apache2以下につくります.
秘密鍵,公開鍵,鍵の証明の3つを作ります.鍵の証明は本来は然るべき機関から発行してもらうわけですが,それには費用も掛かるため,今回は証明書を自分でつくります.いわゆるオレ様証明書であるため,ブラウザが「証明書の〜〜」うんぬんと警告してきてしまいますが目をつむります.
$cd /etc/apache2
$sudo su
#openssl genrsa -des3 1024 > https.key ←秘密鍵の作成(RSA des3フォーマット,1024bitの鍵)
Enter pass phrase: ←パスフレーズを入力
Verifying - Enter pass phrase: ←再入力

# openssl req -new -key https.key >https.key.csr ←公開鍵の作成
Enter pass phrase for https.key: ←先ほどのパスフレーズを入力
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----↓ここからは公開が基の情報を入力
Country Name (2 letter code) [AU]:ja ←国名(二文字のコードでja, us, uk, krなど)
State or Province Name (full name) [Some-State]:tokyo ←都道県名
Locality Name (eg, city) []: ←市町村名(今回は空白)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:hiroyky ←組織名
Organizational Unit Name (eg, section) []: ←担当部署名
Common Name (e.g. server FQDN or YOUR name) []:Happy Server ←サイト名
Email Address []:xxxxx@mail.jp ←メールアドレス

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:   ←証明書破棄の際のパスワード(今回は空白)
An optional company name []: ←組織名2(今回は空白)

# openssl x509 -in https.key.csr -days 36500 -req -signkey https.key > https.key.crt ←証明書の発行(x509フォーマット,有効期限は36500日つまり100年←おい!笑)
Signature ok
subject=/C=ja/ST=tokyo/O=yokoyama/CN=Asuna/emailAddress=ykym_hirokazu@yahoo.co.jp
Getting Private key
Enter pass phrase for https.key: ←パスフレーズ入力
これにて作成が完了しました.

Apacheに鍵を登録

/etc/apache2/sites-available/default-ssl.confのSSLCertificateFileとSSLCertificateKeyFileを設定します.
$sudo emacs /etc/apache2/sites-available/default-ssl.conf
SSLCertificateFile     /etc/apache2/https.key.crt ←証明書
SSLCertificateKeyFile /etc/apache2/https.key ←秘密鍵

で,Apacheを再起動します.
$sudo service apache2 restart

Apacheの警告 AH0058

$sudo service apache2 restart
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
こういう警告メッセージが出てきました.
ubuntuにおけるapache2のAH00558エラーを解決する。UbutnuでApache2を起動してみたにもあるようにServerNameを変えるか,/etc/hostsを設定するかのようです.もしくは無視しても構わないかもしれませんが..
というわけで前者のページに従い.
 sudo echo ServerName $HOSTNAME > /etc/apache2/conf-available/fqdn.conf
 sudo a2enconf fqdn
 sudo service apach2 restart
 * Restarting web server apache2 
として,ServerNameを設定しました.別ファイルを作るのも良いですが,/etc/apache2/apache2.confに追記しても良い気もしますが..

いずれにしてもhttpsでアクセスして,恐らく証明書の警告は表示されると思いますが,"It works!"のページが表示されました.

リバースプロキシの設定

https://<ドメイン>/subsonic でアクセスされたら4040ポートで稼働しているSubsonicにつなぎます.
proxyモジュールを有効にし,セクションを設定します.
$sudo a2enmod proxy
$sudo a2enmod proxy_http
$sudo emacs /etc/apache2/mods-available/proxy.conf
        
           AddDefaultCharset off
           Order deny,allow
           Allow from all
        #   #Require local                                                                                                          
        

SSLのVirtualHostを設定します.下記を追記します.
$sudo emacs /etc/apache2/sites-available/default-ssl
 SSLProxyEngine on ←プロキシを介してSSL化を有効にする
 ProxyPass /subsonic http://localhost:4040/subsonic ←リバースプロキシの設定
 ProxyPassReverse /subsonic http://localhost:4040/subsonic ←リバースプロキシの設定
リバースプロキシの設定はお察しの通り
 ProxyPass  <転送先> 
 ProxyPassReverse  転送先>
です.末尾の"/"スラッシュには注意です.

変更の適用

Subsonic, Apache共に再起動して変更を適応します.
$sudo service subsonic restart
$sudo service apache2 restart

 https://<ドメイン>/subsonicでsubsonicに行けるようになりました.

参考

http://www.jamescoyle.net/how-to/875-reverse-proxy-subsonic-with-apache
http://qiita.com/paty-fakename/items/829afd3577ba18dbb2c8