Airsonic-Advancedに乗り換えてちょうど一年ぐらい経った。その間、怒涛のごとく繰り返されるアップデートに追従していったが、特に不具合もなく、モバイルアプリ DSub for Subsonicにも特に不満はなかった。
が、 Navidromeに乗り換えることにした。
キッカケ
ふと Good android apps for playing? : airsonicなるトピックを眺めていると
Try symfonium. Its ✨.
というのを見つけてしまった。
Symfonium なんだこれはと使ってみるとsubsonic
系だけでなく、
Kodi、
Plexとも連携が取れるらしい。まあ、それはどうでもいいとして、イコラザーなど設定など細かく設定できるし、何より見た目がモダンだ。そして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
でアクセスできるか確認する。
ユーザ設定
まずはadminユーザを作成する。そして、スキャンだが画面右上の波長の波みたいなアイコン活動をクリックすると、更新マーク(クイックスキャン)があって、その右の虫めがねアイコンがフルスキャンとなっている。曲数などみるにちゃんと日本語、韓国語などもスキャンされている。
そして、余り使わないだろうがトランスコードは上の設定のところで言及したとおり、EnableTranscodingConfig
をtrue
にしなければならない5。
次に、右上の隅の人型アイコン設定をクリックしてトランスコードを追加、または編集する。それから、プレイヤーから変換させたいを選んでトランスコードと最大ビットレートを選択すれば有効となる。変換されているからはログから確認出来る6。
プレイリストはデフォルトで、.m3u
、.m3u8
があればインポートされるようになっている。敢えて音楽フォルダ外のところを指定したいのであればPlaylistsPath
などで指定する。
動作感
確かにairsonic
に比べると、Webページでのページの遷移などが速い。クライアントアプリsublime-music
などでも若干速いような気がする。言われるど軽量ってわけでもないとは思う。また、airsonic
と比べると、Webページ上から何でも設定できたりしたのが、設定ファイル(navidrome.toml)などで隠されるようになって分かりにくくなった。
まあ設定してしまえば、それっきりだし、後はクライアントアプリで操作するので、そんな気にならないのだろうけど。これから長いお付き合いをしていきたい。
-
Symfoniumは記事執筆時で 2023/02/07 ↩︎
-
互換モード(Compatibility mode)、ダウンロードエンドポイントを使わない(Do not use download endpoint)にチェックを入れたら同期された。 ↩︎
-
External Integrations | Navidromeに
get information and images from Last.fm and Spotify
とある。 ↩︎ -
私のようなうっかりさんは海外にもいた。 navidrome.service: Start request repeated too quickly : navidrome ↩︎
-
Security Considerations | Navidromeを見ると、セキュリティ上の理由からデフォルト値は
false
となっている。 ↩︎ -
format="flac dsf" originalBitRate=1030 originalFormat=flac requestId=ubuntu/S7lcg1pB6p-000204 title="心悸" transcoding=true
などと表示される。変換されてなければ、transcoding=false
とログ出力される。 ↩︎