Si të instaloni serverin Jellyfin Media në Rocky Linux 9


Jellyfin është një server mediash pa pagesë dhe me burim të hapur që ju lejon të transmetoni përmbajtje që mund të aksesohet nga kudo. Ai mbështet filma, shfaqje televizive, muzikë dhe TV/DVR live. Serveri Jellyfin mund të konfigurohet në Windows, Linux ose macOS dhe përmbajtja e tij aksesohet menjëherë nga pajisje të ndryshme duke përdorur shfletues dhe aplikacione celulare duke përdorur një URL publike. Madje bën të mundur transmetimin e këtyre skedarëve në PC, televizorë ose telefona të tjerë për sa kohë që këto pajisje media janë të lidhura me internetin ose të njëjtin rrjet. Ai ofron disa veçori duke përfshirë, Mbështet DLNA, Pa kufi riprodhimi, Marrja automatike e meta të dhënave nga TheTVDB, TheMovieDB dhe Rotten Tomatoes, Regjistrimet automatike, Mbështet përshpejtimin e harduerit dhe shumë të tjera.

Jellyfin është një fork i serverit Emby Media pasi Emby kaloi në një model licence të pronarit.

Në këtë tutorial, do të mësoni se si të instaloni Jellyfin Media Server duke përdorur Docker në një server Rocky Linux 9.

Parakushtet

  • A server running Rocky Linux 9 with a minimum of 2 CPU cores and 4GB of memory. You will need to upgrade the server as per requirements.

  • A non-root user with sudo privileges.

  • A fully qualified domain name (FQDN) pointing to your server. For our purposes, we will use jellyfin.example.com as the domain name.

  • Make sure everything is updated.

    $ sudo dnf update
    
  • Install basic utility packages. Some of them may already be installed.

    $ sudo dnf install wget curl nano unzip yum-utils -y
    

Hapi 1 - Konfiguro Firewall

Hapi i parë është konfigurimi i murit të zjarrit. Rocky Linux përdor Firewalld Firewall. Kontrolloni statusin e mureve të zjarrit.

$ sudo firewall-cmd --state
running

Firewall punon me zona të ndryshme dhe zona publike është ajo e paracaktuar që do të përdorim. Listoni të gjitha shërbimet dhe portet aktive në murin e zjarrit.

$ sudo firewall-cmd --permanent --list-services

Duhet të tregojë daljen e mëposhtme.

cockpit dhcpv6-client ssh

Jellyfin ka nevojë për porte HTTP dhe HTTPS për të funksionuar. Hapini ato.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Shto maskaradë, pasi aplikacioni do të kontaktojë me raste të tjera.

$ sudo firewall-cmd --permanent --add-masquerade

Ringarko murin e zjarrit për të zbatuar ndryshimet.

$ sudo firewall-cmd --reload

Hapi 2 - Instaloni Docker dhe Docker Compose

Rocky Linux dërgohet me një version më të vjetër të Docker. Për të instaluar versionin më të fundit, së pari, instaloni depon zyrtare të Docker.

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Instaloni versionin më të fundit të Docker.

$ sudo dnf install docker-ce docker-ce-cli containerd.io

Ju mund të merrni gabimin e mëposhtëm gjatë përpjekjes për të instaluar Docker.

ror: 
 Problem: problem with installed package buildah-1:1.26.2-1.el9_0.x86_64
  - package buildah-1:1.26.2-1.el9_0.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
  - package containerd.io-1.6.9-3.1.el9.x86_64 conflicts with runc provided by runc-4:1.1.3-2.el9_0.x86_64
  - package containerd.io-1.6.9-3.1.el9.x86_64 obsoletes runc provided by runc-4:1.1.3-2.el9_0.x86_64
  - cannot install the best candidate for the job

Përdorni komandën e mëposhtme nëse merrni gabimin e mësipërm.

$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin --allowerasing

Aktivizo dhe ekzekuto demonin Docker.

$ sudo systemctl enable docker --now

Verifiko që po funksionon.

? docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
     Active: active (running) since Sat 2022-11-12 00:19:44 UTC; 6s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 99263 (dockerd)
      Tasks: 8
     Memory: 28.1M
        CPU: 210ms
     CGroup: /system.slice/docker.service
             ??99263 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Si parazgjedhje, Docker kërkon privilegje rrënjësore. Nëse dëshironi të shmangni përdorimin e sudo sa herë që ekzekutoni komandën docker, shtoni emrin tuaj të përdoruesit në docker grup.

$ sudo usermod -aG docker $(whoami)

Ju do të duhet të dilni nga serveri dhe të hyni përsëri si i njëjti përdorues për të aktivizuar këtë ndryshim ose të përdorni komandën e mëposhtme.

$ su - ${USER}

Konfirmoni që përdoruesi juaj është shtuar në grupin Docker.

$ groups
navjot wheel docker

Hapi 3 - Krijo konfigurimin e Docker Compose

Krijoni drejtorinë për konfigurimin e Jellyfin Docker.

$ mkdir ~/jellyfin

Kaloni në drejtori.

$ cd ~/jellyfin

Krijoni dhe hapni skedarin e kompozimit të Docker për redaktim.

$ nano docker-compose.yml

Vendos kodin e mëposhtëm në të.

version: '3.8'
services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    user: 1000:1000
    volumes:
      - ./config:/config
      - ./cache:/cache
      - ./media:/media
      - ./media2:/media2:ro
    restart: 'unless-stopped'
    ports:
      - 8096:8096
    # Optional - alternative address used for autodiscovery
    environment:
      - JELLYFIN_PublishedServerUrl=http://jellyfin.example.com

Ruani skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet.

Skedari i mësipërm docker tërheq versionin më të fundit të serverit Jellyfin nga regjistri Docker Hub. ID-ja e përdoruesit dhe e grupit për imazhin janë caktuar në 1000. Ju mund ta ndryshoni atë sipas ID-së së përdoruesit të sistemit tuaj për lejet e sakta. Ne kemi montuar direktori për skedarët e memories, konfigurimin dhe median. Politika e rinisjes së kontejnerëve është caktuar në nëse nuk ndalet që do të thotë se do të vazhdojë të funksionojë nëse nuk ndalet manualisht. Jellyfin funksionon në portin 8096 si parazgjedhje, që është ajo që ne i kemi ekspozuar hostit që Nginx ta përdorë më vonë. Ne kemi vendosur gjithashtu një variabël mjedisi që specifikon URL-në publike Jellyfins.

Krijoni direktori për cache dhe drejtoritë e konfigurimit. Dhe pastaj montoni ato si vëllime të vazhdueshme në skedarin e kompozimit. Ne gjithashtu kemi montuar dy skedarë media në skedarin tonë. Mund të paraqisni sa më shumë drejtori mediash që dëshironi. Drejtoria media2 është montuar si vetëm për lexim.

Hapi 4 - Filloni Jellyfin

Vërtetoni konfigurimin e kompozimit të Docker duke përdorur komandën e mëposhtme.

$ docker compose config

Do të merrni një dalje të ngjashme që konfirmon vlefshmërinë.

name: jellyfin
services:
  jellyfin:
    container_name: jellyfin
    environment:
      JELLYFIN_PublishedServerUrl: http://jellyfin.nspeaks.xyz
    image: jellyfin/jellyfin
    network_mode: host
    restart: unless-stopped
    user: 1000:1000
    volumes:
    - type: bind
      source: /home/navjot/jellyfin/config
      target: /config
      bind:
        create_host_path: true
    - type: bind
      source: /home/navjot/jellyfin/cache
      target: /cache
      bind:
        create_host_path: true
    - type: bind
      source: /home/navjot/jellyfin/media
      target: /media
      bind:
        create_host_path: true
    - type: bind
      source: /home/navjot/jellyfin/media2
      target: /media2
      read_only: true
      bind:
        create_host_path: true

Nisni enën Jellyfin.

$ docker compose up -d

Hapi 5 - Instaloni Nginx

Rocky Linux dërgohet me një version më të vjetër të Nginx. Duhet të shkarkoni depon zyrtare të Nginx për të instaluar versionin më të fundit.

Krijoni dhe hapni skedarin /etc/yum.repos.d/nginx.repo për krijimin e depove zyrtare Nginx.

$ sudo nano /etc/yum.repos.d/nginx.repo

Vendos kodin e mëposhtëm në të.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Ruani skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet.

Instaloni serverin Nginx.

$ sudo dnf install nginx

Verifikoni instalimin.

$ nginx -v
nginx version: nginx/1.22.1

Aktivizo dhe nis serverin Nginx.

$ sudo systemctl enable nginx --now

Kontrolloni statusin e serverit.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
     Active: active (running) since Sun 2022-11-13 13:49:55 UTC; 1s ago
       Docs: http://nginx.org/en/docs/
    Process: 230797 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 230798 (nginx)
      Tasks: 3 (limit: 12355)
     Memory: 2.8M
        CPU: 13ms
     CGroup: /system.slice/nginx.service
             ??230798 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??230799 "nginx: worker process"
             ??230800 "nginx: worker process"

Hapi 6 - Instaloni SSL

Mjeti Certbot gjeneron certifikata SSL duke përdorur Lets Encrypt API. Kërkon që depoja EPEL të funksionojë.

$ sudo dnf install epel-release

Ne do të përdorim Snapd për të instaluar Certbot. Instaloni Snapd.

$ sudo dnf install snapd

Aktivizo dhe nis shërbimin Snap.

$ sudo systemctl enable snapd --now

Instaloni paketën bazë Snap.

$ sudo snap install core
$ sudo snap refresh core

Krijoni lidhjet e nevojshme që Snapd të funksionojë.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Lëshoni komandën e mëposhtme për të instaluar Certbot.

$ sudo snap install --classic certbot

Aktivizo Certbot duke krijuar simlidhjen me ekzekutuesin e tij.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Gjeneroni certifikatën SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d jellyfin.example.com

Komanda e mësipërme do të shkarkojë një certifikatë në drejtorinë /etc/letsencrypt/live/jellyfin.example.com në serverin tuaj.

Krijo një certifikatë grupi Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Për të kontrolluar nëse rinovimi SSL po funksionon mirë, bëni një ekzekutim të thatë të procesit.

$ sudo certbot renew --dry-run

Nëse nuk shihni asnjë gabim, jeni gati. Certifikata juaj do të rinovohet automatikisht.

Hapi 7 - Konfiguro Nginx

Hapni skedarin /etc/nginx/nginx.conf për modifikim.

$ sudo nano /etc/nginx/nginx.conf

Shtoni rreshtin e mëposhtëm përpara rreshtit include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Ruani skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet.

Krijoni dhe hapni skedarin /etc/nginx/conf.d/jellyfin.conf për modifikim.

$ sudo nano /etc/nginx/conf.d/jellyfin.conf

Vendos kodin e mëposhtëm në të.

## Censor sensitive information in logs
log_format stripsecrets '$remote_addr $host - $remote_user [$time_local] '
                    '"$secretfilter" $status $body_bytes_sent '
                    '$request_length $request_time $upstream_response_time '
                    '"$http_referer" "$http_user_agent"';

map $request $secretfilter {
    ~*^(?<prefix1>.*[\?&]api_key=)([^&]*)(?<suffix1>.*)$  "${prefix1}***$suffix1";
    default                                               $request;
}

# Cache video streams
# Set in-memory cache-metadata size in keys_zone, size of video caching and how many days a cached object should persist
proxy_cache_path  /var/cache/nginx/jellyfin-videos levels=1:2 keys_zone=jellyfin-videos:100m inactive=90d max_size=35000m;
map $request_uri $h264Level { ~(h264-level=)(.+?)& $2; }
map $request_uri $h264Profile { ~(h264-profile=)(.+?)& $2; }

# Cache images
proxy_cache_path /var/cache/nginx/jellyfin levels=1:2 keys_zone=jellyfin:100m max_size=15g inactive=30d use_temp_path=off;

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
  listen 80;
  listen [::]:80;
  server_name jellyfin.example.com;
  location / { return 301 https://$host$request_uri; }
}

server {
   listen 443 ssl http2;
   listen [::]:443 ssl http2;
   server_name jellyfin.example.com;

   ## The default `client_max_body_size` is 1M, this might not be enough for some posters, etc.
   client_max_body_size 20M;

   # use a variable to store the upstream proxy
   # in this example we are using a hostname which is resolved via DNS
   # (if you aren't using DNS remove the resolver line and change the variable to point to an IP address e.g `set $jellyfin 127.0.0.1`)
   set $jellyfin jellyfin;
   resolver 127.0.0.1 valid=30;

   access_log  /var/log/nginx/jellyfin.access.log stripsecrets;
   error_log   /var/log/nginx/jellyfin.error.log;

   http2_push_preload on; # Enable HTTP/2 Server Push

   ssl_certificate /etc/letsencrypt/live/jellyfin.example.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/jellyfin.example.com/privkey.pem;
   ssl_trusted_certificate /etc/letsencrypt/live/jellyfin.example.com/chain.pem;
   ssl_session_timeout 1d;

   # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
   ssl_protocols TLSv1.2 TLSv1.3;

   # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
   # prevent replay attacks.
   #
   # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
   ssl_early_data on;

   ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:10m;
   ssl_session_tickets off;

   keepalive_timeout    70;
   sendfile             on;
   client_max_body_size 80m;

   # OCSP Stapling ---
   # fetch OCSP records from URL in ssl_certificate and cache them
   ssl_stapling on;
   ssl_stapling_verify on;
   ssl_dhparam /etc/ssl/certs/dhparam.pem;

   # Content Security Policy
   # See: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
   # Enforces https content and restricts JS/CSS to origin
   # External Javascript (such as cast_sender.js for Chromecast) must be whitelisted.
   # NOTE: The default CSP headers may cause issues with the webOS app
   add_header Content-Security-Policy "default-src https: data: blob: http://image.tmdb.org; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' https://www.gstatic.com/cv/js/sender/v1/cast_sender.js https://www.gstatic.com/eureka/clank/95/cast_sender.js https://www.gstatic.com/eureka/clank/96/cast_sender.js https://www.gstatic.com/eureka/clank/97/cast_sender.js https://www.youtube.com blob:; worker-src 'self' blob:; connect-src 'self'; object-src 'none'; frame-ancestors 'self'";

   # Security / XSS Mitigation Headers
   # NOTE: X-Frame-Options may cause issues with the webOS app
   add_header X-Frame-Options "SAMEORIGIN";
   add_header X-XSS-Protection "1; mode=block";
   add_header X-Content-Type-Options "nosniff";
   add_header X-Early-Data $tls1_3_early_data;

   location = / {
       return 302 http://$host/web/;
       return 302 https://$host/web/;
   }

   location / {
       # Proxy main Jellyfin traffic
       proxy_pass http://$jellyfin: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;
       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://$jellyfin: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;
   }

   # Cache video streams
   location ~* ^/Videos/(.*)/(?!live)
   {
       # Set size of a slice (this amount will be always requested from the backend by nginx)
       # Higher value means more latency, lower more overhead
       # This size is independent of the size clients/browsers can request
       slice 2m;

       proxy_cache jellyfin-videos;
       proxy_cache_valid 200 206 301 302 30d;
       proxy_ignore_headers Expires Cache-Control Set-Cookie X-Accel-Expires;
       proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
       proxy_connect_timeout 15s;
       proxy_http_version 1.1;
       proxy_set_header Connection "";
       # Transmit slice range to the backend
       proxy_set_header Range $slice_range;

       # This saves bandwidth between the proxy and jellyfin, as a file is only downloaded one time instead of multiple times when multiple clients want to at the same time
       # The first client will trigger the download, the other clients will have to wait until the slice is cached
       # Esp. practical during SyncPlay
       proxy_cache_lock on;
       proxy_cache_lock_age 60s;

       proxy_pass http://$jellyfin:8096;
       proxy_cache_key "jellyvideo$uri?MediaSourceId=$arg_MediaSourceId&VideoCodec=$arg_VideoCodec&AudioCodec=$arg_AudioCodec&AudioStreamIndex=$arg_AudioStreamIndex&VideoBitrate=$arg_VideoBitrate&AudioBitrate=$arg_AudioBitrate&SubtitleMethod=$arg_SubtitleMethod&TranscodingMaxAudioChannels=$arg_TranscodingMaxAudioChannels&RequireAvc=$arg_RequireAvc&SegmentContainer=$arg_SegmentContainer&MinSegments=$arg_MinSegments&BreakOnNonKeyFrames=$arg_BreakOnNonKeyFrames&h264-profile=$h264Profile&h264-level=$h264Level&slicerange=$slice_range";

       # add_header X-Cache-Status $upstream_cache_status; # This is only for debugging cache
   }

   # Cache images
   location ~ /Items/(.*)/Images {
       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;

       proxy_cache jellyfin;
       proxy_cache_revalidate on;
       proxy_cache_lock on;
       # add_header X-Cache-Status $upstream_cache_status; # This is only to check if cache is working
   }

   # Downloads limit (inside server block)
   location ~ /Items/(.*)/Download$ {
       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;

       limit_rate 1700k; # Speed limit (here is on kb/s)
       limit_conn addr 3; # Number of simultaneous downloads per IP
       limit_conn_status 460; # Custom error handling
       # proxy_buffering on; # Be sure buffering is on (it is by default on nginx), otherwise limits won't work
   }

}

# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
  "~." $ssl_early_data;
  default "";
}

Pasi të keni përfunduar, ruani skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet.

Verifikoni sintaksën e skedarit të konfigurimit Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Konfiguro SELinux për të lejuar lidhjet e rrjetit.

$ sudo setsebool -P httpd_can_network_connect 1

Rinisni serverin Nginx.

$ sudo systemctl restart nginx

Nëse merrni gabimin e mëposhtëm, atëherë me shumë mundësi është për shkak të kufizimeve të SELinux.

nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)

Për të rregulluar gabimin, ekzekutoni komandat e mëposhtme.

$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.pp

Filloni përsëri shërbimin Nginx.

$ sudo systemctl start nginx

Hapi 8 - Hyni dhe konfiguroni Jellyfin

Vizitoni URL-në https://jellyfin.example.com dhe do të merrni ekranin e mëposhtëm.

Zgjidhni gjuhën e shfaqjes dhe klikoni butonin Tjetër për të vazhduar.

Futni të dhënat tuaja të përdoruesit dhe kliko butonin Tjetër për të vazhduar. Klikoni Shto bibliotekën e mediave për të shtuar bibliotekat e mediave. Po shtojmë një për filmat.

Plotësoni të gjitha opsionet dhe klikoni shenjën plus kundër opsionit Dosje për të zgjedhur dosjen për bibliotekën tuaj. Lëvizni poshtë dhe plotësoni opsionet e kërkuara. Klikoni butonin Ok për të përfunduar shtimin e bibliotekës. Do të ktheheni në faqen e konfigurimit të bibliotekës.

Klikoni butonin Tjetër për të vazhduar.

Zgjidhni gjuhën dhe shtetin për meta të dhënat tuaja të medias dhe klikoni butonin Tjetër për të vazhduar.

Sigurohuni që të jetë zgjedhur opsioni Lejo lidhjet në distancë. Nëse dëshironi të përdorni hartën e portit, aktivizojeni gjithashtu. Klikoni butonin Tjetër kur të mbaroni.

Konfigurimi ka përfunduar. Klikoni butonin Finish për të vazhduar te faqja e hyrjes në Jellyfin.

Futni të dhënat tuaja të përdoruesit të krijuara më parë dhe kliko butonin Identifikohu për të vazhduar te paneli i kontrollit.

Mund të filloni të përdorni Jellyfin për të luajtur përmbajtjen tuaj.

Hapi 9 - Përmirësoni Jellyfin

Përmirësimi i Jellyfin është i lehtë dhe kërkon disa hapa. Së pari, kaloni në drejtori.

$ cd ~/jellyfin

Ndaloni kontejnerin Jellyfin.

$ docker compose down --remove-orphans

Tërhiq imazhin më të fundit të kontejnerit për Jellyfin.

$ docker compose pull

Bëni çdo ndryshim në docker-compose.yml nëse dëshironi.

Nisni enën Jellyfin.

$ docker compose up -d

konkluzioni

Kjo përfundon tutorialin tonë për instalimin e serverit Jellyfin Media duke përdorur Docker në një server Rocky Linux 9. Nëse keni ndonjë pyetje, postojini ato në komentet më poshtë.