1. Зачем Jellyfin на VPS, а не дома
Дома тоже можно запустить медиасервер — но тогда он работает только пока включён ваш компьютер. VPS работает круглосуточно. Смотрите фильм в отпуске, включаете что-то в дороге с телефона — сервер всегда онлайн.
| Критерий | Jellyfin на VPS | Plex | Netflix |
|---|---|---|---|
| Стоимость | VPS ~300–500 ₽/мес | Бесплатно / 499 ₽/мес Plex Pass | 799+ ₽/мес |
| Ваш контент | Любые файлы | Любые файлы | Только их каталог |
| Реклама | Нет | Есть в бесплатной | Нет |
| Приватность | Данные только ваши | Plex собирает статистику | Отслеживает всё |
| Доступ 24/7 | Да | Зависит от настройки | Да |
| Открытый код | Да, GPL-2.0 | Нет | Нет |
Jellyfin — это форк Emby, который в 2018 году закрыл исходный код. Команда разработчиков ушла и создала полностью открытую альтернативу. Сегодня это зрелый проект с десятками тысяч звёзд на GitHub и активным сообществом.
2. Требования к серверу
Потребности Jellyfin зависят от того, как вы будете смотреть видео. Есть два принципиально разных режима — прямое воспроизведение и транскодирование. Подробнее о них в разделе 8, но уже сейчас нужно понять: на дешёвом VPS лучше настроить прямое воспроизведение.
от 2 ГБ
Jellyfin без активного транскодирования потребляет ~300–500 МБ. 2 ГБ достаточно для 1–2 пользователей при прямом воспроизведении.
2+ vCPU
Без транскодирования достаточно 1 vCPU. С транскодированием: 1–2 ядра на каждый поток 1080p. Для 4K транскодирования на VPS без GPU — крайне не рекомендуется.
под медиатеку
1080p фильм (2 часа): 8–20 ГБ в зависимости от качества. 4K: 40–80 ГБ. Конфиг и кэш Jellyfin займут ещё ~1–3 ГБ. Выбирайте VPS с дополнительным объёмным диском или SSD-хранилищем.
100+ Мбит/с
На один поток 1080p при прямом воспроизведении H.264: 8–15 Мбит/с. Большинство VPS дают 100–1000 Мбит/с — этого хватит на несколько одновременных просмотров.
VPS без GPU — и это нормально
На облачных VPS аппаратного ускорения (Intel Quick Sync, NVIDIA NVENC) обычно нет. Это не проблема, если настроить клиенты на прямое воспроизведение — тогда CPU вообще не задействован для декодирования видео. Большинство современных устройств (iPhone, Android, браузер Chrome) поддерживают H.264 напрямую.
3. Установка через Docker Compose
Если Docker ещё не установлен — поставьте его одной командой:
curl -fsSL https://get.docker.com | shСоздайте структуру папок
Три папки для Jellyfin: конфигурация, кэш (миниатюры, метаданные), медиатека.
mkdir -p /opt/jellyfin/{config,cache}
mkdir -p /mnt/media/{Фильмы,Сериалы,Музыка}Папка /mnt/media — ваша медиатека. Можно использовать любой путь, главное — один и тот же везде.
Docker Compose файл
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
ports:
- "127.0.0.1:8096:8096" # Только localhost — доступ через Nginx
volumes:
- /opt/jellyfin/config:/config
- /opt/jellyfin/cache:/cache
- /mnt/media:/media:ro # :ro = read-only, Jellyfin не меняет файлы
environment:
- JELLYFIN_PublishedServerUrl=https://jellyfin.example.ruЗамените jellyfin.example.ru на свой поддомен. Порт привязан к 127.0.0.1 — снаружи он недоступен, Nginx будет проксировать запросы.
cd /opt/jellyfin
docker compose up -d
# Проверить что запустился
docker ps | grep jellyfin
docker logs jellyfin --tail 20Через 10–20 секунд Jellyfin будет доступен локально на http://127.0.0.1:8096. Пока Nginx не настроен — откройте мастер через SSH-туннель:
ssh -L 8096:127.0.0.1:8096 user@IP_ВАШЕГО_VPS
# После этого откройте в браузере: http://localhost:80964. Первоначальная настройка
Откройте http://localhost:8096 в браузере — запустится мастер настройки. Он пройдёт через несколько шагов.
Язык интерфейса
Выберите русский — он поддерживается полностью.
Создание аккаунта администратора
Придумайте имя пользователя и надёжный пароль. Это ваша учётная запись — сохраните пароль.
Добавление медиатеки
Нажмите «Добавить медиатеку». Тип: «Фильмы». Путь: /media/Фильмы (путь внутри контейнера). Язык метаданных: Русский. Нажмите «Ок» → «Далее».
Настройки метаданных
Оставьте по умолчанию — Jellyfin будет брать постеры и описания с The Movie Database (TMDb). Для работы метаданных нужен интернет на VPS.
Готово
Нажмите «Готово». Jellyfin начнёт сканировать медиатеку и скачивать метаданные.
Путь к медиатеке — внутри контейнера
В Docker Compose мы примонтировали /mnt/media как /media внутри контейнера. Поэтому в мастере настройки нужно указывать /media/Фильмы, а не /mnt/media/Фильмы. Jellyfin «видит» только пути внутри контейнера.
5. Структура медиатеки — правила именования
Это самое важное для правильной работы Jellyfin. Если файлы названы неправильно, Jellyfin не сможет найти к ним постеры и описания, или вообще не покажет их в библиотеке. Правил немного, но их нужно соблюдать точно.
Фильмы
Каждый фильм — в отдельной папке. Папка и файл называются одинаково: «Название (Год)».
/mnt/media/Фильмы/
├── Интерстеллар (2014)/
│ └── Интерстеллар (2014).mkv
├── Дюна (2021)/
│ ├── Дюна (2021).mkv
│ └── Дюна (2021).ru.srt # субтитры — называются так же
└── Inception (2010)/
└── Inception (2010).mkvСериалы
Сериал → папка сезона → эпизоды. Сезоны называются «Season 01», «Season 02» — именно так, с ведущим нулём.
/mnt/media/Сериалы/
└── Чернобыль (2019)/
└── Season 01/
├── Чернобыль - S01E01.mkv
├── Чернобыль - S01E02.mkv
├── Чернобыль - S01E03.mkv
├── Чернобыль - S01E04.mkv
└── Чернобыль - S01E05.mkv| Правило | Правильно | Неправильно |
|---|---|---|
| Год в круглых скобках | Фильм (2024).mkv | Фильм 2024.mkv |
| Эпизод с тире | Сериал - S01E01.mkv | Сериал S01E01.mkv |
| Season с нулём | Season 01 | S01 или Сезон 1 |
| Каждый фильм в папке | Фильм (2024)/Фильм (2024).mkv | Фильм (2024).mkv (в корне) |
| Нет спецсимволов | Фильм (2024).mkv | Фильм: Часть 1 (2024).mkv |
Нельзя использовать в именах файлов символы: : / \ | ? * " < > — они зарезервированы в файловых системах Windows и вызывают проблемы при переносе.
Как загрузить файлы на VPS
# Один файл
scp "Дюна (2021).mkv" user@IP:/mnt/media/Фильмы/"Дюна (2021)"/
# Целую папку с сериалом
rsync -avP "Чернобыль (2019)/" user@IP:/mnt/media/Сериалы/"Чернобыль (2019)/"6. Nginx + SSL: доступ по красивому домену
Сейчас Jellyfin доступен только локально на порту 8096. Настроим Nginx как обратный прокси и добавим SSL-сертификат от Let's Encrypt — тогда сервер будет доступен по адресу https://jellyfin.example.ru.
Добавьте DNS-запись
В панели DNS вашего домена добавьте A-запись:
| Тип | Имя | Значение | TTL |
|---|---|---|---|
| A | jellyfin | IP вашего VPS | 3600 |
Установите Nginx и Certbot
apt update
apt install -y nginx certbot python3-certbot-nginxСоздайте конфиг Nginx
Jellyfin использует WebSocket для уведомлений и синхронизации просмотра. Для этого нужен отдельный блок /socket с заголовком Upgrade.
server {
listen 80;
server_name jellyfin.example.ru;
# Обычные запросы → Jellyfin
location / {
proxy_pass http://127.0.0.1:8096;
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;
}
# WebSocket — нужен для уведомлений и SyncPlay
location /socket {
proxy_pass http://127.0.0.1:8096;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
}
}# Активировать сайт
ln -s /etc/nginx/sites-available/jellyfin /etc/nginx/sites-enabled/
# Проверить синтаксис (должно быть "test is successful")
nginx -t && systemctl reload nginx
# Получить сертификат — certbot добавит HTTPS-блок и редирект HTTP→HTTPS
# (замените на ваш домен и email)
certbot --nginx -d jellyfin.example.ru --non-interactive --agree-tos --email admin@example.ru --redirect
# Перезапустить Nginx с SSL
systemctl reload nginxДобавьте IP прокси в Jellyfin
После настройки Nginx откройте Jellyfin → Панель управления → Сеть → найдите поле «Known Proxies» (Известные прокси) и добавьте 127.0.0.1. Без этого Jellyfin будет видеть все подключения как с адреса 127.0.0.1 вместо реальных IP клиентов — это влияет на статистику и безопасность.
7. Мобильные приложения
После настройки домена ваш Jellyfin доступен с любого устройства — нужно только указать адрес сервера в приложении.
iOS / iPadOS
Официальный open-source клиент Jellyfin для iPhone и iPad. Нативный интерфейс, быстрый, поддерживает прямое воспроизведение через VLC. Бесплатно в App Store.
Платный (~$9.99/год), но лучший по качеству воспроизведения и поддержке форматов. Поддерживает Dolby Vision, HDR, DTS. Для тех кто смотрит 4K Blu-ray рипы.
Android
Неофициальный клиент с нативным Android-интерфейсом. Ориентирован на прямое воспроизведение без транскодирования. Доступен в Google Play и F-Droid.
Официальное приложение Jellyfin для Android. Поддерживает транскодирование и все функции сервера, но интерфейс проще чем у Findroid.
Подключение к серверу в приложении
При первом запуске приложение спросит адрес сервера. Введите:
https://jellyfin.example.ruЗатем войдите с логином и паролем, которые вы создали при настройке.
Просмотр в браузере
Jellyfin прекрасно работает в браузере — просто откройте https://jellyfin.example.ru в Chrome или Firefox. Браузер поддерживает прямое воспроизведение H.264 без транскодирования. Для H.265 (HEVC) Chrome будет транскодировать на сервере — в этом случае лучше использовать мобильное приложение или Microsoft Edge на Windows (Edge поддерживает H.265 напрямую через кодеки Windows).
8. Direct Play и транскодирование
Это ключевое понятие в Jellyfin. От него зависит, будет ли видео идти плавно или с тормозами.
Direct Play — идеально
Клиент получает файл и воспроизводит его сам — сервер не тратит CPU. Нагрузка: минимальная (только передача по сети).
Условие: клиент поддерживает кодек и формат файла.
Transcoding — тяжело
Сервер перекодирует видео на лету через FFmpeg. 1080p H.264 ≈ 1–2 ядра CPU. На бюджетном VPS — 1–2 одновременных потока максимум.
Условие: клиент не поддерживает исходный кодек.
Как обеспечить Direct Play
Главный совет: храните фильмы в формате H.264 / MKV или MP4. Это самый поддерживаемый кодек — его «понимают» почти все устройства напрямую.
| Кодек | Chrome | Safari / iPhone | Android |
|---|---|---|---|
| H.264 (AVC) | Direct Play | Direct Play | Direct Play |
| H.265 (HEVC) | Транскодирование | Direct Play (iOS 11+) | Зависит от чипа |
| AV1 | Direct Play | Direct Play (iOS 16+ / iPhone 12+) | Direct Play (Chrome Android) |
| VP9 | Direct Play | Транскодирование | Direct Play |
Как проверить что происходит при просмотре
Во время воспроизведения нажмите на индикатор в левом нижнем углу экрана — откроется информация о сессии. Ищите строку:
Конвертация в H.264 для максимальной совместимости
Если файл в H.265 или другом формате — конвертируйте на VPS через FFmpeg:
ffmpeg -i "Фильм (2024).mkv" -c:v libx264 -crf 20 -preset slow -c:a copy "Фильм (2024) - h264.mkv"-crf 20 — качество (18 = лучше, 28 = хуже, 20 — хороший баланс). Конвертация займёт время: примерно 1–3 часа для 2-часового фильма на 2 vCPU.