Поиск по сайту:

Как установить Jellyfin Media Server на Rocky Linux 9


На этой странице

  1. Предпосылки
  2. Шаг 1. Настройка брандмауэра
  3. Шаг 2. Установите Docker и Docker Compose
  4. Шаг 3. Создание конфигурации Docker Compose
  5. Шаг 4. Запустите Jellyfin
  6. Шаг 5. Установите Nginx
  7. Шаг 6. Установите SSL
  8. Шаг 7. Настройка Nginx
  9. Шаг 8. Доступ и настройка Jellyfin
  10. Шаг 9. Обновите медузу
  11. Заключение

Jellyfin — это бесплатный медиа-сервер с открытым исходным кодом, который позволяет вам транслировать контент, доступный из любого места. Он поддерживает фильмы, телепередачи, музыку и Live TV/DVR. Сервер Jellyfin можно настроить на Windows, Linux или macOS, а его содержимое будет мгновенно доступно с разных устройств с помощью браузеров и мобильных приложений с использованием общедоступного URL-адреса. Это даже позволяет передавать эти файлы на другие ПК, телевизоры или телефоны, если эти мультимедийные устройства подключены к Интернету или той же сети. Он предлагает несколько функций, включая поддержку DLNA, отсутствие ограничений на воспроизведение, автоматическое извлечение метаданных из TheTVDB, TheMovieDB и Rotten Tomatoes, автоматическую запись, поддержку аппаратного ускорения и многое другое.

Jellyfin — это форк сервера Emby Media после того, как Emby перешла на проприетарную модель лицензирования.

В этом руководстве вы узнаете, как установить Jellyfin Media Server с помощью Docker на сервер Rocky Linux 9.

Предпосылки

  • 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
    

Шаг 1. Настройте брандмауэр

Первым шагом является настройка брандмауэра. Rocky Linux использует Firewalld Firewall. Проверьте состояние брандмауэров.

$ sudo firewall-cmd --state
running

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

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

Он должен показать следующий вывод.

cockpit dhcpv6-client ssh

Для работы Jellyfin необходимы порты HTTP и HTTPS. Откройте их.

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

Добавьте маскарад, так как приложение будет связываться с другими экземплярами.

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

Перезагрузите брандмауэр, чтобы применить изменения.

$ sudo firewall-cmd --reload

Шаг 2. Установите Docker и Docker Compose

Rocky Linux поставляется со старой версией Docker. Чтобы установить последнюю версию, сначала установите официальный репозиторий Docker.

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

Установите последнюю версию Docker.

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

Вы можете получить следующую ошибку при попытке установить 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

Используйте следующую команду, если вы получили указанную выше ошибку.

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

Включите и запустите демон Docker.

$ sudo systemctl enable docker --now

Убедитесь, что он запущен.

? 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

По умолчанию Docker требует привилегий root. Если вы хотите избежать использования sudo при каждом запуске команды docker, добавьте свое имя пользователя в docker группа.

$ sudo usermod -aG docker $(whoami)

Вам нужно будет выйти из сервера и снова войти в систему под тем же пользователем, чтобы включить это изменение, или использовать следующую команду.

$ su - ${USER}

Подтвердите, что ваш пользователь добавлен в группу Docker.

$ groups
navjot wheel docker

Шаг 3. Создайте конфигурацию Docker Compose

Создайте каталог для конфигурации Jellyfin Docker.

$ mkdir ~/jellyfin

Перейдите в каталог.

$ cd ~/jellyfin

Создайте и откройте файл компоновки Docker для редактирования.

$ nano docker-compose.yml

Вставьте в него следующий код.

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

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Приведенный выше файл докера извлекает последнюю версию сервера Jellyfin из реестра Docker Hub. Идентификатор пользователя и группы для изображения установлен на 1000. Вы можете изменить его в соответствии с идентификатором пользователя вашей системы для правильных разрешений. Мы смонтировали каталоги для кеша, конфигурации и медиафайлов. Для политики перезапуска контейнеров установлено значение unless-stopped, что означает, что он будет продолжать работать, пока не будет остановлен вручную. Jellyfin по умолчанию работает на порту 8096, который мы предоставили хосту для использования Nginx позже. Мы также установили переменную среды, указывающую общедоступный URL-адрес Jellyfins.

Создайте каталоги для кеша и каталоги конфигурации. А затем смонтируйте их как постоянные тома в файле компоновки. Мы также смонтировали два медиафайла в наш файл. Вы можете создать столько каталогов мультимедиа, сколько захотите. Каталог media2 монтируется как доступный только для чтения.

Шаг 4 — Запустите Джеллифин

Проверьте конфигурацию компоновки Docker с помощью следующей команды.

$ docker compose config

Вы получите аналогичный вывод, подтверждающий действительность.

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

Запустите контейнер Jellyfin.

$ docker compose up -d

Шаг 5 — Установите Nginx

Rocky Linux поставляется со старой версией Nginx. Вам необходимо скачать официальный репозиторий Nginx, чтобы установить последнюю версию.

Создайте и откройте файл /etc/yum.repos.d/nginx.repo для создания официального репозитория Nginx.

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

Вставьте в него следующий код.

[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

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Установите сервер Nginx.

$ sudo dnf install nginx

Проверьте установку.

$ nginx -v
nginx version: nginx/1.22.1

Включите и запустите сервер Nginx.

$ sudo systemctl enable nginx --now

Проверьте состояние сервера.

$ 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"

Шаг 6 — Установите SSL

Инструмент Certbot генерирует SSL-сертификаты с помощью Lets Encrypt API. Для работы требуется репозиторий EPEL.

$ sudo dnf install epel-release

Мы будем использовать Snapd для установки Certbot. Установите Снапд.

$ sudo dnf install snapd

Включите и запустите службу Snap.

$ sudo systemctl enable snapd --now

Установите пакет ядра Snap.

$ sudo snap install core
$ sudo snap refresh core

Создайте необходимые ссылки для работы Snapd.

$ 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

Введите следующую команду, чтобы установить Certbot.

$ sudo snap install --classic certbot

Включите Certbot, создав символическую ссылку на его исполняемый файл.

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

Создайте SSL-сертификат.

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

Приведенная выше команда загрузит сертификат в каталог /etc/letsencrypt/live/jellyfin.example.com на вашем сервере.

Создайте групповой сертификат Диффи-Хеллмана.

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

Чтобы проверить, нормально ли работает обновление SSL, выполните пробный запуск процесса.

$ sudo certbot renew --dry-run

Если вы не видите ошибок, все готово. Ваш сертификат будет продлен автоматически.

Шаг 7 — Настройка Nginx

Откройте файл /etc/nginx/nginx.conf для редактирования.

$ sudo nano /etc/nginx/nginx.conf

Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Создайте и откройте файл /etc/nginx/conf.d/jellyfin.conf для редактирования.

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

Вставьте в него следующий код.

## 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 "";
}

После завершения сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Проверьте синтаксис файла конфигурации 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

Настройте SELinux, чтобы разрешить сетевые подключения.

$ sudo setsebool -P httpd_can_network_connect 1

Перезапустите сервер Nginx.

$ sudo systemctl restart nginx

Если вы получаете следующую ошибку, то, скорее всего, это связано с ограничениями SELinux.

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

Чтобы исправить ошибку, выполните следующие команды.

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

Снова запустите службу Nginx.

$ sudo systemctl start nginx

Шаг 8. Доступ и настройка Jellyfin

Посетите URL-адрес https://jellyfin.example.com, и вы увидите следующий экран.

Выберите язык интерфейса и нажмите кнопку «Далее», чтобы продолжить.

Введите свои данные пользователя и нажмите кнопку «Далее», чтобы продолжить. Нажмите «Добавить медиатеку», чтобы добавить медиатеки. Мы добавляем один для фильмов.

Заполните все параметры и щелкните значок «плюс» напротив параметра «Папки», чтобы выбрать папку для своей библиотеки. Прокрутите вниз и заполните необходимые параметры. Нажмите кнопку «ОК», чтобы завершить добавление библиотеки. Вы вернетесь на страницу настройки библиотеки.

Нажмите кнопку Далее, чтобы продолжить.

Выберите язык и страну для ваших метаданных мультимедиа и нажмите кнопку «Далее», чтобы продолжить.

Убедитесь, что опция Разрешить удаленные подключения отмечена. Если вы хотите использовать сопоставление портов, также включите его. Нажмите кнопку Далее, когда закончите.

Настройка завершена. Нажмите кнопку «Готово», чтобы перейти на страницу входа в Jellyfin.

Введите свои данные пользователя, созданные ранее, и нажмите кнопку «Войти», чтобы перейти к панели инструментов.

Вы можете начать использовать Jellyfin для воспроизведения своего контента.

Шаг 9 - Обновите Желефин

Обновить Jellyfin очень просто, для этого нужно выполнить несколько шагов. Сначала переключитесь в каталог.

$ cd ~/jellyfin

Остановите Контейнер Желефинов.

$ docker compose down --remove-orphans

Извлеките последний образ контейнера для Jellyfin.

$ docker compose pull

Внесите любые изменения в docker-compose.yml, если хотите.

Запустите контейнер Jellyfin.

$ docker compose up -d

Заключение

На этом мы завершаем наше руководство по установке Jellyfin Media Server с помощью Docker на сервер Rocky Linux 9. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.