自宅鯖とiTunesによる楽曲管理の方法

# 枕
収入の入らない本業としてDJ(オファー募集中)をやっているのですが
30台頃に腰をやってからはレコードからCDJ→PCDJ→USBメモリとヘッドホンを持参してのスタイルとなっております。

さて、iTunesのみで楽曲管理となりますと

- PCのデータが飛んだ時、またはiTunesに不具合が起きた時の再インストール後にプレイリストデータも飛ぶ
- さりとて[rekordbox](https://rekordbox.com/ja/)での管理やiPhoneへの曲の転送においてはiTunesを介しないとどうしようもない

など、データの保持に置いて不安点も様々でございますな。

そこで楽曲(mp3)やプレイリストの原本を自宅鯖で管理し、必要に応じて自分のPCにコピーする、という手段をとるようになったのでございます。

# 自宅鯖に楽曲管理システムを組む

ったって大したもんじゃござんせん。
要は[Apache Tomcat®](https://tomcat.apache.org/)立ててairsonic稼働させるだけなんスから。
基本的には自宅鯖に[AlmaLinux OS - Forever-Free Enterprise-Grade Operating System](https://almalinux.org/ja/) (centosの後継)をインストール済みとして話を進めますが、
あたしゃ[Ubuntu](https://jp.ubuntu.com/)派だよなんて方は適宜コマンドを読み替えていただけますと。

## nginx設定

まずはnginxをインストールしていただいて、

```
dnf install nginx
```

以下の設定を追加いたします。

/etc/nginx/conf.d/sites.conf

```
include /etc/nginx/sites-enabled/*.conf;
```

/etc/nginx/sites-available/server.conf

```
proxy_cache_path /var/cache/nginx/server levels=1:2 keys_zone=server:4m max_size=50m inactive=5m;
server {
#	server_name server.example.com;

	access_log    /var/log/nginx/server.access.log  main;
	error_log     /var/log/nginx/server.error.log  warn;

	resolver 8.8.8.8; #OCSPサーバへ通信するためネームサーバを指定する
	ssl_stapling on; #OCSPを有効化
	ssl_stapling_verify on; #OCSPの問い合わせ結果が正しいものであることを検証する

        listen 80;
	add_header Referrer-Policy no-referrer always;

	location = /favicon.ico {
		alias /var/www/html/favicon.ico;
		access_log off;
		log_not_found off;
	}

	location = /robots.txt  {
		alias /var/www/html/robots.txt;
		access_log off;
		log_not_found off;
	}

    location /airsonic/ {
    	proxy_pass http://localhost:8080/airsonic/;

    	## https://github.com/airsonic-advanced/airsonic-advanced/issues/145
        proxy_set_header Upgrade           $http_upgrade;
        proxy_set_header Connection        "Upgrade";
        proxy_http_version 1.1;
        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 X-Forwarded-Port  $server_port;
        proxy_set_header Host              $http_host;
        proxy_max_temp_file_size           0;
        proxy_buffering off;
        proxy_request_buffering off;
        
        client_max_body_size 0;
    }
}
```

しかる後に

```
mkdir -p /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/server.conf /etc/nginx/sites-enabled/
```

## tomcat 配下へのairsonic-advanced のインストール

ったって、tomcatなんざは適当に yumやdnfのパッケージマネージャでインストールいただければいいんです。

```
dnf install tomcat
```

[airsonic-advanced/airsonic-advanced](https://github.com/airsonic-advanced/airsonic-advanced) ってぇのは何かと申しますと、
[Subsonic](https://www.subsonic.org/pages/index.jsp)という楽曲管理ソフトをオープンソース移植した[Airsonic](https://airsonic.github.io/)のさらに私家改良版、
とでも覚えておいていただければ。
長ったらしいんで以下はairsonicと便宜的に略称いたしますんで。

といってもtomcat配下へのインストールについては以下のようにwarを配置するだけなんで。

```
$ cd /usr/local/tomcat/webapps
$ wget https://github.com/airsonic-advanced/airsonic-advanced/releases/download/v10.6.0/airsonic.war
```

## 諸々の起動

以下はlinux(自宅ではalimalinux9)の起動例でございます。

```
$ sudo su -
$ systemctl enable tomcat # 自宅鯖を再起動したときに自動起動させる設定 
$ systemctl start tomcat
$ systemctl status tomcat # 正しく起動したかの確認
$ nginx -t # nginxの設定が正しくなされているかの確認
$ systemctl enable nginx # 自宅鯖を再起動したときに自動起動させる設定 
$ systemctl start nginx
$ systemctl status nginx # 正しく起動したかの確認
```

## airsonic の稼働確認

さて、PCからairsonicの稼働確認にあたっては、自宅鯖のIPを知る必要がございます。
昨今のlinuxでは

```
$ ip addr | grep "inet "
```
でIPが以下の例のように表示されますんで、

```
    inet 127.0.0.1/8 scope host lo
    inet 192.168.0.2/24 brd 192.168.0.255 scope global noprefixroute eno1
```
この例の 192.168.0.2 が自宅内でのIPってことになるわけですんで、
PCのブラウザから

http://192.168.0.2/airsonic/

にアクセスして諸々を設定していけばいいわけですが、apirsonicの設定自体は以下に譲るとしましょう。
[First start guide - Airsonic](https://airsonic.github.io/docs/first-start/)

# airsonicで作成・保存したプレイリストをPCのiTunesに反映する

じつはこのairsonic、プレイリストをm3u8形式で吐けるんですが
これをiTunesに食わせるには一工夫必要なんですな。

# iTunesに食わせるためのちっょとした変換

そこであたしは以下のようなshellを用意しました。
[tknr/copy_from_m3u8](https://github.com/tknr/copy_from_m3u8)

自宅鯖へのインストールは以下

```
$ git clone https://github.com/tknr/copy_from_m3u8.git
$ cd copy_from_m3u8
$ bash -xe install.sh
$ source ~/.bash_profile
```

これで ~/.bin/copy_from_m3u8 にパスが通りました。
airsonicのプレイリスト画面からエクスポートしたm3u8形式プレイリストをこいつでPC用に変換、
およびPCへインポートしやすいように楽曲データもコピーするわけです。

```
$ cd ~/Playlist/ # 先ほどダウンロードしたm3u8形式プレイリストをここへ配置したとしましょう
$ copy_from_m3u8 . # このフォルダ内のすべてのm3u8形式プレイリストをよろしくやってくれます
$ ls -1
use_202404010000 # 実行した日付のフォルダが生成され、その中に、全てよろしく変換したm3u8形式プレイリストと、m3u8形式プレイリスト内に書かれたパスの楽曲ファイルがコピーされます
```

# iTunesへのインポート
あとは use_202404010000 の中のm3u8形式プレイリストファイルと楽曲ファイルを
[FileZilla](https://filezilla-project.org/) やsamba経由でPCへ落としてきて、
落としてきたm3u8形式プレイリストをiTunesへドラッグ&ドロップするだけでございますよ。

# その他 チューニング等

本稿では、まずは起動してみる を優先に、チューニング等については敢えて省略しました。
以下、余力のある方は試してみるといいです。

[Nginxでgzip圧縮を有効にする #nginx - Qiita](https://qiita.com/satofujino/items/960ece8ca9cebc2051d2)

[Setting up an external database - Airsonic](https://airsonic.github.io/docs/database/) - デフォルトではHSQLDBが使用されるが、安定性や速度、バックアップを取るなどをしたい場合はmariadbを使ってみましょう。

出先でスマホの[iSub Music Streamer for iOS](https://isub.app/)から自宅鯖に接続して
ライブラリの曲を聴くためのcloudflared設定
[Cloudflare の ngrok的なサービスがあるらしい ⇒ $ cloudflared tunnel --url localhost:8080 といった使い方 #cloudflare - Qiita](https://qiita.com/youtoy/items/3d312552f08a729bb5bb)
等については、またいずれ。