Как установить и настроить Jellyfin на Ubuntu 20.04
- Коротко: Jellyfin — бесплатный медиасервер с открытым исходным кодом. В этой инструкции показано, как установить Jellyfin на Ubuntu 20.04, настроить Nginx в качестве обратного прокси и защитить доступ с помощью Let’s Encrypt.
- Что вы получите: рабочий сервер Jellyfin, доступный по домену, с HTTPS и базовыми заголовками безопасности.

Введение
Jellyfin — свободный медиасервер с открытым исходным кодом, который позволяет развернуть собственный сервер мультимедиа на Linux, Windows или macOS. Он управляет фильмами, сериалами, музыкой и фотографиями и предоставляет приложения для Android, Android TV и Amazon Fire TV. Среди возможностей: поддержка DLNA, автоматическая загрузка метаданных (TheTVDB, TheMovieDB, Rotten Tomatoes), аппаратное ускорение, запись и отсутствие ограничений на воспроизведение.
В этой инструкции пошагово показано развертывание Jellyfin на Ubuntu 20.04, конфигурация Nginx как обратного прокси и получение SSL через Let’s Encrypt.
Важное
- Установка предполагает, что у вас есть домен, указывающий на IP сервера, и настроен root или sudo-пользователь.
- По умолчанию Jellyfin слушает на порту 8096 (HTTP) и на 8920 (HTTPS при прямой конфигурации без прокси).
Требования
- Сервер под управлением Ubuntu 20.04.
- Действующий домен, направленный на IP сервера.
- Доступ с привилегиями root или sudo.
Подготовка системы
Обновите пакеты и установите зависимости:
apt-get update -yЗатем установите необходимое для работы репозиториев ПО:
apt-get install apt-transport-https ca-certificates gnupg2 -yУстановка Jellyfin
Пакет Jellyfin не входит в стандартный репозиторий Ubuntu 20.04, поэтому добавим официальный репозиторий.
- Добавьте GPG-ключ:
wget -O - https://repo.jellyfin.org/jellyfin_team.gpg.key | apt-key add -- Добавьте репозиторий в APT:
echo "deb [arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/ubuntu focal main" | tee /etc/apt/sources.list.d/jellyfin.list- Обновите кеш и установите Jellyfin:
apt-get update -y
apt-get install jellyfin -y- Проверьте статус сервиса:
systemctl status jellyfinОжидаемый вывод (пример):
? jellyfin.service - Jellyfin Media Server
Loaded: loaded (/lib/systemd/system/jellyfin.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/jellyfin.service.d
??jellyfin.service.conf
Active: active (running) since Sun 2020-12-27 06:15:40 UTC; 58s ago
Main PID: 8454 (jellyfin)
Tasks: 16 (limit: 4691)
Memory: 92.3M
CGroup: /system.slice/jellyfin.service
??8454 /usr/bin/jellyfin --webdir=/usr/share/jellyfin/web --restartpath=/usr/lib/jellyfin/restart.sh --ffmpeg=/usr/lib/jellyfin-f>
Dec 27 06:15:48 ubuntu2004 jellyfin[8454]: [06:15:48] [INF] Registering publisher for urn:schemas-upnp-org:device:MediaServer:1 on 104.245.33.>
Dec 27 06:15:48 ubuntu2004 jellyfin[8454]: [06:15:48] [INF] Executed all pre-startup entry points in 0:00:00.6715621
Dec 27 06:15:48 ubuntu2004 jellyfin[8454]: [06:15:48] [INF] Core startup complete
Dec 27 06:15:48 ubuntu2004 jellyfin[8454]: [06:15:48] [INF] Executed all post-startup entry points in 0:00:00.3885698
Dec 27 06:15:48 ubuntu2004 jellyfin[8454]: [06:15:48] [INF] Startup complete 0:00:08.0109863
Dec 27 06:15:50 ubuntu2004 jellyfin[8454]: [06:15:50] [INF] StartupTrigger fired for task: Update Plugins
Dec 27 06:15:50 ubuntu2004 jellyfin[8454]: [06:15:50] [INF] Queueing task PluginUpdateTask
Dec 27 06:15:50 ubuntu2004 jellyfin[8454]: [06:15:50] [INF] Executing Update Plugins
Dec 27 06:15:50 ubuntu2004 jellyfin[8454]: [06:15:50] [INF] Update Plugins Completed after 0 minute(s) and 0 seconds
Dec 27 06:15:51 ubuntu2004 jellyfin[8454]: [06:15:51] [INF] ExecuteQueuedTasksПроверьте, что порт 8096 прослушивается:
ss -antpl | grep 8096Ожидаемый вывод:
LISTEN 0 512 *:8096 *:* users:(("jellyfin",pid=8454,fd=285)) После этого Jellyfin установлен и запущен.
Настройка Nginx как обратного прокси
Рекомендуется использовать Nginx как обратный прокси: он добавляет гибкость в маршрутизации, упрощает получение SSL и даёт дополнительные возможности кеширования и безопасности.
- Установите Nginx:
apt-get install nginx -y- Создайте конфигурацию виртуального хоста:
nano /etc/nginx/conf.d/jellyfin.confВставьте следующую конфигурацию (проверьте server_name):
server {
listen 80;
server_name jellyfin.yourdomain.com;
access_log /var/log/nginx/jellyfin.access;
error_log /var/log/nginx/jellyfin.error;
set $jellyfin 127.0.0.1;
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_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
# Disable buffering when the nginx proxy gets very resource heavy upon streaming
proxy_buffering off;
}
# location block for /web - This is purely for aesthetics so /web/#!/ works instead of having to go to /web/index.html/#!/
location ~ ^/web/$ {
# Proxy main Jellyfin traffic
proxy_pass http://$jellyfin:8096/web/index.html/;
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_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
}
location /socket {
# Proxy Jellyfin Websockets traffic
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;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
}
# Security / XSS Mitigation Headers
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
}Сохраните файл, проверьте корректность конфигурации:
nginx -tЕсли ошибок нет, перезапустите Nginx:
systemctl restart nginxПроверьте статус сервиса:
systemctl status nginxДоступ к веб-интерфейсу Jellyfin
Откройте браузер и перейдите по адресу http://jellyfin.yourdomain.com. Вы увидите мастер первоначальной настройки.

Выберите язык и нажмите Next. Далее задайте имя администратора и пароль, укажите метаданные, настройки библиотеки и завершите мастер.






После входа вы попадёте в панель управления и сможете добавить библиотеки медиа и назначить пользователей.

Защита Jellyfin с помощью Let’s Encrypt
Чтобы включить HTTPS, используйте Certbot и плагин для Nginx.
- Установите Certbot:
apt-get install python3-certbot-nginx -y- Запустите автоматическую установку сертификата:
certbot --nginx -d jellyfin.yourdomain.comСледуйте подсказкам: укажите email, согласитесь с условиями и выберите, нужно ли перенаправлять весь трафик на HTTPS (рекомендуется выбрать редирект).
Пример вывода Certbot и важные заметки:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for jellyfin.yourdomain.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/jellyfin.confПосле успешной установки Certbot предложит перелить весь HTTP-трафик на HTTPS — рекомендуется выполнить редирект.
Важно: сертификаты Let’s Encrypt действительны 90 дней, Certbot может автоматически продлевать их (через cron или systemd timer).
Проверка и отладка
- Убедитесь, что DNS реально указывает на сервер и домен доступен извне.
- Проверьте доступность порта 80 и 443 (если HTTPS включён): например, с вашей рабочей станции и с online-инструментов.
- Просмотрите логи:
- Jellyfin: /var/log/jellyfin (или systemd journal через journalctl -u jellyfin)
- Nginx: /var/log/nginx/jellyfin.error и jellyfin.access
Резервное копирование и обновление
- Конфигурация и данные Jellyfin находятся в /var/lib/jellyfin и /etc/jellyfin. Регулярно резервируйте эти каталоги.
- Для обновления используйте apt-get update && apt-get upgrade; перед обновлением выполните бэкап конфигурации и базы метаданных.
Безопасность и рекомендации по жёсткой настройке
- Запретите прямой доступ к административному интерфейсу извне, если не требуется, и используйте правила брандмауэра (ufw или iptables) для ограничения доступа.
- Включите двухфакторную аутентификацию для аккаунтов, если используете плагины или внешние решения, поддерживающие 2FA.
- Ограничьте права файловой системы: сервис должен запускаться от специально созданного пользователя “jellyfin” (это настроит пакет).
Факты
- Порт по умолчанию: 8096 (HTTP).
- Сертификаты Let’s Encrypt действуют 90 дней.
Рольовые чек-листы
Администратор сервера
- Настроить DNS и проверить домен.
- Установить пакеты и репозиторий Jellyfin.
- Настроить Nginx и получить сертификат.
- Настроить резервное копирование каталогов /var/lib/jellyfin и /etc/jellyfin.
Пользователь медиа-сервера
- Создать учётную запись и настроить библиотеки.
- Проверить доступ с клиентских приложений (Android, TV).
Критерии приёмки
- Jellyfin отвечает на http(s) запросы по адресу https://jellyfin.yourdomain.com.
- При попытке доступа открывается страница входа Jellyfin и можно залогиниться с учётными данными администратора.
- Сертификат валиден и соединение установлено по HTTPS.
- Потоковое воспроизведение работает из локальной сети и (при необходимости) извне через прокси.
Тесты приёмки
- Открыть страницу логина по HTTPS в браузере с другого устройства.
- Добавить фильм в библиотеку и запустить воспроизведение в веб-интерфейсе.
- Проверить, что WebSocket соединение устанавливается (инструменты разработчика в браузере показывают успех для /socket).
Частые вопросы
Можно ли использовать другой порт
Да, вы можете настроить Nginx на прослушивание другого порта, но для публичного доступа обычно используют 80/443.
Как включить аппаратное ускорение
Аппаратное ускорение зависит от наличия соответствующих библиотек и прав доступа к устройству (например, VA-API для Intel/AMD). Конфигурация в Jellyfin требует установки соответствующих пакетов и предоставления прав пользователю jellyfin.
Как продлить сертификат автоматически
Certbot по умолчанию устанавливает cron/systemd-таймер для автоматического обновления. Вы можете запускать “certbot renew” вручную для проверки.
Вопросы и ответы
Вопрос: Что делать, если после установки страница не открывается? Ответ: Проверьте статус сервиса jellyfin, логи jellyfin и Nginx, убедитесь в корректности DNS и в отсутствии блокировки портов на уровне провайдера.
Вопрос: Можно ли мигрировать библиотеку с другого сервера? Ответ: Да. Перенесите каталоги данных (обычно /var/lib/jellyfin) и конфигурации, затем скорректируйте права владельца и перезапустите сервис.
Заключение
Вы установили Jellyfin на Ubuntu 20.04, настроили Nginx как обратный прокси и защитили доступ с помощью Let’s Encrypt. После завершения вы сможете добавлять медиа и получать доступ к ним с любых совместимых устройств. Если нужна помощь с аппаратным ускорением, бэкапами или расширенной безопасностью — спросите, опишу шаги.
Похожие материалы
Лучшее ПО для удаления объектов из видео
Переключение на выделенную видеокарту
Как выйти в прямой эфир на Facebook — пошагово
Удаление шагов и отключение трекинга на iPhone
dplay.dll: как исправить ошибку отсутствия