Blame

ec43ca Mayekkuzu 2024-11-12 19:42:44 1
# Navidrome
2
![](/Self-Hosted/Navidrome/navidrome.jpg)
3
4
**Navidrome** - частично совместимый с Subsonic API сервер потокового аудио. Позволяет без особого геморроя расшарить свою аудиоколлекцию через локальную сеть или же в интернеты. Пожалуй самый удобный вариант организации своего спотифая с Портисхэдом и Агузаровой. Имеются клиенты для мобильных устроиств, смарт-ящиков и ПК.
5
6
### Запуск сервиса с бинарника
7
Для запуска необходим дополнительно пакет ffmpeg, скачиваем с репозитория, к примеру наш инстанс на Debian/Ubuntu
8
```shell
9
sudo apt update
10
sudo apt upgrade
11
sudo apt install ffmpeg
12
```
13
Далее качаем архив с бинарником с [Github](https://github.com/navidrome/navidrome/releases), предварительно уточняем версию:
14
```shell
15
wget https://github.com/navidrome/navidrome/releases/download/v0.XX.X/navidrome_0.XX.X_linux_amd64.tar.gz -O Navidrome.tar.gz
16
sudo tar -xvzf Navidrome.tar.gz -C /opt/navidrome/
17
sudo chown -R username:username /opt/navidrome
18
```
19
Для базового запуска нужно создать конфигфаил navidrome.toml в папке /var/lib/navidrome. В нем укажем папку где будет лежать наши аудиофайлы.
20
```
21
MusicFolder = "/mnt/music"
22
```
23
Создадим systemd-юнит для запуска сервиса в фоновом режиме:
24
```shell
25
sudo nano /etc/systemd/system/navidrome.service
26
```
27
Содержимое navidrome.service. Обязательно указываем пользователя от которого будет работать сервис. У пользователя должен быть доступ к папке с музыкой и конфигами.
28
```
29
[Unit]
30
Description=Navidrome Music Server
31
After=remote-fs.target network.target
32
AssertPathExists=/var/lib/navidrome
33
34
[Install]
35
WantedBy=multi-user.target
36
37
[Service]
38
User=username
39
Group=username
40
Type=simple
41
ExecStart=/opt/navidrome/navidrome --configfile "/var/lib/navidrome/navidrome.toml"
42
WorkingDirectory=/var/lib/navidrome
43
TimeoutStopSec=20
44
KillMode=process
45
Restart=on-failure
46
DevicePolicy=closed
47
NoNewPrivileges=yes
48
PrivateTmp=yes
49
PrivateUsers=yes
50
ProtectControlGroups=yes
51
ProtectKernelModules=yes
52
ProtectKernelTunables=yes
53
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
54
RestrictNamespaces=yes
55
RestrictRealtime=yes
56
SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap
57
ReadWritePaths=/var/lib/navidrome
58
59
# Здесь можно указать переменные окружения (ниже в статье примеры), например
60
Environment=ND_LOGLEVEL="info"
61
```
62
Перезапускаем демон systemd, включаем автозапуск и запускаем Navidrome
63
```shell
64
sudo systemctl daemon-reload
65
sudo systemctl enable navidrome.service
66
sudo systemctl start navidrome.service
67
sudo systemctl status navidrome.service
68
```
69
Переходим в браузере по `ip-or-fqdn:4533`
70
Система попросит создать пароль и логин администратора. Попутно Navidrome просканирует папку на наличие аудиотреков и сформирует аудиоколлекцию.
71
72
### Docker-Compose
73
Подразумеваем что [docker-compose](/Docker/docker-compose) уже установлен.
74
75
Создаем папку rustdesk-server. Внутри папки создаем фаил docker-compose.yaml
76
Вписываем содержимое:
77
78
```
79
version: "3"
80
services:
81
navidrome:
82
container_name: navidrome # Опционально
83
hostname: navidrome # Опционально
84
image: deluan/navidrome:latest
85
user: username:username # Указываем пользователя от которого будем работать
86
ports:
87
- "4533:4533" # Указываем какой порт будем использовать для веб-морды и API
88
restart: unless-stopped
89
environment:
90
# Optional: put your config options customization here. Examples:
91
ND_SCANSCHEDULE: 1h # Частота сканирования папки с аудио
92
ND_LOGLEVEL: info
93
ND_SESSIONTIMEOUT: 24h # Сколько времени будет дейстововать сессия авторизации веб-морды
94
95
volumes:
96
- "./data:/data" # Папка с конфигурационными файлами. Создается автоматически
97
- "./music:/music:ro" # Музыка хранится тут
98
99
```
100
В папку ./music кидаем свои треки. Обязательно назначаем права на чтение для пользователя на папку music.
101
```shell
102
sudo chown username:username music
103
docker-compose up -d
104
```
105
Переходим в браузере по `ip-or-fqdn:4533`
106
Система попросит создать пароль и логин администратора. Попутно Navidrome просканирует папку на наличие аудиотреков и сформирует аудиоколлекцию.
107
108
#### Подключаем Traefik
109
Подразумеваем что у нас уже есть установленый Traefik. Если нет то ознакомься со [статьей](/Software/Traefik)
110
Приводим docker-compose.yaml к такому виду:
111
```
112
version: "3"
113
services:
114
navidrome:
115
container_name: navidrome
116
hostname: navidrome
117
image: deluan/navidrome:latest
118
user: username:username # should be owner of volumes
119
ports:
120
- "4533:4533"
121
restart: unless-stopped
122
environment:
123
# Optional: put your config options customization here. Examples:
124
ND_SCANSCHEDULE: 1h
125
ND_LOGLEVEL: info
126
ND_SESSIONTIMEOUT: 24h
127
128
volumes:
129
- "./data:/data"
130
- "./music:/music:ro"
131
132
labels:
133
traefik.enable: true # Подключаем
134
traefik.http.routers.music.entrypoints: web
135
traefik.http.routers.music.rule: "Host(`music.my-site.ru`)" # Прописываем домен/поддомен
136
traefik.http.middlewares.music-redirect-web-secure.redirectscheme.scheme: https
137
traefik.http.routers.music.middlewares: music-redirect-web-secure # Включаем редирект на https
138
traefik.http.services.music.loadbalancer.server.port: 4533
139
traefik.http.routers.music.tls: true
140
traefik.http.routers.music.entrypoints: web-secure
141
142
networks:
143
default:
144
external:
145
name: traefik_default
146
```
147
148
### Базовые переменные окружения конфигурации Navidrome
149
Конфигурация может быть применена с помощью записи переменных окружения в docker-compose файле или напрямую в конфигурационном файле navidrome.toml
150
151
| В конфигфайле | В docker-compose | Описание | Default value |
152
| ------------- | ---------------- | ------------------------------------------------------------------------------ | -------------------- |
153
| | ND_CONFIGFILE | Загрузка конфигурации с файла | "./navidrome.toml" |
154
| MusicFolder | ND_MUSICFOLDER | Путь до папки с музыкальной коллекцией | "./music" |
155
| DataFolder | ND_DATAFOLDER | Путь до папки хранения базы данных и конфигов | "./data" |
156
| CacheFolder | ND_CACHEFOLDER | Путь до папки хранения кэша | "<DataFolder>/cache" |
157
| LogLevel | ND_LOGLEVEL | Параметр ведения логов (error, warn, info, debug, trace) | "info" |
158
| Address | ND_ADDRESS | IP-адрес (IPv4/IPv6) или unix-сокет к которому привязан сервис | 0.0.0.0 и :: |
159
| BaseUrl | ND_BASEURL | DNS-адрес для использования за реверс-прокси (/music или https://srv.music.ru) | Пусто |
160
| Port | ND_PORT | HTTP порт на котором отзывается Navidrome | 4533 |
161
162
163
### Решение проблем
164
#### Кракозябры в альбомах и треках
165
Из за некорректной кодировки русскоязычных треков могут появиться кракозябры. Решается утилитой [mp3tag](/https://www.mp3tag.de/en/download.html). Нужно выбрать всю папку с музыкой, выделить все треки и нажать сохранить. В большинстве случаев это помогает.
166
167
#### Отсутствуют обложки
168
Navidrome иногда некорректно считывает cover.jpg в папке альбома. В идеале нужно просканировать папку всего исполнителя или папку с альбомом с помощью [MusicBrainz Picard](https://picard.musicbrainz.org/) и попробовать считать теги. В зависимости от популярности исполнителя шанс восстановить теги и обложки - выше. В некоторых случаях Picard не способен найти в своих базах данных этот ваш любимый андерграунд-инди альбом, поэтому необходимо править ручками. [mp3tag](/https://www.mp3tag.de/en/download.html) так же справится с этой задачей, но более точечно
169
170
#### У исполнителя очень много коллабов с другими исполнителями или в альбомы множатся как на скрине, хочу обьединить их под один тег
171
![](/Software/Navidrome/navidrome_album_fix.jpg)
172
173
В [mp3tag](/https://www.mp3tag.de/en/download.html) выбираем всю папку с музыкой конкретного исполнителя и, выделя всю музыку в списке, вписываем в графу Album Artist и/или Composer имя. После повторного сканирования все альбомы обьединятся.
174
#### Появилась куча плейлистов после загрузки музыки
175
Удалите через поиск m3u файлы в папках если они вам не нужны, потому как после повторного сканирования они вернутся снова
176
177
#### Закинул альбомы, но они не появляются в списке
178
Нужно или вручную перезапустить сканирование (Значок Activity - Quick/Full Scan) или изменить параметр `ND_SCANSCHEDULE` не на 1 час а на 5 минут. Но это увеличит нагрузку на сервер.
179
180
#### В некоторых альбомах треки повторяются подряд два раза и больше
181
Скорее всего загрузили папку где помимо альбома есть еще re-issue или ремастер такого же у которого совпали теги. Разгруппируйте переименовав альбом или просто удалите ненужный
182
183
#### Хочу описание артиста при выборе его профиля с альбомами и скробблинг
184
Сложная ситуация, потому как работает наполовину - не подргужая его фотографию, а только лишь описание. Раньше работало через Spotify API, но авторизоваться и получить ключ сейчас проблема. С Last.Fm тоже проблема, потому как если включить скробблинг в панели управления то страничка Last.Fm вернет `Invalid API key. If you are a third party developer see our authentication how-to to find out more.`
185
Решение на данный момент такое: регаемся на ластике самостоятельно, генерим api ключ по [ссылке](https://www.last.fm/api/account/create)
186
Далее в переменных окружения прописываем пункты:
187
```
188
ND_LASTFM_ENABLED: "true"
189
ND_LASTFM_APIKEY: "api-key"
190
ND_LASTFM_SECRET: "secret-key"
191
ND_LASTFM_LANGUAGE: "en"
192
```
193
Рестартим сервис. Далее подключаем ListenBrainz. Для этого достаточно в панели управления дернуть token, предварительно заведя учетку на [ListenBrainz](https://listenbrainz.org/)
194
Если есть возможность авторизоваться в Spotify, то генерируем ключ и секрет по [ссылке](https://developer.spotify.com/dashboard/applications) и указываем их в переменных окружения
195
```
196
ND_SPOTIFY_ID: "api-key"
197
ND_SPOTIFY_SECRET: "secret-key"
198
```
199
## Клиенты для использования без web-панели Navidrome
200
- [Audinaut](https://github.com/nvllsvm/Audinaut) - Android. Самый простой и с минимальным функционалом
201
- [Substreamer](https://substreamerapp.com/) - Android/iOS. Навороченый, но пытается слишком ломиться на стороние сервисы чтобы дернуть метаданные, поэтому кажется что лагает. Без Spotify API на сервере не может отобразить обложки и описание артистов
202
- [Sonixd](https://github.com/jeffvli/sonixd) - MacOS/Linux/Windows - очень красиво, но слишком тяжелое местами для слабого железа
203
- [Clementine](https://www.clementine-player.org/) - MacOS/Linux/Windows - более традиционный вариант музыкального плейера, но работает как то с Subsonic API неохотно. Попробовать стоит, на постоянное использование - сомнительно
204
205
## Ссылки
206
- [Navidrome](https://navidrome.org)
207
- [GitHub Navidrome](https://github.com/navidrome/navidrome/)