Как получить сертификат для Jellyfin?

Доброго времени суток!
У меня на Openmediavault 7 в docker compose установлен сервис Jellyfin. Сегодня сделал к нему внешний доступ по http, используя доменное имя, выданное провайдером, и порт 8096. Можно оставить так, но понимаю, что это небезопасно, поэтому хочу использовать https с сертификатом.
Пробовал создать сертификат по этой инструкции, но столкнулся с тем, что порт 80 занят сервером.
Nginx не пробовал использовать, так как порт 8080 занят qbittorrent.
Каким максимально простым способом можно выпустить сертификат?
Спасибо.

В инструкции написано:

Для выполнения этого мануала вам понадобится:

  • Порт 80 или 443 не должны использоваться на вашем сервере. Если сервис, который вы хотите защитить, находится на машине с веб-сервером и он занимает оба этих порта, вам нужно будет использовать другой режим Certbot, например webroot.

Пробовали?

Нет, не пробовал. Не увидел, что это ссылка. Спасибо большое, попробую завтра. По результату отпишусь.

Каким максимально простым способом можно выпустить сертификат?

Поставить в докер контейнер NPM, qbittorrent можно перенести на другой порт.

Я бы посоветовал всё же поставить npm и уже через него проксировать до всех ваших сервисов оставив в “мир” только 80 и 443 порты которые и будут ввести на ваш npm
Для примера вот у меня в правилах роутера, но у меня белый ip

изображение

В правилах роутера на скриншоте проброс портов? У меня тоже белый IP, так же имеется доменное имя типа clients-44.nameoperator.ru
На данный момент у меня открыт нестандартный порт для Jellyfin. Доступ осуществляется по протоколу http с использованием доменного имени.
Погуглил. Не совсем пойму для чего мне NPM.

Для получения сертификата надо либо иметь открытый 80 порт или править DNS записи (часто делается при помощи API)

Какой вариант более надёжен? Опыта работы с API у меня нет.

API работает если поддерживается DNS провайдером для certbot есть примерный список тут, для lego в нормальном виде тут, если говорить про провайдерское имя, то, скорее всего, доступа к DNS не будет, поэтому остается только

  1. Использовать проверку на 80 порту
  2. Купить собственный домен и выпустить сертификат для него

NPM либо Traefik.

Через Traefik проксировать 80 и 443 порты на нужные сервисы. Сам же Traefik и cert получит и будет его периодически обновлять.

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

Вот моя статья по установке и настройке Traefik в докере: Traefik — 1. устанавливаем L7 роутер [19dx.ru — R0WBH Wiki]

Статья хорошая, попробую запустить сначала на тестовом сервере, потом на боевом.
У меня в OpenMediaVault 7 в Docker Compose есть примеры конфигураций контейнеров, в том числе и Traefik. В примере конфигурация следующая:

---
# Date: 2025-06-02
# https://doc.traefik.io/traefik/
# https://hub.docker.com/_/traefik
services:
  reverse-proxy:
    # The official v3 Traefik docker image
    image: traefik:v3
    # Enables the web UI and tells Traefik to listen to docker
    command: --api.insecure=true --providers.docker
    ports:
      # The HTTP port
      - "80:80"
      # The Web UI (enabled by --api.insecure=true)
      - "8080:8080"
    volumes:
      # So that Traefik can listen to the Docker events
      - /var/run/docker.sock:/var/run/docker.sock
      - /OMV_Services/traefik/traefik.yml:/etc/traefik/traefik.yml
    restart: unless-stopped

Я правильно понимаю, что в моём случае согласно статье нужно будет отредактировать traefik.yml, acme.json, host.yml, а docker-compose.yml не трогать? Что такое роутер в контексте статьи?

acme.json не надо трогать, его сам traefik генерирует.
Роутер, это тот адрес, на который откликается сам traefik, сервис, это то, куда он для этого роутера направляет запрос

Связка роутер-серуис соответствует хосту в NPN
Кстати, я бы таки советовал поднять NPM вместо traefik он намного дружественней к новичкам, а traefik в данном случае не имеет преимуществ

Спасибо, попробую потом его вообще не прокидывать из контейнера.

Его надо прокидывать для персистентности, иначе при обновлении контейнера сертификаты потеряются и их надо будет получать заново, поэтому выносят в отдельный volume, править не надо, можно просто создать пустой файл или с {} просто, если файла не будет, то docker-compose создаст каталог при запуске, а не файл.

В статье не совсем корректно написано, его не надо трогать вообще

1 лайк

Для автополучения сертификатов, а так же проксирования запросов на разные сервисы, но если у вас один jellyfin, то наверное вам и не нужен npm)

Статью поправлю на основе этой информации.