Cách cài đặt Jellyfin Media Server trên Rocky Linux 9

theanh

Administrator
Nhân viên
Jellyfin là một máy chủ phương tiện miễn phí và mã nguồn mở cho phép bạn truyền phát nội dung có thể truy cập từ bất kỳ đâu. Nó hỗ trợ phim, chương trình truyền hình, nhạc và Live TV/DVR. Máy chủ Jellyfin có thể được thiết lập trên Windows, Linux hoặc macOS và nội dung của nó có thể được truy cập ngay lập tức từ các thiết bị khác nhau bằng trình duyệt và ứng dụng di động bằng URL công khai. Nó thậm chí còn giúp truyền phát các tệp này trên các PC, TV hoặc điện thoại khác miễn là các thiết bị phương tiện này được kết nối với internet hoặc cùng một mạng. Nó cung cấp một số tính năng bao gồm, Hỗ trợ DLNA, Không giới hạn phát lại, Tự động lấy siêu dữ liệu từ TheTVDB, TheMovieDB và Rotten Tomatoes, Ghi tự động, Hỗ trợ tăng tốc phần cứng và nhiều tính năng khác.

Jellyfin là một nhánh của máy chủ Emby Media sau khi Emby chuyển sang mô hình cấp phép độc quyền.

Trong hướng dẫn này, bạn sẽ tìm hiểu cách cài đặt Jellyfin Media Server bằng Docker trên máy chủ Rocky Linux 9.

Điều kiện tiên quyết​


  • Một máy chủ chạy Rocky Linux 9 với tối thiểu 2 lõi CPU và 4GB bộ nhớ. Bạn sẽ cần nâng cấp máy chủ theo yêu cầu.

  • Người dùng không phải root có quyền sudo.

  • Tên miền đủ điều kiện (FQDN) trỏ đến máy chủ của bạn. Đối với mục đích của chúng tôi, chúng tôi sẽ sử dụng jellyfin.example.com làm tên miền.

  • Đảm bảo mọi thứ đã được cập nhật.
Mã:
$ sudo dnf update
[*]
Cài đặt các gói tiện ích cơ bản. Một số trong số chúng có thể đã được cài đặt.
Mã:
$ sudo dnf install wget curl nano unzip yum-utils -y

Bước 1 - Cấu hình Tường lửa​

Bước đầu tiên là cấu hình tường lửa. Rocky Linux sử dụng Tường lửa Firewalld. Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo firewall-cmd --state
running
Tường lửa hoạt động với nhiều vùng khác nhau và vùng công cộng là vùng mặc định mà chúng ta sẽ sử dụng. Liệt kê tất cả các dịch vụ và cổng đang hoạt động trên tường lửa.
Mã:
$ sudo firewall-cmd --permanent --list-services
Nó sẽ hiển thị thông tin sau đầu ra.
Mã:
cockpit dhcpv6-client ssh
Jellyfin cần có cổng HTTP và HTTPS để hoạt động. Mở chúng.
Mã:
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
Thêm chế độ ngụy trang, vì ứng dụng sẽ liên hệ với các phiên bản khác.
Mã:
$ sudo firewall-cmd --permanent --add-masquerade
Tải lại tường lửa để áp dụng thay đổi.
Mã:
$ sudo firewall-cmd --reload

Bước 2 - Cài đặt Docker và Docker Compose​

Rocky Linux được tích hợp sẵn phiên bản Docker cũ hơn. Để cài đặt phiên bản mới nhất, trước tiên, hãy cài đặt kho lưu trữ Docker chính thức.
Mã:
$ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
Cài đặt phiên bản Docker mới nhất.
Mã:
$ sudo dnf install docker-ce docker-ce-cli containerd.io
Bạn có thể gặp lỗi sau khi cố gắng cài đặt Docker.
Mã:
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
Sử dụng lệnh sau nếu bạn gặp lỗi trên.
Mã:
$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin --allowerasing
Bật và chạy Docker daemon.
Mã:
$ sudo systemctl enable docker --now
Xác minh rằng nó đang chạy.
Mã:
? 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
Theo mặc định, Docker yêu cầu quyền root. Nếu bạn muốn tránh sử dụng sudo mỗi khi bạn chạy lệnh docker, hãy thêm tên người dùng của bạn vào docker nhóm.
Mã:
$ sudo usermod -aG docker $(whoami)
Bạn sẽ cần đăng xuất khỏi máy chủ và đăng nhập lại với cùng một người dùng để kích hoạt thay đổi này hoặc sử dụng lệnh sau.
Mã:
$ su - ${USER}
Xác nhận rằng người dùng của bạn đã được thêm vào nhóm Docker.
Mã:
$ groups
navjot wheel docker

Bước 3 - Tạo Docker Compose Cấu hình​

Tạo thư mục cho Cấu hình Docker Jellyfin.
Mã:
$ mkdir ~/jellyfin
Chuyển sang thư mục.
Mã:
$ cd ~/jellyfin
Tạo và mở tệp Docker compose cho chỉnh sửa.
Mã:
$ nano docker-compose.yml
Dán mã sau vào đó.
Mã:
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
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tệp docker ở trên sẽ kéo phiên bản mới nhất của máy chủ Jellyfin từ sổ đăng ký Docker Hub. ID người dùng và nhóm cho hình ảnh được đặt thành 1000. Bạn có thể thay đổi theo ID người dùng hệ thống của mình để có quyền chính xác. Chúng tôi đã gắn kết các thư mục cho bộ đệm, cấu hình và tệp phương tiện. Chính sách khởi động lại của vùng chứa được đặt thành unless-stopped nghĩa là nó sẽ tiếp tục chạy trừ khi dừng thủ công. Jellyfin chạy trên cổng 8096 theo mặc định, đây là cổng mà chúng tôi đã hiển thị cho máy chủ để Nginx sử dụng sau này. Chúng tôi cũng đã đặt một biến môi trường chỉ định URL công khai của Jellyfin.

Tạo các thư mục cho bộ đệm và thư mục cấu hình. Sau đó gắn kết chúng dưới dạng các ổ đĩa cố định trong tệp soạn thảo. Chúng tôi cũng đã gắn kết hai tệp phương tiện trong tệp của mình. Bạn có thể lưu trữ nhiều thư mục phương tiện tùy ý. Thư mục media2 được gắn kết ở chế độ chỉ đọc.

Bước 4 - Khởi động Jellyfin​

Xác thực cấu hình Docker compose bằng lệnh sau.
Mã:
$ docker compose config
Bạn sẽ nhận được đầu ra tương tự xác nhận tính hợp lệ.
Mã:
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
Khởi động vùng chứa Jellyfin.
Mã:
$ docker compose up -d

Bước 5 - Cài đặt Nginx​

Rocky Linux đi kèm với phiên bản Nginx cũ hơn. Bạn cần tải xuống kho lưu trữ Nginx chính thức để cài đặt phiên bản mới nhất.

Tạo và mở tệp /etc/yum.repos.d/nginx.repo để tạo kho lưu trữ Nginx chính thức.
Mã:
$ sudo nano /etc/yum.repos.d/nginx.repo
Dán mã sau vào nó.
Mã:
[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
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Cài đặt máy chủ Nginx.
Mã:
$ sudo dnf install nginx
Xác minh cài đặt.
Mã:
$ nginx -v
nginx version: nginx/1.22.1
Bật và khởi động máy chủ Nginx.
Mã:
$ sudo systemctl enable nginx --now
Kiểm tra trạng thái của máy chủ.
Mã:
$ 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"

Bước 6 - Cài đặt SSL​

Công cụ Certbot tạo chứng chỉ SSL bằng API Let's Encrypt. Công cụ này yêu cầu kho lưu trữ EPEL để hoạt động.
Mã:
$ sudo dnf install epel-release
Chúng tôi sẽ sử dụng Snapd để cài đặt Certbot. Cài đặt Snapd.
Mã:
$ sudo dnf install snapd
Bật và khởi động dịch vụ Snap.
Mã:
$ sudo systemctl enable snapd --now
Cài đặt lõi Snap gói.
Mã:
$ sudo snap install core
$ sudo snap refresh core
Tạo các liên kết cần thiết để Snapd hoạt động.
Mã:
$ 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
Phát hành lệnh sau để cài đặt Certbot.
Mã:
$ sudo snap install --classic certbot
Kích hoạt Certbot bằng cách tạo liên kết tượng trưng đến tệp thực thi của nó.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Tạo SSL chứng chỉ.
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d jellyfin.example.com
Lệnh trên sẽ tải chứng chỉ xuống thư mục /etc/letsencrypt/live/jellyfin.example.com trên máy chủ của bạn.

Tạo nhóm Diffie-Hellman chứng chỉ.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Để kiểm tra xem quá trình gia hạn SSL có hoạt động tốt không, hãy chạy thử quy trình.
Mã:
$ sudo certbot renew --dry-run
Nếu không thấy lỗi nào, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.

Bước 7 - Cấu hình Nginx​

Mở tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Thêm dòng sau vào trước dòng include /etc/nginx/conf.d/*.conf;.
Mã:
server_names_hash_bucket_size 64;
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tạo và mở tệp /etc/nginx/conf.d/jellyfin.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/jellyfin.conf
Dán mã sau vào đó.

Sau khi hoàn tất, hãy lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Xác minh cú pháp tệp cấu hình Nginx.
Mã:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Cấu hình SELinux để cho phép kết nối mạng.
Mã:
$ sudo setsebool -P httpd_can_network_connect 1
Khởi động lại Nginx máy chủ.
Mã:
$ sudo systemctl restart nginx
Nếu bạn gặp lỗi sau, thì rất có thể là do SELinux Restrictions.
Mã:
nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)
Để sửa lỗi, hãy chạy lệnh sau lệnh.
Mã:
$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.pp
Khởi động lại dịch vụ Nginx.
Mã:
$ sudo systemctl start nginx

Bước 8 - Truy cập và cấu hình Jellyfin​

Truy cập URL https://jellyfin.example.com và bạn sẽ nhận được màn hình sau.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22465%22%3E%3C/svg%3E


Chọn ngôn ngữ hiển thị và nhấp vào nút Tiếp theo để tiếp tục.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22608%22%3E%3C/svg%3E


Nhập thông tin người dùng của bạn và nhấp vào nút Tiếp theo để tiếp tục. Nhấp vào Thêm Thư viện Phương tiện để thêm thư viện phương tiện. Chúng tôi đang thêm một mục cho phim.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22525%22%3E%3C/svg%3E


Điền tất cả các tùy chọn và nhấp vào dấu cộng đối với tùy chọn Thư mục để chọn thư mục cho thư viện của bạn. Cuộn xuống và điền các tùy chọn bắt buộc. Nhấp vào nút Ok để hoàn tất việc thêm thư viện. Bạn sẽ được chuyển về trang thiết lập thư viện.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22383%22%3E%3C/svg%3E


Nhấp vào nút Tiếp theo để tiếp tục.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22462%22%3E%3C/svg%3E


Chọn ngôn ngữ và quốc gia cho siêu dữ liệu phương tiện của bạn và nhấp vào nút Tiếp theo để tiếp tục.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22449%22%3E%3C/svg%3E


Đảm bảo tùy chọn Cho phép kết nối từ xa được chọn. Nếu bạn muốn sử dụng ánh xạ cổng, hãy bật tùy chọn này. Nhấp vào nút Tiếp theo khi hoàn tất.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22337%22%3E%3C/svg%3E


Quá trình thiết lập đã hoàn tất. Nhấp vào nút Hoàn tất để tiếp tục đến trang đăng nhập Jellyfin.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22490%22%3E%3C/svg%3E


Nhập thông tin người dùng đã tạo trước đó và nhấp vào nút Đăng nhập để tiếp tục đến bảng điều khiển.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22334%22%3E%3C/svg%3E


Bạn có thể bắt đầu sử dụng Jellyfin để phát nội dung của mình.

Bước 9 - Nâng cấp Jellyfin​

Nâng cấp Jellyfin rất dễ dàng và chỉ cần thực hiện một vài bước. Đầu tiên, chuyển sang thư mục.
Mã:
$ cd ~/jellyfin
Dừng Jellyfin Container.
Mã:
$ docker compose down --remove-orphans
Kéo hình ảnh container mới nhất cho Jellyfin.
Mã:
$ docker compose pull
Thực hiện bất kỳ thay đổi nào trong docker-compose.yml nếu bạn muốn.

Khởi động Jellyfin container.
Mã:
$ docker compose up -d

Kết luận​

Đây là phần kết thúc hướng dẫn cài đặt Jellyfin Media Server bằng Docker trên máy chủ Rocky Linux 9. Nếu bạn có bất kỳ câu hỏi nào, hãy đăng chúng trong phần bình luận bên dưới.
 
Back
Bên trên