Как запустить медиасервер?
Проблема
В какой-то момент начинаешь замечать, что у тебя на устройствах скопилось довольно много контетнта (фильмы, сериалы, музыка), который хотелось бы централизовано просматривать и обновлять. Так приходишь к мысли о создании медиасервера, который должен быть доступен 24/7 со всех устройств. Довольно долго я использовал Plex, хоть это и закрытый код. Но слишком хорошо все работало в комплексе и это подкупало. В один из дней получил письмо:
As of April 29, 2025, we’re changing how remote streaming works for personal media libraries, and it will no longer be a free feature on Plex. Going forward, you’ll need a Plex Pass, or our newest subscription offering, Remote Watch Pass, to stream personal media remotely. As a server owner, if you elect to upgrade to a Plex Pass, anyone with access to your server can continue streaming your server content remotely as part of your subscription benefits. Not sure which option is best for you? Check out our plans below to learn more. As always, thanks for your continued support. Sincerely, Your Friends at Plex
Таким образом, я в очередной раз убедился, что меня могут принудительно лишить доступа к моему личному медиа. Поэтому параллельно искал решения. После получения письма я начал экстренный переход на другое решение, так я пришел к Jellyfin.
docker-compose
Для запуска используется docker-compose. Создаём файлы конфигурации:
touch {.env,docker-composse.yml}
Редактируем через nano .env:
HTTP_PROXY=<your_proxy>
По понятным причинам не могу дать подробных инструкций как настроить свой прокси, но могу описать общилими словами, что необходимо чтобы наш трафик проходил через доверенный IP, который не блокируют. Можно и без прокси, но тогда Вы будете ограничены в получении метаданных из открытых источников, часть из которых «недоступна» на текущий момент :).
Редактируем через nano docker-compose.yml:
services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow
- LD_LIBRARY_PATH=/opt/cuda/lib64:/usr/local/cuda/lib64
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=all
- CUDADIR=/usr/local/cuda
- CUDA_HOME=/usr/local/cuda
- FORCE_CUDA=1
- CUDA_VISIBLE_DEVICES=0
- CUDA_LAUNCH_BLOCKING=1
- HTTP_PROXY=${HTTP_PROXY}
- HTTPS_PROXY=${HTTP_PROXY}
volumes:
- ./config_jellyfin:/config
- /mnt/media/serial:/data/tvshows
- /mnt/media/video:/data/movies
- /mnt/media/serial:/data/serial
- /dev/vcsm:/dev/vcsm
- /dev/vchiq:/dev/vchiq
- /mnt/media/cources:/data/cources
- /mnt/media/audiobook:/data/audiobook
- /mnt/media/music:/data/music
ports:
- 8096:8096
- 8920:8920
- 7359:7359/udp
- 1900:1900/udp
restart: unless-stopped
devices:
- /dev/dri:/dev/dri
- /dev/nvidiactl:/dev/nvidiactl
- /dev/nvidia0:/dev/nvidia0
dns:
- 9.9.9.9
runtime: nvidia
network_mode: host
Нюансы:
Пути к вашим медиафайлам замените на свои..
Часть с портами оставляю, чтобы не забыть какие порты задействованы для работы приложения.
Для работы с видеоконтентом крайне рекомендую использовать видеокарту,. Я использую NVidia видеокарту. Прчина моей рекомендации описана ниже, в разделе «Трансодирование».
Некоторые источники метаданных могут быть недоступны из-за блокировок, поэтому в конфигурацию добавлены переменные прокси:
- HTTP_PROXY=${HTTP_PROXY}
- HTTPS_PROXY=${HTTP_PROXY}
Настройка приложения
К UI доступ мы имеем по адресу
http://<your_ip>:8096.Добавляем медиатеки: Панель управления -> Медиатеки -> Медиатеки. Добавляем папки с медиа.
Добаляем плагины через: Панель управления -> Плагины -> Плагины. Я использую в настощий момент:
Название |
Описание |
URL репозитория (Manifest) |
|---|---|---|
AniDB |
Предоставляет метаданные для аниме из базы данных AniDB . |
|
AniList |
Загружает информацию о фильмах и сериалах из базы данных AniList . |
|
Artwork |
Плагин для улучшения или управления обложками и художественным оформлением медиатеки. |
|
Bookshelf |
Добавляет поддержку метаданных и специальных возможностей для организации коллекции книг и аудиокниг . |
|
Cover Art Archive |
Позволяет загружать обложки альбомов из архива Cover Art Archive для музыкальной библиотеки. |
|
Discogs |
Поставщик метаданных для музыки из базы данных Discogs. |
|
DLNA |
Обеспечивает работу протокола DLNA, позволяя другим устройствам в сети находить и воспроизводить медиафайлы с сервера . |
|
Fanart |
Загружает изображения (постеры, фоны, логотипы) для фильмов, сериалов и исполнителей с сайта fanart.tv . |
|
Google Books |
Предоставляет метаданные для книг из Google Books. |
|
Kitsu |
Загружает информацию о сериалах и аниме из базы данных Kitsu . |
|
LrcLib Lyrics |
Автоматически загружает и применяет тексты песен для вашей музыкальной библиотеки с сервиса LrcLib . |
|
NextPVR |
Обеспечивает интеграцию с системой записи ТВ NextPVR, добавляя функционал Live TV и управления записями . |
|
Open Subtitles |
Автоматически ищет и загружает субтитры для ваших фильмов и сериалов с OpenSubtitles.org . |
|
Playback Reporting |
Собирает и отображает статистику просмотров пользователей, показывая общее время просмотра и другие данные . |
|
Reports |
Генерирует подробные отчёты по вашей медиатеке (списки фильмов, сериалов и т.д.) . |
|
Subtitle Extract |
Автоматически извлекает встроенные (вшитые в файл) субтитры, чтобы ускорить их отображение при стриминге . |
|
TheTVDB |
Основной поставщик метаданных для сериалов из базы данных TheTVDB.com . |
|
TMDb Box Sets |
Автоматически создает коллекции (например, «Трилогия «Властелин колец»») на основе данных с сайта TMDb . |
|
TVHeadend |
Обеспечивает интеграцию с сервером TVHeadend для просмотра и записи Live TV . |
|
TVmaze |
Альтернативный источник метаданных для сериалов из базы данных TVmaze. |
|
VGMdb |
Предоставляет метаданные (в основном, для музыки из видеоигр) из базы данных VGMdb. |
|
КиноПоиск |
Загружает русскоязычную информацию о фильмах и сериалах (названия, описания, постеры, рейтинги, актёры) с сайта КиноПоиск . |
|
SmartLists |
Позволяет создавать динамические списки (плейлисты) на основе заданных вами правил и условий. |
|
MusicTags |
Плагин для более детального управления и обработки тегов в музыкальных файлах. |
|
Last.fm |
Позволяет «скробблить» (отправлять информацию о прослушивании) музыки в Last.fm и может служить источником метаданных . |
|
Последние 4 плагина устанавливал так:
Войдите в веб-интерфейс Jellyfin (обычно
http://<your_ip>:8096) под учётной записью администратора.Откройте панель управления: нажмите на иконку с тремя горизонтальными полосками (☰) в левом верхнем углу, затем выберите «Dashboard» (Панель управления).
Перейдите в раздел «Plugins» (Плагины) в левой боковой панели.
Переключитесь на вкладку «Repositories» (Репозитории) в верхней части страницы.
Добавьте новый репозиторий:
Нажмите кнопку «Add repository» (Добавить репозиторий).
Введите:
Name — любое понятное название (например,
КиноПоиск).URL — вставьте ссылку на
manifest.jsonиз таблицы выше.
Нажмите «Save» (Сохранить).
Вернитесь на вкладку «Catalog» (Каталог) — теперь в списке должны появиться плагины из добавленного репозитория.
Найдите нужный плагин (например, КиноПоиск) и нажмите «Install» (Установить).
Подтвердите установку и дождитесь завершения процесса. После установки может потребоваться перезапустить Jellyfin, чтобы плагин начал работать (в некоторых случаях система предложит сделать это автоматически).
Через эти плагины мы можем автоматически заполнять метаданные:
Транскодирование
Транскодирование — это процесс преобразования медиафайла (видео, аудио, субтитров) из одного цифрового формата в другой. В контексте Jellyfin транскодирование выполняется в реальном времени для адаптации контента к возможностям клиентского устройства (поддерживаемые кодеки, разрешение, битрейт) или к условиям сети. В схематичном виде можно представить так:
---
title: Работа транскодирования
---
graph TD
A[Телефон / Мобильный] --> B[480p / 1 Mbps]
C[Планшет / Ноутбук] --> D[720p / 2 Mbps]
E[ПК / Телевизор] --> F[1080p / 3 Mbps]
B --> G[Транскодирование]
D --> G
F --> G
style A fill:#f9f,stroke:#333
style C fill:#f9f,stroke:#333
style E fill:#f9f,stroke:#333
style B fill:#9cf,stroke:#333
style D fill:#9cf,stroke:#333
style F fill:#9cf,stroke:#333
style G fill:#9f9,stroke:#333
Из схемы видно, что для разных устройств требуется разное качество. Для таких операций идеально подходит видеокарта, так как иначе ресурсы сервера будут тратиться неэффективно.
У меня медиасервер установлен в LXC с проброшенной видеокартой, поэтому все процессы смотрю на хосте Proxmox:
Видим, что процесс транскодирования присутсвует, что означает верную настройку системы.
Обслуживание
Данные хранятся в SQLite и для ускорения работы желательно ее периодически осблуживать. Устанавливаем SQLite:
sudo apt update
sudo apt install sqlite3
Добавляем задачи в cron для регулярного обслуживания (crontab -e):
# Пути
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
# Ежедневная лёгкая оптимизация (ANALYZE + PRAGMA optimize) – в 3:00 ночи
0 3 * * * /usr/bin/sqlite3 /home/volokzhanin/media_server/config_jellyfin/data/jellyfin.db "ANALYZE; PRAGMA optimize;"
# Еженедельный VACUUM каждое воскресенье в 4:00
0 4 * * 0 docker stop jellyfin && /usr/bin/sqlite3 /home/volokzhanin/media_server/config_jellyfin/data/jellyfin.db "VACUUM; ANALYZE; PRAGMA optimize;" && docker start jellyfin
Устройства
На тв и смартфон ставим приложение Jellyfin.
Умный дом
Подключаем интеграцию Jellyfin.
Итог
Теперь все наши медиа доступны из любого места, у нас есть заполнение метаданных согласгно наших настроек и всем этим мы можем управлять самостоятельно.
Ссылки: