げぇむぷろぐらみんぐ

日々の生活で得た知識、経験を書きます

OSSなミュージックストリーミングサーバー、koelの導入と躓いたところ

最近、VPSをKagoyaからVultrにお引越ししました。
そのついでに、ミュージックストリーミングサーバーも変更しようと思いました。
色々調べた結果koelというOSSのミュージックストリーミングサーバーが非常に魅力的だったので、こちらに乗り換えた話と、その際に躓いた点を書きます。

今までのミュージックストリーミングサーバーとの比較

僕は、今までMadSonicを使用していました。
こちらは、以下のようなデメリットがありました。

  • PCでしか聞けない(スマホ等で聞くには別途月額有償)
  • サーバー側のメモリを喰う
  • UIが使いにくい(あくまで主観です)

特に毎月1ドル払わないとPC(ブラウザ)でしか聞けない点がネックでした。
そこで見つけたのがkoelでした。
koelは以下のような特徴がありました。

  • アプリ等はないものの、スマホでも問題なく聞ける
  • UIがかなり使いやすい
  • Vue、Laravelを使用してOSS開発されておりモダンな実装
  • 新規機能開発が活発に行われている

この他に、Amazon S3との連携でストレージ容量の少ないVPSでも使用できたり、YoutubeLast.fmとの連携も魅力的でした。

導入の注意点

koelの導入に関しては、公式でDocumentが用意されており、本来はこちらを参考に進めれば概ね問題はありません。
が、… 2017/10月現在、Documentの更新が十分にされていないのか、この通りに進めると途中でエラーを吐いてしまいます。
僕はこのエラーに3日間くらい悩まされました…(JSわかんない)

エラーはphp artisan koel:initを実行した際に起きます。 内容は以下の通りです。

$ cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules
 95% emitting ERROR  Failed to compile with 49 errors15:02:38

These dependencies were not found in node_modules:
...

Did you forget to run npm install --save for them?
                                                           Asset      Size  Chunks                    Chunk Names
                                                    img/icon.png   10.8 kB          [emitted]
  fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713    166 kB          [emitted]
  fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9    166 kB          [emitted]
fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e   77.2 kB          [emitted]
 fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad     98 kB          [emitted]
                                 /js/app.c0fba38fc81df5c9aa4d.js    619 kB       0  [emitted]  [big]  /js/app
                                               mix-manifest.json  53 bytes          [emitted]
                                                 img/favicon.ico   4.29 kB          [emitted]
                                            img/artists/.gitkeep   0 bytes          [emitted]
                                    img/covers/unknown-album.png   11.5 kB          [emitted]
                                                    img/bars.gif   33.2 kB          [emitted]
  fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde    444 kB          [emitted]  [big]
                                               img/tile-wide.png   3.25 kB          [emitted]
                                                  img/itunes.svg   1.54 kB          [emitted]
                                                    img/logo.svg   5.19 kB          [emitted]
                                                    img/logo.png   9.28 kB          [emitted]
                                                    img/tile.png   6.47 kB          [emitted]
                                   fonts/fontawesome-webfont.eot    166 kB          [emitted]
                                  fonts/fontawesome-webfont.woff     98 kB          [emitted]
                                   fonts/fontawesome-webfont.ttf    166 kB          [emitted]
                                 fonts/fontawesome-webfont.woff2   77.2 kB          [emitted]
                                   fonts/fontawesome-webfont.svg    444 kB          [emitted]  [big]
                                           fonts/FontAwesome.otf    135 kB          [emitted]
error Command failed with exit code 2.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

エラーメッセージを信じて、npm install --saveを実行してもうまくいきません。
解決方法を言ってしまうと、yarnのバージョンを下げることで解決します。
公式Documentに

NodeJS latest stable with yarn

と書いてあるのを信じてしまうとこの罠にハマります。
現在Issueとして上がっているので後々解決はされると思います。

肝心のバージョンをいくつにすればよいかですが、上のIssueにもある通り、
npm install yarn@0.25.4 -g
でインストールすれば良さそうなので、<=0.25.4であれば良さそうです。
今の最新バージョンは、1.2.1なので、だいぶ違いますね…
これで解決しない場合は、別件なので、Issueを見て頂くか、公式Documentをまた詳しく読み直してみて下さい…!(.envとかきちんと設定するのを忘れずに!)
Issueでエラーメッセージを検索すると色々解決の糸口が見えてくるというのが今回の経験で得た知見でした。