Polski
Zacznij

← Wszystkie szablony · Multimedia

Wdróż Jellyfin jednym kliknięciem

Serwer multimedialny, który streamuje twoje filmy, seriale i muzykę na każde urządzenie

Alternatywa dla Plex i Emby, hostowana u siebie.

Czym jest Jellyfin?

Jellyfin to darmowy serwer multimedialny open source, który ludzie uruchamiają zamiast Plexa albo Emby. Układa filmy, seriale i muzykę, które masz, w biblioteki z plakatami, opisami i obsadą z metadanych pobieranych z sieci, a potem streamuje je do przeglądarki, na telefony, tablety i telewizory. Oficjalne aplikacje są na Androida, iOS, Android TV i Fire TV, Roku, telewizory LG i Samsung, Xboksa i Kodi, a Jellyfin Media Player działa na komputerach. Każda osoba dostaje własne konto, z własnym postępem oglądania i kontrolą rodzicielską.

Jellyfina hostuje się u siebie, żeby oglądać własne zbiory z każdego miejsca, bez konta w jakiejkolwiek firmie i bez abonamentu: nie ma płatnej wersji premium, śledzenia ani centralnych serwerów. Ten szablon konfiguruje go z administratorem podanym w polach formularza i trzema bibliotekami, Movies, Shows i Music, w katalogach wolumenu media. Haczyk to transkodowanie. Gdy urządzenie nie potrafi odtworzyć pliku takim, jaki jest, Jellyfin konwertuje go w locie, tutaj na CPU, co jest ciężką pracą, więc lekkie są pliki, które twoje urządzenia odtwarzają bezpośrednio, takie jak wideo H.264 w MP4.

Hosting Jellyfin na Pethost

  1. Logujesz się do Pethost kluczem dostępu, przez GitHub albo Google. Nie masz jeszcze maszyny? Wybierasz plan, a link czeka, aż będzie gotowa.
  2. Okno „Nowy projekt” otwiera się na aplikacji Jellyfin. Wypełniasz to, o co prosi, i klikasz „Utwórz projekt”: Nazwa użytkownika, Hasło administratora.
  3. Za minutę czy dwie aplikacja Jellyfin działa pod własnym adresem z HTTPS. Jej sekrety są tworzone losowo, a dane trafiają do nocnego backupu.
  4. To projekt jak każdy inny: ty albo twój agent możecie go zmienić, cofnąć do wcześniejszej wersji albo przywrócić.

Pytania o Jellyfin

Czy Jellyfin jest naprawdę darmowy?

Tak. Jellyfin to wolne oprogramowanie na licencji GNU GPL, a jego serwer i oficjalne aplikacje nic nie kosztują: nie ma wersji premium ani płatnych funkcji. Tworzą go wolontariusze.

Jellyfin czy Plex: jaka jest różnica?

Oba streamują twoje własne zbiory na twoje urządzenia. Serwer Plexa ma zamknięty kod, jego konta działają przez plex.tv, a od kwietnia 2025 oglądanie własnych zbiorów poza domem wymaga Plex Pass albo Remote Watch Pass. Jellyfin jest open source, nie wymaga zewnętrznego konta i za nic nie pobiera opłat.

Na jakich urządzeniach można oglądać Jellyfin?

W każdej nowoczesnej przeglądarce i w oficjalnych aplikacjach na Androida, iOS, Android TV i Fire TV, Roku, LG webOS, Samsung Tizen i Xboksa. Jellyfin Media Player działa na Windowsie, macOS i Linuksie, a dodatek JellyCon wprowadza Jellyfina do Kodi.

Jak nazywać pliki filmów i seriali w Jellyfin?

Każdy film dostaje katalog nazwany tytułem i rokiem, na przykład Big Buck Bunny (2008), a w nim wideo pod tą samą nazwą. Serial dostaje własny katalog, a w nim Season 01, Season 02 i tak dalej, z odcinkami nazwanymi jak Show Name S01E01.mkv. Wtedy Jellyfin znajduje właściwe plakaty i opisy.

Czy Jellyfin potrzebuje karty graficznej?

Nie. GPU tylko przyspiesza transkodowanie, czyli konwersję potrzebną urządzeniu, które nie potrafi odtworzyć pliku takim, jaki jest; bez GPU Jellyfin transkoduje na CPU. Trudny przypadek to wideo HDR: według dokumentacji Jellyfina żaden współczesny procesor konsumencki nie wykonuje dla niego mapowania tonów w czasie rzeczywistym. Pliki, które twoje urządzenia odtwarzają bez zmian, w ogóle nie wymagają transkodowania.

Ile pamięci i miejsca na dysku potrzebuje Jellyfin?

Jellyfin bez obciążenia zajmuje około 250 MB pamięci, a dysk to twoja biblioteka; transkodowanie wideo odbywa się na CPU i jest bardzo wymagające. Na Pethost wystarczy mu plan Starter, z miejscem na inne aplikacje obok.

Jellyfin: plik Docker Compose

Szablon to ten compose.yaml i zmienne zapisywane do .env projektu przy jego tworzeniu. Pethost uruchamia plik dokładnie tak, jak jest napisany.

Kontenery: jellyfin (jellyfin/jellyfin:12).

Wolumeny, w nocnym backupie: 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:

Więcej w kategorii Multimedia