Navidromeの音楽聞くサーバー構築

## まえがき
前回(というかさっきw)の記事でAmpacheのサーバー構築したんですができたのはできたんです。けど、高度な機能が多すぎて使いこなせず...
ほんとはカスタマイズできるからと言ってあれにしたんですが結局使うことやめました。
ってことでシンプルそうなNavidromeをインストールしていこうと思います。

- ## 1-1 Navidromeのインストール
お手始めに
```ruby:bash
sudo apt update
sudo apt upgrade
sudo apt install ffmpeg
```
これでffmpegをインストールしてください。公式ではvimをインストールしてますが使いづらすぎて死んじゃうので私はnanoエディター使います。vimを愛してやまないユーザーの方すみません！(いないだろうけど)絶対みんな嫌ってますよね。まあその話は置いといて次行きましょう。

```ruby:bash
sudo install -d -o <user> -g <group> /opt/navidrome
sudo install -d -o <user> -g <group> /var/lib/navidrome
```
userとgroupは任意のものにしてください。

それが終わったらnavidromeのtar.gzダウンロードしていきます。githubのリリースは[こちら](https://github.com/navidrome/navidrome/releases)です。最新のもののurlをコピーしてこのコマンドを実行します。

```ruby:bash
wget <copy-url>
sudo tar -xvzf Navidrome.tar.gz -C /opt/navidrome/
sudo chown -R <user>:<group> /opt/navidrome
```
wgetのあとにコピーしたurlを貼り付けてダウンロードしてください。それが終わったらnavidromeのダウンロードしたファイル解答してアクセス権の設定します。またここのユーザーとグループは適宜変えてください。

次にtouchでファイル作成します。
```ruby:bash
sudo touch /var/lib/navidrome/navidrome.toml
```

その次にnanoエディターでこの中身を編集します。

```ruby:bash
sudo nano /var/lib/navidrome/navidrome.toml
```
そのなかにこれを記述します。
```ruby:navidrome.toml
MusicFolder = '/var/music'
```
曲を保存しているディレクトリを/var/musicに指定します。
次にsystemdのやつのサービス作成します。(systemdは俺わからん)
```ruby:bash
touch /etc/systemd/system/navidrome.service
```
これが終わったら同じようにnanoエディターで
```ruby:bash
sudo nano /etc/systemd/system/navidrome.service
```
で編集します。入力内容はこちらです。
```ruby:navidrome.service
[Unit]
Description=Navidrome Music Server and Streamer compatible with Subsonic/Airsonic
After=remote-fs.target network.target
AssertPathExists=/var/lib/navidrome

[Install]
WantedBy=multi-user.target

[Service]
User=<user>
Group=<group>
Type=simple
ExecStart=/opt/navidrome/navidrome --configfile "/var/lib/navidrome/navidrome.toml"
WorkingDirectory=/var/lib/navidrome
TimeoutStopSec=20
KillMode=process
Restart=on-failure

# See https://www.freedesktop.org/software/systemd/man/systemd.exec.html
DevicePolicy=closed
NoNewPrivileges=yes
PrivateTmp=yes
PrivateUsers=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
RestrictNamespaces=yes
RestrictRealtime=yes
SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap
ReadWritePaths=/var/lib/navidrome

# You can uncomment the following line if you're not using the jukebox This
# will prevent navidrome from accessing any real (physical) devices
#PrivateDevices=yes

# You can change the following line to `strict` instead of `full` if you don't
# want navidrome to be able to write anything on your filesystem outside of
# /var/lib/navidrome.
ProtectSystem=full

# You can uncomment the following line if you don't have any media in /home/*.
# This will prevent navidrome from ever reading/writing anything there.
#ProtectHome=true

# You can customize some Navidrome config options by setting environment variables here. Ex:
#Environment=ND_BASEURL="/navidrome"
```
上の方にあるユーザーとグループもまた適宜変更してください。ここまで終わったらもう楽勝(なはず？)
作ったサービスを動かします。
```ruby:bash
sudo systemctl start navidrome.service
```
この後ファイアウォールの設定やっていきます。
```ruby:bash
sudo ufw allow 4533
sudo ufw reload
sudoufw status
```
4533の文字列があったらうまくできてます。
これでlocalhost:4533に行ってみてください。
adminを作成していきます。完了したらconfirmかな？そんなやつを押してください。完了です。早すぎますね。

ってことでsubstreamerで行けるか試します。
行けました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742490/2d3abf94-93ef-39b8-c8bd-a0cf20b412f8.png)

ということで！！終わりたいと思います！今回は意外とスムーズだったと思います！ありがとうございました！