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.
[*]
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.
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.
Nó sẽ hiển thị thông tin sau đầu ra.
Jellyfin cần có cổng HTTP và HTTPS để hoạt động. Mở chúng.
Thêm chế độ ngụy trang, vì ứng dụng sẽ liên hệ với các phiên bản khác.
Tải lại tường lửa để áp dụng thay đổi.
Cài đặt phiên bản Docker mới nhất.
Bạn có thể gặp lỗi sau khi cố gắng cài đặt Docker.
Sử dụng lệnh sau nếu bạn gặp lỗi trên.
Bật và chạy Docker daemon.
Xác minh rằng nó đang chạy.
Theo mặc định, Docker yêu cầu quyền root. Nếu bạn muốn tránh sử dụng
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.
Xác nhận rằng người dùng của bạn đã được thêm vào nhóm Docker.
Chuyển sang thư mục.
Tạo và mở tệp Docker compose cho chỉnh sửa.
Dán mã sau vào đó.
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
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
Bạn sẽ nhận được đầu ra tương tự xác nhận tính hợp lệ.
Khởi động vùng chứa Jellyfin.
Tạo và mở tệp
Dán mã sau vào nó.
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.
Xác minh cài đặt.
Bật và khởi động máy chủ Nginx.
Kiểm tra trạng thái của máy chủ.
Chúng tôi sẽ sử dụng Snapd để cài đặt Certbot. Cài đặt Snapd.
Bật và khởi động dịch vụ Snap.
Cài đặt lõi Snap gói.
Tạo các liên kết cần thiết để Snapd hoạt động.
Phát hành lệnh sau để cài đặt 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ó.
Tạo SSL chứng chỉ.
Lệnh trên sẽ tải chứng chỉ xuống thư mục
Tạo nhóm Diffie-Hellman chứng chỉ.
Để 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.
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.
Thêm dòng sau vào trước dòng
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
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.
Cấu hình SELinux để cho phép kết nối mạng.
Khởi động lại Nginx máy chủ.
Nếu bạn gặp lỗi sau, thì rất có thể là do SELinux Restrictions.
Để sửa lỗi, hãy chạy lệnh sau lệnh.
Khởi động lại dịch vụ Nginx.
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.
Dừng Jellyfin Container.
Kéo hình ảnh container mới nhất cho Jellyfin.
Thực hiện bất kỳ thay đổi nào trong
Khởi động Jellyfin container.
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ụngjellyfin.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
Mã:
$ sudo firewall-cmd --permanent --list-services
Mã:
cockpit dhcpv6-client ssh
Mã:
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
Mã:
$ sudo firewall-cmd --permanent --add-masquerade
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
Mã:
$ sudo dnf install docker-ce docker-ce-cli containerd.io
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
Mã:
$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin --allowerasing
Mã:
$ sudo systemctl enable docker --now
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
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)
Mã:
$ su - ${USER}
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
Mã:
$ cd ~/jellyfin
Mã:
$ nano docker-compose.yml
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
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
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
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
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
Cài đặt máy chủ Nginx.
Mã:
$ sudo dnf install nginx
Mã:
$ nginx -v
nginx version: nginx/1.22.1
Mã:
$ sudo systemctl enable nginx --now
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
Mã:
$ sudo dnf install snapd
Mã:
$ sudo systemctl enable snapd --now
Mã:
$ sudo snap install core
$ sudo snap refresh core
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
Mã:
$ sudo snap install --classic certbot
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d jellyfin.example.com
/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
Mã:
$ sudo certbot renew --dry-run
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
include /etc/nginx/conf.d/*.conf;
.
Mã:
server_names_hash_bucket_size 64;
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
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
Mã:
$ sudo setsebool -P httpd_can_network_connect 1
Mã:
$ sudo systemctl restart nginx
Mã:
nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)
Mã:
$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.pp
Mã:
$ sudo systemctl start nginx
Bước 8 - Truy cập và cấu hình Jellyfin
Truy cập URLhttps://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
Mã:
$ docker compose down --remove-orphans
Mã:
$ docker compose pull
docker-compose.yml
nếu bạn muốn.Khởi động Jellyfin container.
Mã:
$ docker compose up -d