Установка Jellyfin на Debian 12 с Apache2, UFW и сертификатами Let's Encrypt
Что вы получите
- Самостоятельный медиасервер Jellyfin, доступный по домену через HTTPS.
- Защищенное соединение с помощью сертификатов Let’s Encrypt и работающий Apache2 как обратный прокси.
- Базовые правила брандмауэра UFW для безопасного доступа.
Основные варианты использования
primary intent: Установка Jellyfin на Debian 12 related intents: Jellyfin Apache2, Jellyfin UFW, Let’s Encrypt для Jellyfin, обратный прокси Jellyfin, установка медиасервера, безопасность Jellyfin
Требования
- Сервер с Debian 12 с 2–4 ГБ памяти (рекомендуется 4 ГБ для транскодирования).
- Непривилегированный пользователь с правами sudo.
- Домен, указывающий на IP сервера (A-запись).
Быстрый план действий
- Установить зависимости и добавить репозиторий Jellyfin.
- Установить jellyfin и убедиться, что служба запущена.
- Настроить UFW: разрешить OpenSSH и WWW Full.
- Установить Apache2 и Certbot, настроить модули для проксирования.
- Получить сертификат через webroot и подготовить виртуальный хост Apache.
- Активировать сайт и перезапустить Apache.
- Завершить настройку Jellyfin через веб-мастер.
Добавление репозитория Jellyfin
Jellyfin доступен в виде предварительно собранного пакета для Debian. Первым шагом установите зависимости, которые нужны apt для работы с HTTPS-репозиториями и GPG-ключами:
sudo apt install apt-transport-https ca-certificates gnupg curl -y
Далее добавьте GPG-ключ репозитория Jellyfin и сохраните его в /etc/apt/keyrings/jellyfin.gpg:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/jellyfin.gpgСоздайте файл источника пакетов, который автоматически подставит вашу версию Debian и архитектуру:
cat <Обновите индекс пакетов:
sudo apt updateВы увидите новый репозиторий в выводе apt.

Установка и управление сервисом Jellyfin
Установите пакет jellyfin:
sudo apt install jellyfin
Проверьте, что служба включена и запущена:
sudo systemctl is-enabled jellyfin
sudo systemctl status jellyfinОжидаемый вывод: статус active (running) и enabled (чтобы включён автозапуск при старте системы).

Jellyfin слушает порт 8096 по умолчанию. Проверьте список сокетов:
ss -tulpnВ выводе должен присутствовать порт 8096, связанный с процессом jellyfin.

Основные команды управления службой:
sudo systemctl start jellyfin
sudo systemctl stop jellyfin
sudo systemctl restart jellyfinНастройка безопасности с UFW
Откройте порт SSH и порты для веб-доступа (HTTP/HTTPS). UFW удобен для простых конфигураций брандмауэра.
Установите UFW:
sudo apt install ufw -y
Разрешите OpenSSH и включите UFW:
sudo ufw allow OpenSSH
sudo ufw enableРазрешите профиль WWW Full (HTTP + HTTPS) и проверьте статус:
sudo ufw allow "WWW Full"
sudo ufw statusВывод должен показывать активный UFW с правилами для OpenSSH и WWW Full.

Важно: пока не перекрывайте SSH или другие административные службы доступом только по localhost.
Установка Apache2 и Certbot
Apache2 будет использоваться как обратный прокси (reverse proxy) для подачи трафика HTTPS к локальному сервису Jellyfin на порту 8096.
Установите Apache2 и Certbot:
sudo apt install apache2 certbot
Проверьте запуск Apache2:
sudo systemctl is-enabled apache2
sudo systemctl status apache2Вы увидите enabled и active (running) при корректной установке.

Генерация SSL/TLS сертификатов с помощью Certbot
Включите модули Apache, необходимые для проксирования и websocket:
sudo a2enmod proxy proxy_http ssl proxy_wstunnel remoteip http2 headers
sudo systemctl restart apache2Создайте временную папку webroot, которой Certbot будет пользоваться для проверки владения доменом:
sudo mkdir -p /var/www/html/jellyfin/public_html
sudo chown -R www-data:www-data /var/www/html/jellyfin/public_htmlЗапустите Certbot в режиме webroot. Замените email и домен на ваши значения:
sudo certbot certonly --agree-tos --email [email protected] --no-eff-email --webroot -w /var/www/html/jellyfin/public_html -d media.howtoforge.localПосле успешного выполнения сертификаты будут храниться в /etc/letsencrypt/live/<ваш_домен>/. Файлы ключей: fullchain.pem (сертификат с цепочкой), privkey.pem (приватный ключ).
Настройка Apache2 как обратного прокси
Создайте файл виртуального хоста /etc/apache2/sites-available/jellyfin.conf и вставьте конфигурацию. Обязательно замените media.howtoforge.local и IP 192.168.10.15 на ваши значения и пути к сертификатам на свои.
sudo nano /etc/apache2/sites-available/jellyfin.confВставьте следующую конфигурацию:
ServerName media.howtoforge.local
# Comment to prevent HTTP to HTTPS redirect
Redirect permanent / https://media.howtoforge.local/
ErrorLog /var/log/apache2/media.howtoforge.local-error.log
CustomLog /var/log/apache2/media.howtoforge.local-access.log combined
# If you are not using an SSL certificate, replace the 'redirect'
# line above with all lines below starting with 'Proxy'
ServerName media.howtoforge.local
# This folder exists just for certbot(You may have to create it, chown and chmod it to give apache permission to read it)
DocumentRoot /var/www/html/jellyfin/public_html
ProxyPreserveHost On
# Letsencrypt's certbot will place a file in this folder when updating/verifying certs
# This line will tell Apache to not to use the proxy for this folder.
ProxyPass "/.well-known/" "!"
# Tell Jellyfin to forward that requests came from TLS connections
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
ProxyPass "/socket" "ws://192.168.10.15:8096/socket"
ProxyPassReverse "/socket" "ws://192.168.10.15:8096/socket"
ProxyPass "/" "http://192.168.10.15:8096/"
ProxyPassReverse "/" "http://192.168.10.15:8096/"
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/media.howtoforge.local/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/media.howtoforge.local/privkey.pem
Protocols h2 http/1.1
# Enable only strong encryption ciphers and prefer versions with Forward Secrecy
SSLCipherSuite HIGH:RC4-SHA:AES128-SHA:!aNULL:!MD5
SSLHonorCipherOrder on
# Disable insecure SSL and TLS versions
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
ErrorLog /var/log/apache2/media.howtoforge.local-error.log
CustomLog /var/log/apache2/media.howtoforge.local-access.log combined
Сохраните файл и активируйте сайт:
sudo a2ensite jellyfin.conf
sudo apachectl configtestЕсли синтаксис правильный, вы получите Syntax OK.

Перезапустите Apache:
sudo systemctl restart apache2Откройте браузер и перейдите по адресу https://media.howtoforge.local/ (замените на ваш домен). При успешной настройке откроется мастер установки Jellyfin.

Завершение установки Jellyfin через веб-мастер
- Выберите язык и нажмите Next.

- Создайте администратора (имя и пароль).

- Библиотеки можно добавить позже — нажмите Next.

- Выберите язык метаданных.

- Разрешите удалённые подключения, если планируете доступ из интернета.

- По завершении вы увидите сообщение “You’re Done!” и будете перенаправлены на страницу логина.

- Войдите в систему и откройте панель администратора для проверки статуса сервера.



Проверка и базовая отладка
Типичные проверки после развертывания:
- Страница доступна по HTTPS без ошибок сертификата.
- WebSocket соединения работают (просмотрите консоль браузера при воспроизведении).
- Прокси не затирает заголовки X-Forwarded-Proto и X-Forwarded-Port.
Если веб-интерфейс недоступен:
- Проверьте логи Apache в /var/log/apache2/*.
- Проверьте статус jellyfin:
sudo journalctl -u jellyfin -e. - Убедитесь, что прокси-правила в виртуальном хосте корректно указывают на локальный IP/порт Jellyfin.
Критерии приёмки
- HTTP(S) доступ к домену: страница загрузки Jellyfin открывается по HTTPS.
- Служба jellyfin активна и отвечает на локальном порту 8096.
- Certbot успешно получил сертификат и файлы находятся в /etc/letsencrypt/live/<домен>/.
- Apache проксирует запросы на Jellyfin и WebSocket соединения работают.
- UFW разрешает OpenSSH и WWW Full, остальные порты закрыты.
Рекомендации по безопасности и жёсткая конфигурация
- Обновления: настройте автоматические обновления безопасности или регулярно выполняйте
sudo apt update && sudo apt upgrade. - Доступ по SSH: используйте ключи, отключите вход по паролю и ограничьте доступ по IP, когда это возможно.
- SSL/TLS: используйте современные шифры и протоколы; при необходимости обновите SSLCipherSuite и исключите слабые алгоритмы.
- Аутентификация: создайте отдельную учётную запись администратора и включите двухфакторную аутентификацию для панелей управления (если доступно во внешних плагинах).
- Разделение прав: храните медиаконтент на отдельном разделе с правами доступа для пользователя jellyfin (обычно jellyfin или media).
- Логи и мониторинг: включите ротацию логов и настройте систему оповещений при падении службы.
Частые ошибки и способы их устранения
Ошибка: Certbot не смог подтвердить владение доменом.
- Проверьте, что DNS-запись A указывает на IP сервера.
- Убедитесь, что путь /var/www/html/jellyfin/public_html доступен для Apache и что правило ProxyPass не перехватывает /.well-known/.
Ошибка: WebSocket не работает (отключается при воспроизведении).
- Убедитесь, что в конфигурации ProxyPass для /socket используется ws:// и правильный порт.
- Проверьте, что в заголовках передаётся X-Forwarded-Proto: https.
Ошибка: Неверный сертификат в браузере.
- Убедитесь, что Certbot сохранил сертификаты в /etc/letsencrypt/live/<домен> и что вы указали именно эти файлы в директивах SSLCertificateFile и SSLCertificateKeyFile.
Альтернативные способы установки (когда это уместно)
- Docker / Docker Compose
- Удобно изолировать окружение и проще обновлять версии. Подходит для серверов, где Docker уже используется.
- Потребует монтирования томов для конфигурации и медиа.
- Snap/Flatpak (если доступны)
- Простейшая установка пакетов, но может конфликтовать с системными путями и службами.
- Сборка из исходников
- Используется редко; даёт максимальную гибкость, но сложнее в поддержке.
Преимущества Docker: быстрый деплой, лёгкое тестирование разных версий, изоляция зависимостей. Недостатки: требуется знание Docker и управление томами/сетями.
Решение для разных ролей (короткие чек-листы)
Администратор сервера:
- Проверить системные требования и наличие свободного места.
- Настроить DNS и UFW.
- Установить Apache и Certbot.
- Настроить ротацию логов.
Инженер DevOps:
- Подготовить конфигурацию в виде шаблонов (Ansible/Terraform).
- Автоматизировать выпуск сертификатов и продление.
- Настроить мониторинг (systemd, Prometheus, Grafana).
Пользователь/медиа-менеджер:
- Создать библиотеки в разделе “Libraries”.
- Настроить источники метаданных.
- Настроить профили транскодирования.
Мини-методология тестирования (smoke tests)
- Доступность: GET https://<домен>/ возвращает 200 и HTML-страницу мастера.
- Аутентификация: можно создать и войти под учетной записью администратора.
- Стриминг: загрузить небольшое медиа и воспроизвести локально.
- Веб-сокеты: начать воспроизведение и проверить наличие websocket-сессии в инструментах разработчика браузера.
Миграция и совместимость
- Обновления: перед обновлением пакетов делайте резервную копию конфигурации /var/lib/jellyfin и /etc/jellyfin.
- Версии: сверяйтесь с официальной документацией Jellyfin при переходе между крупными версиями на предмет изменений формата базы данных.
Короткий глоссарий
- reverse proxy — обратный прокси, сервер, который перенаправляет запросы от клиентов к внутренним сервисам.
- webroot — папка веб-сервера, используемая для подтверждения владения доменом Certbot.
- X-Forwarded-Proto — заголовок, указывающий исходный протокол (http/https) от клиента.
Заключение
Вы успешно установили Jellyfin на Debian 12, настроили UFW, получили сертификаты Let’s Encrypt и настроили Apache2 как обратный прокси. После завершения мастер-настроек можно добавлять библиотеки, настраивать метаданные и делиться медиа с доверенными клиентами. Рекомендуется реализовать регулярные бэкапы конфигурации и медиатеки, а также настроить мониторинг и обновления.
Важно: при публикации сервера в интернет внимательно настройте доступы, используйте надёжные пароли и, при возможности, ограничения по IP или VPN для администрирования.
Быстрые ссылки и ресурсы
- Официальный сайт Jellyfin: https://jellyfin.org
- Документация Certbot: https://certbot.eff.org
- Документация Apache: https://httpd.apache.org
Похожие материалы
S&Q режим: таймлапс и замедление на камере
Как отложить SMS в Google Messages
Как сжать видео на Windows, Mac, iPhone и Android
Duet AI в Google Docs — писать быстрее и лучше
Сброс Chromebook: Powerwash и полное восстановление