Русский
Начать

← Все шаблоны · Медиа

Задеплойте Jellyfin в один клик

Медиасервер, который стримит ваши фильмы, сериалы и музыку на любое устройство

Альтернатива Plex и Emby на вашей машине.

Что такое Jellyfin?

Jellyfin — бесплатный медиасервер с открытым кодом, который запускают вместо Plex или Emby. Он раскладывает ваши фильмы, сериалы и музыку по медиатекам, подтягивая из интернета постеры, описания и актерский состав, и стримит их в браузер, на телефоны, планшеты и телевизоры. Есть официальные приложения для Android, iOS, Android TV и Fire TV, Roku, телевизоров LG и Samsung, Xbox и Kodi, а на компьютерах работает Jellyfin Media Player. У каждого человека свой аккаунт со своим прогрессом просмотра и родительским контролем.

Jellyfin хостят у себя, чтобы смотреть свои медиафайлы откуда угодно без аккаунта у какой-либо компании и без подписки: у него нет премиум-версии, слежки и центральных серверов. Этот шаблон настраивает его с администратором, которого вы указали в полях, и тремя медиатеками (Movies, Shows и Music) в папках тома media. Подвох — транскодирование. Когда устройство не может воспроизвести файл как есть, Jellyfin перекодирует его на лету, здесь на CPU, а это тяжелая нагрузка, поэтому легкими остаются файлы, которые ваши устройства воспроизводят напрямую, например видео H.264 в MP4.

Хостинг Jellyfin на Pethost

  1. Вы входите в Pethost — с passkey, через GitHub или Google. Машины еще нет? Вы выбираете тариф, и ссылка ждет, пока машина не будет готова.
  2. Окно «Новый проект» открывается на приложении Jellyfin. Вы заполняете то, что оно просит, и нажимаете «Создать проект»: Имя пользователя, Пароль администратора.
  3. Через минуту-две Jellyfin работает по своему адресу с HTTPS. Секреты создаются случайно, а данные попадают в ночной бэкап.
  4. Это проект как любой другой: вы или ваш агент можете его изменить, откатить или восстановить.

Вопросы про Jellyfin

Jellyfin действительно бесплатный?

Да. Jellyfin — свободное ПО под лицензией GNU GPL: его сервер и официальные приложения ничего не стоят, а премиум-версии и платных функций нет. Его разрабатывают волонтеры.

Jellyfin или Plex: в чем разница?

И Jellyfin, и Plex стримят ваши собственные медиафайлы на ваши устройства. У Plex сервер с закрытым кодом, аккаунты работают через plex.tv, а с апреля 2025 года, чтобы смотреть свои медиафайлы вне дома, нужен Plex Pass или Remote Watch Pass. У Jellyfin открытый код, сторонний аккаунт ему не нужен, и он ни за что не берет денег.

Какие устройства поддерживает Jellyfin?

Любой современный браузер, а также официальные приложения для Android, iOS, Android TV и Fire TV, Roku, LG webOS, Samsung Tizen и Xbox. Jellyfin Media Player работает на Windows, macOS и Linux, а дополнение JellyCon встраивает Jellyfin в Kodi.

Как называть фильмы и сериалы для Jellyfin?

Положите каждый фильм в папку с его названием и годом, например Big Buck Bunny (2008), а видео внутри назовите так же. Для сериала заведите отдельную папку, внутри нее Season 01, Season 02 и так далее, а серии называйте вроде Show Name S01E01.mkv. Тогда Jellyfin найдет правильные постеры и описания.

Нужна ли для Jellyfin видеокарта?

Нет. Видеокарта (GPU) только ускоряет транскодирование, то есть перекодирование, которое нужно устройству, когда оно не может воспроизвести файл как есть; без нее Jellyfin транскодирует на CPU. Сложный случай — HDR-видео: в документации Jellyfin сказано, что ни один современный потребительский CPU не делает для него тон-маппинг в реальном времени. Файлы, которые ваши устройства воспроизводят как есть, транскодировать вообще не нужно.

Сколько памяти и диска нужно Jellyfin?

Jellyfin в простое расходует около 250 MB памяти, а диск занимает ваша медиатека; транскодирование видео идет на CPU и сильно его нагружает. На Pethost ему хватит тарифа Starter, и рядом останется место для других приложений.

Jellyfin: файл Docker Compose

Шаблон — это этот compose.yaml и переменные, которые пишутся в .env проекта при его создании. Pethost запускает файл так, как он написан.

Контейнеры: jellyfin (jellyfin/jellyfin:12).

Тома, в ночном бэкапе: config, cache, media.

services:
  jellyfin:
    image: jellyfin/jellyfin:12
    restart: unless-stopped
    environment:
      ADMIN_USERNAME: ${ADMIN_USERNAME}
      ADMIN_PASSWORD: ${ADMIN_PASSWORD}
    # A new server's startup wizard is open to whoever comes first. So until the wizard is done,
    # Jellyfin runs on port 8097, which nobody reaches: there it is given the administrator from
    # the fields and a library for each folder of /media, and only then answers on 8096.
    entrypoint: ["/bin/sh", "-c"]
    command:
      - |
        set -e
        config=/config/config
        if ! grep -qs '<IsStartupWizardCompleted>true<' "$$config/system.xml"; then
          mkdir -p "$$config" /media/movies /media/shows /media/music
          if [ -f "$$config/network.xml" ]; then
            sed -i 's|<InternalHttpPort>[0-9]*<|<InternalHttpPort>8097<|' "$$config/network.xml"
          else
            printf '<?xml version="1.0" encoding="utf-8"?>\n<NetworkConfiguration>\n  <InternalHttpPort>8097</InternalHttpPort>\n</NetworkConfiguration>\n' > "$$config/network.xml"
          fi
          /jellyfin/jellyfin &
          setup=$$!
          api() { curl -fsS -H 'Content-Type: application/json' "$$@"; }
          # 401: an administrator with a password exists already, from a first start cut short,
          # and Jellyfin has marked its wizard done by itself.
          until wizard=$$(curl -sS -o /dev/null -w '%{http_code}' http://127.0.0.1:8097/Startup/Configuration) &&
            { [ "$$wizard" = 200 ] || [ "$$wizard" = 401 ]; }; do sleep 2; done
          if [ "$$wizard" = 200 ]; then
            api -d '{"ServerName":"Jellyfin","UICulture":"en-US","MetadataCountryCode":"US","PreferredMetadataLanguage":"en"}' http://127.0.0.1:8097/Startup/Configuration
            library() {
              api http://127.0.0.1:8097/Library/VirtualFolders | grep -q "\"Name\":\"$$1\"" ||
                api -d '{"LibraryOptions":{"EnableRealtimeMonitor":true}}' "http://127.0.0.1:8097/Library/VirtualFolders?name=$$1&collectionType=$$2&paths=/media/$$3"
            }
            library Movies movies movies
            library Shows tvshows shows
            library Music music music
            api -o /dev/null http://127.0.0.1:8097/Startup/User
            json() { printf '%s' "$$1" | sed 's/\\/\\\\/g; s/"/\\"/g'; }
            api -d "{\"Name\":\"$$(json "$$ADMIN_USERNAME")\",\"Password\":\"$$(json "$$ADMIN_PASSWORD")\"}" http://127.0.0.1:8097/Startup/User
            api -d '{"EnableRemoteAccess":true,"EnableAutomaticPortMapping":false}' http://127.0.0.1:8097/Startup/RemoteAccess
            api -X POST http://127.0.0.1:8097/Startup/Complete
          fi
          kill $$setup
          wait $$setup || true
          sed -i 's|<InternalHttpPort>8097<|<InternalHttpPort>8096<|' "$$config/network.xml"
        fi
        exec /jellyfin/jellyfin
    volumes:
      - config:/config
      - cache:/cache
      # Writable, so that films, shows and music can be copied in over SFTP.
      - media:/media

volumes:
  config:
  cache:
  media:

Еще в категории «Медиа»