VultrでMadsonicを動かすStartup Scriptを書いてみた

madsonic

Subsonicより多機能?

手持ちの音楽ファイルが100GBを超えるとiPhoneに入りきらないので音楽ストリーミングサーバが必要。
年末のサーバ整理でSubsonicサーバを建て直そうと思った矢先、Madsonicを見つけた。

Madsonic is a web-based media streamer and jukebox fork of Subsonic. Based on Java technology, Madsonic runs on most platforms, including Windows, Mac, Linux, OSX, and Unix variants.

Subsonicとの比較

ふむふむ。Subsonicからフォークして、新機能を意欲的に足してるパッケージなのね。
これは面白そうだ。

DigitalOceanより速い?

さて、Madsonicをどこにデプロイするか。
いつものさくらVPSでも良いんだけど、Madsonicをまず試すだけ試したい。
サクッといじるならDigitalOceanかな、と思った矢先、Vultrを見つけた。
ライバルらしく使用料はほとんど一緒。
DigitalOceanに無い大容量HDDプラン(VLS)と、東京リージョンが選べることがわかったので、Vultrを試してみよう。

VultrのStartup Script

VultrにはStarup Scriptという機能があった。
インスタンス起動時にシェルスクリプトを走らせることができるらしい。
毎回同じような環境を構築したい人にはうってつけ。

CentOSffmepgを入れるのはめちゃくちゃめんどいが、Ubuntu LTS(14.04)にMadsonicを入れるスクリプトなら簡単に書けそうだ。

#!/bin/sh

# install transcoders
add-apt-repository ppa:mc3man/trusty-media -y
apt-get update
apt-get dist-upgrade -y
apt-get install -y lame flac faad xmp ffmpeg

# install jdk
apt-get install -y default-jre default-jre-headless

# install madsonic
wget -O madsonic.deb http://madsonic.org/download/5.1/20150831_madsonic-5.1.5260.deb
dpkg -i madsonic.deb

# replace transcoders
cd /var/madsonic/transcode
for transcoder in ffmpeg lame xmp; do mv $transcoder $transcoder.original; ln -s "$(which $transcoder)"; done

# configure madsonic
sed -i".org" -e 's/^MADSONIC_ARGS.*$/MADSONIC_ARGS="--port=80 --https-port=443 --max-memory=512"/g' /etc/default/madsonic
mkdir -p /var/media/artists

# restart madsonic
service madsonic restart
echo "Done!"

Startup Scriptはrootで走り、Madsonicもdefaultはrootで動くので、スクリプトもシンプル。
セキュリティが気になるならMadsonic用のユーザを作るべきかも。
今回はMadsonicの試用なので、4040番でなく80番と443番で待つように設定を書き換えた。

実際に作ってみる

Vultrでアカウントを作ったら、
"Startup Script"の画面を開いて、上記のスクリプトを適当な名前でコピペ&登録。
ついでに"SSH Keys"の画面でSSH鍵も登録しておけばインスタンス作成画面で鍵を選ぶだけで公開鍵認証が使えて便利。
startupscript on vultr

今回は100GB超の音楽ファイルを想定しているのでStorage Instanceの250GBプラン。
(それでも$0.015/hour!)
Ubuntu 14.04とTokyoリージョンで、先ほどのStartup Scriptを選択する。
"Server Label"はお好きにどうぞ。
madsonic on vultr(trusty)

"Place Order"を押してしばらく待つとStatusが"Running"になる。
"View Console"でブラウザ上に仮想コンソールが開くし、好きなクライアントからroot@server-ip-addressにSSHしてもOK。
ここで少しハマったのが、"Running"になったのを見てStartup Scriptに書いた処理も終わったと思っていたら、しばらく裏側で走っていた。

$ tail -f /tmp/firstboot.log

して、処理状況を追う。
最後に"Done!"が出たら、http://server-ip-addressしてMadsonicが起動しているのを確認。
madsonic getting started

rsyncでMacOSのiTunesファイルと同期

Madsonicが無事に動いたので音楽ファイルを移そう。
ちまちまとやる気にはならない量なので、rsyncする。
母艦のMacはEl Capitanですらかなり古いrsyncが入っているのでHomebrewで最新のrsyncとiconvをインストール。

$ brew install homebrew/dupes/rsync
$ brew install homebrew/dupes/libiconv

あとはコマンド一発。(コマンド中のserver-ip-addressはVultrのIPアドレスね)

$ rsync -aurvz --delete --exclude ".DS_Store" --iconv=utf-8-mac,utf-8 -e ssh ~/Music/iTunes/iTunes\ Media/Music/ root@server-ip-address:/var/media/artists

iTunesで管理してる音楽ファイルを文字化けを回避しつつ、".DS_Store"も除いて、ごそっと圧縮&差分同期。
同期が終わったら、Madsonicの自動スキャン(defaultでは深夜3時)を待つか、手動でスキャンをかければOK。

所感

VultrがStorage Instanceなせいか、若干遅く感じる時もあるけれど、使い勝手はSubsonicとほとんど変わらない。
Subsonic用のiOS/Androidアプリも動くし。
作業量の割に、得られた利便性が大きくてびっくり。
これでまたどこでも音楽が聴けるようになったぜー!

SPONSORED BY