有馬総一郎のブログ

(彼氏の事情)

2023年02月20日 18:11:56 JST - 7 minute read - Linux

Airsonic(Subsonic)からNavidromeに乗り換える。

Airsonic-Advancedに乗り換えてちょうど一年ぐらい経った。その間、怒涛のごとく繰り返されるアップデートに追従していったが、特に不具合もなく、モバイルアプリ DSub for Subsonicにも特に不満はなかった。

が、 Navidromeに乗り換えることにした。

Navidrome

キッカケ

ふと Good android apps for playing? : airsonicなるトピックを眺めていると

Try symfonium. Its ✨.

というのを見つけてしまった。 Symfonium なんだこれはと使ってみるとsubsonic系だけでなく、 KodiPlexとも連携が取れるらしい。まあ、それはどうでもいいとして、イコラザーなど設定など細かく設定できるし、何より見た目がモダンだ。そしてDSubは 2020/10/12 から全く更新1がないのが気になる。

airsonicとの同期が、初め上手く行かなかった2のだけど、 [Wiki] Subsonic media provider configuration - FAQ / Wiki - Symfonium supportを見ると以下のようなことが書いてある。

推奨されないサーバー

次のサーバーは古く、高速同期をサポートしていません。ライブラリが大きい場合は使用しないでください。

  • Subsonic: http://www.subsonic.org/ (互換モードが必要 - これ以上のメンテナンスは不要、非推奨 )
  • Airsonic: GitHub - airsonic-advanced/airsonic-advanced (互換モードが必要 - これ以上のメンテナンスは不要、非推奨 )

なぬ、Advancedも駄目なのか…これまでSubsonicから色んな互換サーバーが出ているのは知っていたけど、どれが良いのか、短命に終わっても嫌だしなぁ、と思っていたが、Navidromeが一番イケてそうなのと、 自宅音楽ロッカー再考などの導入記事が見付かったのもあり、こちらに乗り換えてみることにした。

基本は Linux Install | Navidromeに沿ってインストールした。ユーザ追加やnginxの設定などは ミュージックストリームサーバ Navidromeをインストール - Qiitaを参考にした。今時はDockerなんだろうが、そっちに慣れてしまうのとちょっと怖いのと、リソースを節約したかった。

ユーザ追加

$ sudo useradd --no-create-home -s /bin/bash navidrome
$ sudo apt install ffmpeg
$ sudo install -d -o navidrome -g navidrome /opt/navidrome
$ sudo install -d -o navidrome -g navidrome /var/lib/navidrome
$ ls -ld /opt/navidrome/
drwxr-xr-x 2 navidrome navidrome 4096  2月 19 19:18 /opt/navidrome/
$ ls -ld /var/lib/navidrome/
drwxr-xr-x 2 navidrome navidrome 4096  2月 19 19:18 /var/lib/navidrome/

インストール、設定

$ wget https://github.com/navidrome/navidrome/releases/download/v0.49.3/navidrome_0.49.3_Linux_x86_64.tar.gz
$ wget https://github.com/navidrome/navidrome/releases/download/v0.49.3/navidrome_checksums.txt
$ sha256sum -c navidrome_checksums.txt
navidrome_0.49.3_Linux_x86_64.tar.gz: OK
sha256sum: 警告: 一覧にある 8 個のファイルが読み込めませんでした
$ navidrome_0.49.3_Linux_x86_64.tar.gz Navidrome.tar.gz
$ sudo tar -xvzf Navidrome.tar.gz -C /opt/navidrome/
$ sudo chown -R navidrome:navidrome /opt/navidrome
$ ls -ld /home/arimasou16/Music
drwxr-xr-x 1385 arimasou16 sambashare 40960  1月 25 14:25 /home/arimasou16/Music
$ sudoedit /var/lib/navidrome/navidrome.toml

navidrome.toml

MusicFolder = '/home/arimasou16/Music'
LogLevel = 'info'
ScanSchedule = '@daily'
TranscodingCacheSize = '800MiB'
BaseUrl = '/navidrome'
RecentlyAddedByModTime = true
Spotify.ID = 'abcdefghijklmnopqrstqvwxyz123456'
Spotify.Secret = '789012abcdefghijklmnopqrstqvwxyz'
EnableTranscodingConfig = true
FFmpegPath = '/usr/bin/ffmpeg'
EnableDownloads = false

重要なのがBaseUrlという設定項目だ。これがないとwww.sample.com/navidrome/とサブディレクトリでアクセスしようとしてもwww.sample.com/appとなってうまくアクセスできない。

RecentlyAddedByModTime = trueは、デフォルト値はfalseなのだけど、これだと初回起動時に、最近追加されたアルバムが全アルバム対象となってしまうので、ファイルの更新日時で追加日をソートするようにした。まあ、これやるとタグを修正する度にソート順位が上がってしまうので、途中からfalseに戻しても良いかもしれない。

Spotifyの項目は、特にspotifyの曲が聴けるようにわけではなく、アーティスト情報やアーティスト画像を取得するだけ3。つまり、要らない。

ダウンロードさせたくないのでEnableDownloads項目はfalseとする。

オプション各項目は Configuration Options | Navidromeで確認できる。後のsudo systemctl start navidrome.serviceしたとき、FATAL: Navidrome could not open config file: While parsing config: toml:などのエラー情報があれば、このファイルの設定が間違っているということになる。

変換はプレイヤー毎に設定出来る。

起動

$ sudoedit /etc/systemd/system/navidrome.service
$ sudo systemctl daemon-reload
$ sudo systemctl start navidrome.service
$ sudo systemctl status navidrome.service

navidrome.service の内容は Linux Install | NavidromeのコピペでOKだけど、10、11行目のユーザ、グループの指定による書き換えを忘れないこと。書き換え忘れる4と、

- User=<user>
- Group=<group>
+ User=navidrome
+ Group=navidrome
$ sudo systemctl status navidrome.service
● navidrome.service - Navidrome Music Server and Streamer compatible with Subsonic/Airsonic
     Loaded: loaded (/etc/systemd/system/navidrome.service; disabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sun 2023-02-19 20:12:37 JST; 2s ago
    Process: 10427 ExecStart=/opt/navidrome/navidrome --configfile /var/lib/navidrome/navidrome.toml (code=exited, status=217/USER)
   Main PID: 10427 (code=exited, status=217/USER)

 2月 19 20:12:37 ubuntu systemd[1]: navidrome.service: Scheduled restart job, restart counter is at 5.
 2月 19 20:12:37 ubuntu systemd[1]: Stopped Navidrome Music Server and Streamer compatible with Subsonic/Airsonic.
 2月 19 20:12:37 ubuntu systemd[1]: navidrome.service: Start request repeated too quickly.
 2月 19 20:12:37 ubuntu systemd[1]: navidrome.service: Failed with result 'exit-code'.
 2月 19 20:12:37 ubuntu systemd[1]: Failed to start Navidrome Music Server and Streamer compatible with Subsonic/Airsonic.

となる。navidromeのログはjournalctl -u navidrome.serviceで確認する。

FATAL: Navidrome could not open config file:  While parsing config: toml: incomplete number
level=error msg="Invalid ScanSchedule. Please read format spec at https://pkg.go.dev/github.com/robfig/cron#hdr-CRON_Expression_Format" error="failed to parse duration @every 1d: time: unknown unit \"d\" in duration \"1d\"" schedule="@every 1d"

と細かいエラー内容を確認出来る。

level=info msg="Navidrome server is ready!" address="0.0.0.0:4533" startupTime=436.2ms

とステータスで表示されていればOKだ。http://localhost:4533でアクセスできるか確認する。

Nginx

そして、nginxでリバースプロキシを設定する。sudoedit /etc/nginx/sites-available/navidrom.conf

navidrom.conf

    ###
    # navidrome
    ###
    location /navidrome/ {
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Host  $http_host;
        proxy_set_header Host              $http_host;
        proxy_max_temp_file_size           0;
        proxy_pass http://127.0.0.1:4533/navidrome/;
        proxy_redirect                     http:// https://;
    }

を追加する。location /navidrome/は最後の/まで必要。今だに、というか大して勉強も調べもしてないが、nginxは難しいなぁ。

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo systemctl restart nginx.service 

ここでwww.sample.com/navidrome/でアクセス出来れば良し!airsonicとの共存も特にポートなど弄ってなけば可能だ。

$ sudo systemctl enable navidrome.service
Created symlink /etc/systemd/system/multi-user.target.wants/navidrome.service → /etc/systemd/system/navidrome.service.

起動時に有効になるようにして、インストール、設定、起動は終了。今度はhttps://sample.com/navidromeでアクセスできるか確認する。

Navidrome

ユーザ設定

まずはadminユーザを作成する。そして、スキャンだが画面右上の波長の波みたいなアイコン活動をクリックすると、更新マーク(クイックスキャン)があって、その右の虫めがねアイコンがフルスキャンとなっている。曲数などみるにちゃんと日本語、韓国語などもスキャンされている。

Navidrome
活動メニュー左下クイックスキャンと右下フルスキャン
Navidrome

そして、余り使わないだろうがトランスコードは上の設定のところで言及したとおり、EnableTranscodingConfigtrueにしなければならない5

次に、右上の隅の人型アイコン設定をクリックしてトランスコードを追加、または編集する。それから、プレイヤーから変換させたいを選んでトランスコードと最大ビットレートを選択すれば有効となる。変換されているからはログから確認出来る6

Navidrome
設定メニュー
Navidrome
トランスコード一覧
Navidrome
トランスコード
Navidrome
プレイヤーのトランスコードと最大ビットレートの設定
Navidrome
プレイヤー一覧

プレイリストはデフォルトで、.m3u.m3u8があればインポートされるようになっている。敢えて音楽フォルダ外のところを指定したいのであればPlaylistsPathなどで指定する。

動作感

確かにairsonicに比べると、Webページでのページの遷移などが速い。クライアントアプリsublime-musicなどでも若干速いような気がする。言われるど軽量ってわけでもないとは思う。また、airsonicと比べると、Webページ上から何でも設定できたりしたのが、設定ファイル(navidrome.toml)などで隠されるようになって分かりにくくなった。

まあ設定してしまえば、それっきりだし、後はクライアントアプリで操作するので、そんな気にならないのだろうけど。これから長いお付き合いをしていきたい。


  1. Symfoniumは記事執筆時で 2023/02/07 ↩︎

  2. 互換モード(Compatibility mode)、ダウンロードエンドポイントを使わない(Do not use download endpoint)にチェックを入れたら同期された。 ↩︎

  3. External Integrations | Navidromeget information and images from Last.fm and Spotifyとある。 ↩︎

  4. 私のようなうっかりさんは海外にもいた。 navidrome.service: Start request repeated too quickly : navidrome ↩︎

  5. Security Considerations | Navidromeを見ると、セキュリティ上の理由からデフォルト値はfalseとなっている。 ↩︎

  6. format="flac dsf" originalBitRate=1030 originalFormat=flac requestId=ubuntu/S7lcg1pB6p-000204 title="心悸" transcoding=true などと表示される。変換されてなければ、transcoding=falseとログ出力される。 ↩︎