惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
T
The Blog of Author Tim Ferriss
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
Last Week in AI
Last Week in AI
Recorded Future
Recorded Future
博客园 - 司徒正美
V
Vulnerabilities – Threatpost
月光博客
月光博客
C
CXSECURITY Database RSS Feed - CXSecurity.com
D
Darknet – Hacking Tools, Hacker News & Cyber Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Microsoft Azure Blog
Microsoft Azure Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
Jina AI
Jina AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Hacker News: Ask HN
Hacker News: Ask HN
S
Security Affairs
V
Visual Studio Blog
Schneier on Security
Schneier on Security
T
Tailwind CSS Blog
Martin Fowler
Martin Fowler
V2EX - 技术
V2EX - 技术
博客园 - Franky
S
Secure Thoughts
Blog — PlanetScale
Blog — PlanetScale
G
GRAHAM CLULEY
D
DataBreaches.Net
O
OpenAI News
Forbes - Security
Forbes - Security
云风的 BLOG
云风的 BLOG
Google Online Security Blog
Google Online Security Blog
博客园 - 三生石上(FineUI控件)
T
Tor Project blog
T
Tenable Blog
Latest news
Latest news
N
News and Events Feed by Topic
博客园_首页
Simon Willison's Weblog
Simon Willison's Weblog
C
Cybersecurity and Infrastructure Security Agency CISA
美团技术团队
T
The Exploit Database - CXSecurity.com
K
Kaspersky official blog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
T
Threat Research - Cisco Blogs
SecWiki News
SecWiki News
PCI Perspectives
PCI Perspectives
GbyAI
GbyAI

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Navidrome: поднимаем свой стриминговый сервер за один вечер
Александр · 2026-05-31 · via Все публикации подряд на Хабре

Средний

4 мин

9.9K

  • Navidrome — опенсорсный стриминговый сервер. Читает папку с музыкой, отдаёт через браузер и приложения.

  • Работает через Subsonic API → совместим с десятками готовых клиентов на всех платформах.

  • Ставится через Docker: один docker-compose.yml, пять минут, готово.

  • Работает на чём угодно с Linux: RPi, NAS, VPS, старый ноутбук.

  • Поддерживает несколько пользователей, плейлисты, scrobbling, транскодинг.

Зачем это нужно

Стриминги удобны пока всё стабильно. Потом правообладатели начинают убирать треки с платформ. Потом приходит внутренняя цензура — тексты запикали, треки удалили. Платформа тут не виновата — она исполняет то что ей говорят снаружи. Но результат один: ты не контролируешь свою библиотеку.

Navidrome решает конкретную задачу: взять папку с музыкой и превратить её в полноценный стриминговый сервис — с веб-интерфейсом, мобильными приложениями, поиском и плейлистами. Никаких подписок, никакой зависимости от внешних сервисов.

У меня крутится на Raspberry Pi 5 — про выбор железа отдельно в следующей части.

Что такое Navidrome

Navidrome — опенсорсный медиасервер, написанный на Go. Лицензия GPL-3.0.

Что умеет из коробки:

  • Читает FLAC, MP3, AAC, ALAC, OPUS, OGG и другие форматы

  • Веб-интерфейс — полноценный плеер в браузере

  • Subsonic API v1.16.1 — совместимость с десятками сторонних клиентов

  • Мультипользовательский режим с разграничением прав

  • Умные плейлисты (Smart Playlists) — фильтрация по жанру, рейтингу, дате добавления

  • Scrobbling в Last.fm и ListenBrainz

  • Транскодинг на лету (FLAC → MP3 для экономии трафика)

  • Подтягивание метаданных: биографии артистов, похожие исполнители (через Last.fm API)

  • Автосканирование библиотеки по расписанию

Чего нет:

  • Управления через DLNA/UPnP (нужен отдельный сервис)

  • Podcast-менеджера

Требования

Минимальные:

  • Linux (x86_64, ARM64, ARMv7)

  • Docker + Docker Compose

  • Папка с музыкой

Navidrome работает на чём угодно: Raspberry Pi 2+, любой NAS с Docker, VPS, старый ноутбук. Потребление памяти в работе — около 80-120 МБ.

Установка через Docker

Самый простой и рекомендуемый способ.

1. Установить Docker

Если Docker ещё не стоит:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

Проверить:

docker --version
docker compose version

2. Создать docker-compose.yml

mkdir -p ~/navidrome && cd ~/navidrome

docker-compose.yml:

version: "3"
services:
  navidrome:
    image: deluan/navidrome:latest
    user: "1000:1000"
    ports:
      - "4533:4533"
    restart: unless-stopped
    environment:
      ND_SCANSCHEDULE: 1h
      ND_LOGLEVEL: info
      ND_SESSIONTIMEOUT: 24h
      ND_BASEURL: ""
    volumes:
      - "./data:/data"
      - "/path/to/music:/music:ro"

/path/to/music — абсолютный путь к папке с музыкой. :ro — read-only, Navidrome только читает файлы, не меняет их.

3. Запустить

docker compose up -d

Через 30-60 секунд открыть в браузере: http://localhost:4533

При первом запуске Navidrome предложит создать администратора. После этого — начнётся первоначальное сканирование библиотеки.

Структура музыкальной библиотеки

Navidrome читает теги из файлов (ID3 для MP3, Vorbis Comments для FLAC). Структура папок влияет на отображение, но не является обязательной.

Рекомендуемая структура:

/music/
├── Artist Name/
│   ├── 2019 - Album Title/
│   │   ├── 01 - Track Name.flac
│   │   ├── 02 - Track Name.flac
│   │   └── cover.jpg
│   └── 2023 - Another Album/
│       └── ...
└── Various Artists/
    └── Compilation Name/
        └── ...

Год перед названием альбома — для правильной хронологической сортировки.

Обложки: Navidrome читает cover.jpg / folder.jpg рядом с треками, либо embedded-обложки из тегов. Приоритет — embedded теги.

Принудительное пересканирование

По расписанию задаётся через ND_SCANSCHEDULE (например, 1h, @daily, @weekly).

Принудительно через веб-интерфейс: Settings → Library → Scan Now.

Или через Subsonic API:

curl -u admin:password \
  "http://localhost:4533/rest/startScan?v=1.16.1&c=myclient&f=json"

Subsonic API — почему это важно

Subsonic — протокол 2009 года, но именно он объединяет весь экосистем self-hosted аудио. Navidrome реализует Subsonic API версии 1.16.1.

Это означает: любой клиент написанный для Subsonic/Airsonic/Funkwhale работает с Navidrome без изменений. Таких клиентов — десятки: под iOS, Android, macOS, Windows, Linux, веб.

Базовый URL для подключения клиентов:

http://<адрес>:4533

Логин и пароль — те же что в веб-интерфейсе.

Полезные переменные окружения

Полный список в документации. Наиболее полезные:

Переменная

Значение по умолчанию

Описание

ND_SCANSCHEDULE

@every 1m (первый запуск)

Расписание сканирования

ND_LOGLEVEL

info

Уровень логов: error, warn, info, debug

ND_SESSIONTIMEOUT

24h

Время жизни сессии

ND_ENABLETRANSCODING

true

Транскодинг на лету

ND_DEFAULTTHEME

Dark

Тема веб-интерфейса

ND_LASTFM_APIKEY

API-ключ Last.fm для метаданных и scrobbling

ND_LISTENBRAINZ_ENABLED

false

Scrobbling в ListenBrainz

ND_MAXSIDEBARPLAYLISTS

10

Плейлистов в сайдбаре

Для включения Last.fm (биографии артистов, похожие исполнители, scrobbling) нужен бесплатный API-ключ с последнего сайта:

environment:
  ND_LASTFM_APIKEY: "your_api_key"
  ND_LASTFM_SECRET: "your_api_secret"
  ND_LASTFM_ENABLED: "true"

Доступ снаружи

По умолчанию Navidrome слушает только локально на порту 4533. Для доступа с телефона в дороге нужен либо проброс порта, либо VPN.

Я использую Tailscale — mesh VPN без возни с портами и роутером. Подробнее про настройку удалённого доступа — в следующей части про железо и сеть.

Клиенты

Раз Navidrome реализует Subsonic API — работает с любым Subsonic-клиентом. Что использую сам:

  • Mac: kōan — терминальный клиент, прямой тракт на внешний ЦАП

  • iPhone: Kolis Music

  • Android / hi-fi плеер: Symfonium

Думаю в следующих постах раскрою детальнее тему.

Обновление

Navidrome активно развивается. Обновить до последней версии:

cd ~/navidrome
docker compose pull
docker compose up -d

Данные хранятся в ./data/ — при обновлении образа не затрагиваются.

Итог

Navidrome закрывает задачу «свой стриминг» минимальными средствами:

  • Один docker-compose.yml — сервис поднят

  • Subsonic API — клиенты под любую платформу без дополнительной настройки

  • Потребляет ~100 МБ RAM, работает на самом скромном железе

  • Активно поддерживается, документация актуальная