Домашний сервер для тестов и запуска сервисов. На Ubuntu Server крутятся мои Docker-образы: забирают RTSP с китайских камер, отдают RTMP, дальше поток уходит в облако и на сайт (об этом отдельно). Параллельно собираю онлайн-радио и Nextcloud. Купил диск на 2 ТБ, собрал железо и поднял базу.
Сборка и запуск
Собрал, включил:
В BIOS диск уже виден. Дальше — в терминал.
В системе диск пока не смонтирован. Смотрим устройства:
fdisk -l # или короче: fdisk -l | grep 'Disk /dev/sd'
Есть диск на 1.82 ТБ.
fdisk работает в командном режиме. Справка — m. На практике хватает нескольких команд:
- p — текущая таблица разделов
- n — новый раздел
- d — удалить раздел
- w — записать таблицу и выйти
- q — выйти без записи
Создаём партицию и пишем таблицу на диск.
Форматируем и монтируем в /mnt/data/:
Добавляем в fstab, чтобы раздел поднимался после перезагрузки:
Navidrome: музыкальный стриминг за Nginx и HTTPS
Navidrome — лёгкий сервер медиатеки, совместимый с клиентами Subsonic/Airsonic: стриминг, загрузки, плейлисты, нормальный веб-интерфейс.
Ниже — установка на Ubuntu, конфиг, reverse proxy на Nginx с HTTPS и прокси внешних радиостанций.
1. Установка Navidrome
Бинарник с GitHub удобнее, чем пакеты: версия под контролем, путь явный. Есть и snap, но для гибкости — ручная установка.
sudo mkdir /opt/navidrome wget https://github.com/navidrome/navidrome/releases/latest/download/navidrome-linux-x64.tar.gz tar -xvf navidrome-linux-x64.tar.gz -C /opt/navidrome/
Юнит systemd:
sudo nano /etc/systemd/system/navidrome.service
[Unit] Description=Navidrome Music Server After=network.target [Service] User=navidrome Group=navidrome ExecStart=/opt/navidrome/navidrome --configfile /var/lib/navidrome/navidrome.toml Restart=on-failure [Install] WantedBy=multi-user.target
Включаем и стартуем:
sudo systemctl enable navidrome sudo systemctl start navidrome
2. Конфиг navidrome.toml
Рабочий пример с этого сервера:
# Расписание сканирования музыкальных файлов ScanSchedule = '@every 24h' # Путь к музыкальной папке MusicFolder = "/mnt/data/music/" # Настройки кеша транскодирования TranscodingCacheSize = '1500MiB' # Язык интерфейса по умолчанию ND_DEFAULTLANGUAGE = "ru" # Приветственное сообщение на главной странице ND_UIWELCOMEMESSAGE = "💀🤘 HEAVY METAL, PUNK and so on! 🤘💀" # Анимация обложек ND_ENABLECOVERANIMATION = true # Автоматический импорт плейлистов ND_AUTOIMPORTPLAYLISTS = true # Время сессии ND_SESSIONTIMEOUT = "24h" # Включение возможности загрузки файлов ND_ENABLEDOWNLOADS = true # Кеш изображений ND_IMAGECACHESIZE = "200MB" # Прекеширование изображений ND_ENABLEARTWORKPRECACHE = true # Ограничение количества запросов авторизации ND_AUTHREQUESTLIMIT = 5 # Окно времени для авторизации ND_AUTHWINDOWLENGTH = "20s" # Включение транскодирования ND_ENABLETRANSCODINGCONFIG = true # Внешний вид интерфейса [Ui] Theme = "spotify"
3. Nginx: HTTPS и reverse proxy
Снаружи — HTTPS, Navidrome слушает localhost:4533. Отдельно проксирую HTTP-радиостанции, чтобы плеер ходил только по HTTPS.
sudo nano /etc/nginx/sites-available/radio.drslon.ru
server {
listen 80;
server_name radio.drslon.ru;
# Перенаправление с HTTP на HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name radio.drslon.ru;
# SSL сертификаты
ssl_certificate /etc/letsencrypt/live/radio.drslon.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/radio.drslon.ru/privkey.pem;
# SSL настройки
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# Проксирование Navidrome
location / {
proxy_pass http://127.0.0.1:4533/;
proxy_set_header Host $host;
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 $scheme;
# Отключение буферизации для потоков
proxy_buffering off;
proxy_request_buffering off;
# Тайм-ауты
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
send_timeout 90;
# Отключение кеширования для потоков
add_header Cache-Control no-cache;
}
# Проксирование HTTP радиостанций через HTTPS
location /proxy-radio-1/ {
proxy_pass http://radio.trance-energy.org:8000/trance;
proxy_set_header Host $host;
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 $scheme;
proxy_buffering off;
}
location /proxy-radio-2/ {
proxy_pass http://icecast.vgtrk.cdnvideo.ru/mayakfm_mp3_192kbps;
proxy_set_header Host $host;
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 $scheme;
proxy_buffering off;
}
# Логи
access_log /var/log/nginx/radio.access.log;
error_log /var/log/nginx/radio.error.log;
}
Активируем конфиг:
sudo ln -s /etc/nginx/sites-available/radio.drslon.ru /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
4. SSL через Let’s Encrypt
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d radio.drslon.ru
Итог
Железо и диск готовы, медиатека на Navidrome: автоимпорт плейлистов, загрузки, тема Spotify. Снаружи — Nginx + HTTPS, плюс прокси радиостанций, чтобы браузер не ругался на mixed content.
Дальше можно наращивать сервисы на том же хосте: Nextcloud, камеры, что угодно в Docker.