Cài Jellyfin trên Synology bằng Docker thay Plex

Cài Jellyfin trên Synology bằng Docker thay Plex

Ai quen cài Plex Media Server qua Package Center rồi tìm Jellyfin trong đó thì dẹp ý định đi — không có. Synology chỉ ký hợp tác phân phối gói chính thức với Plex, còn Jellyfin là dự án open-source cộ

Video thao tác thật 5 bước (nashub.vn)

Jellyfin là gì, giải quyết nỗi đau gì

Jellyfin là phần mềm media server mã nguồn mở, miễn phí hoàn toàn — bạn trỏ nó vào kho phim/nhạc/show trên NAS, nó tự quét, tự lấy poster, phụ đề, diễn viên, rồi phát lại trên TV, điện thoại, trình duyệt qua app riêng hoặc Chromecast. Nói cách khác nó làm đúng việc Plex làm, nhưng không có khái niệm "Plex Pass" — hardware transcoding, đồng bộ tiến độ xem, quản lý nhiều thư viện đều bật sẵn, không cần trả một đồng nào. Case thực tế hay gặp: nhà có ổ cứng 2-3TB phim gia đình rip từ đĩa, cả nhà muốn mở lên tivi phòng khách mà không phải nhớ USB; dân sưu tầm phim cũ ghét cảnh Plex hỏi thẻ khi cài driver transcoding; hoặc đơn giản là bạn thấy giao diện Plex ngày càng nhiều nút mời mua gói mà nhu cầu chỉ là xem phim trong nhà. So với Plex, Jellyfin thiếu app TV bóng bẩy hơn một chút và ít tích hợp streaming ngoài, nhưng đổi lại tự chủ 100%, dữ liệu không đi qua server của bên thứ ba nào.

Vì sao cài qua Docker (Container Manager) mà không phải Package Center

Synology không có Jellyfin trong Package Center chính thức, còn phiên bản community thường chậm cập nhật. Cách gọn nhất trên DSM hiện tại là Container Manager (tên mới của gói Docker từ DSM 7.2) — bạn dán một đoạn docker-compose vào giao diện Project, nó tự kéo image và dựng container, không cần SSH, không cần gõ lệnh docker nào cả. Cần chuẩn bị trước: DSM 7.2.1 trở lên, gói Container Manager đã cài từ Package Center, một thư mục chia sẻ chứa dữ liệu Docker (ở đây là /volume1/docker), và biết PUID/PGID của user NAS đang dùng — hai số này quyết định Jellyfin có đọc/ghi được vào thư mục media hay không. Muốn biết PUID/PGID thì SSH vào NAS gõ lệnh id là ra ngay, không có gì phải ngại nếu lần đầu chưa biết.

Các bước thực hiện chi tiết

Bước 1: Tạo thư mục dữ liệu cho Jellyfin trong File Station

Trước khi đụng vào Docker, mở File Station vào thư mục chia sẻ docker (tương ứng /volume1/docker) và tạo một thư mục con tên jellyfin. Đây sẽ là nơi chứa config và cache của Jellyfin — không phải nơi chứa phim, phim vẫn nằm ở thư mục video riêng. Việc tạo sẵn thư mục này quan trọng hơn nhìn tưởng: nếu để Container Manager tự tạo, đôi khi nó tạo với quyền root khiến sau này Jellyfin đọc/ghi cấu hình bị lỗi quyền, tạo tay từ File Station cho chắc.

Tạo thư mục dữ liệu cho Jellyfin trong File Station

Bước 2: Mở Container Manager

Vào Container Manager, lúc này Overview còn trống trơn — chưa có project, chưa có container, 0 image. Đây là nơi mọi việc dựng Jellyfin sẽ diễn ra tiếp, qua mục Project ở thanh bên trái chứ không phải Container hay Image, vì mình sẽ dán nguyên một file docker-compose thay vì tạo container thủ công từng bước.

Mở Container Manager

Bước 3: Tạo Project mới và dán docker-compose

Ở mục Project, bấm Create, đặt tên project là jellyfin, chọn đường dẫn /volume1/docker, rồi dán đoạn docker-compose bên dưới vào khung soạn. Compose này gọi image jellyfin/jellyfin:10.11 (chốt version cụ thể thay vì :latest để tránh tự nhiên bị update và vỡ cấu hình sau này), mở ba cổng — 8096 cho HTTP, 8920 cho HTTPS, 7359/udp để các client tự tìm server trong mạng LAN — và map ba volume: config, cache, và /volume1/video làm thư mục media. PUID=1026, PGID=100 là ID của user NAS trong ví dụ này, bạn phải đổi thành ID user thật của mình lấy từ lệnh id, không thì Jellyfin sẽ không đọc được thư mục phim. Bấm Next rồi Done, Container Manager bắt đầu pull image ngay — cửa sổ Terminal: Build hiện chữ "jellyfin Pulling", đây là lúc chỉ cần ngồi chờ.

version: "3.8"
services:
  jellyfin:
    image: jellyfin/jellyfin:10.11
    container_name: jellyfin
    ports:
      - "8096:8096"
      - "8920:8920"
      - "7359:7359/udp"
    volumes:
      - /volume1/docker/jellyfin/config:/config
      - /volume1/docker/jellyfin/cache:/cache
      - /volume1/video:/media
    environment:
      - PUID=1026
      - PGID=100
      - UMASK=022
    restart: unless-stopped
Tạo Project mới và dán docker-compose

Bước 4: Theo dõi Container Manager giải nén image Jellyfin

Cửa sổ Terminal: Build vẫn mở, giờ chuyển sang giai đoạn Extracting — từng layer của image được giải nén, layer lớn nhất ở đây gần 263MB nên thanh tiến độ chạy khá lâu, đặc biệt nếu đường mạng NAS không nhanh. Trạng thái project bên ngoài vẫn hiện icon xoay tròn, 0 container — hoàn toàn bình thường, đừng vội đóng cửa sổ hay bấm Create lần hai vì tưởng bị treo. Cứ để nó chạy tới khi log dừng lại và cửa sổ có thể Close, lúc đó container mới thật sự khởi động.

Theo dõi Container Manager giải nén image Jellyfin

Bước 5: Mở Jellyfin qua trình duyệt để kiểm tra

Sau khi container chạy, mở trình duyệt tới địa chỉ NAS ở cổng 8096 là thấy ngay màn hình thiết lập lần đầu "Welcome to Jellyfin!" — đây chính là bằng chứng container đã sống và port đã thông ra ngoài, không cần vào lại Container Manager kiểm tra trạng thái làm gì nữa. Trường Server name lúc này tự điền một chuỗi hash lấy theo hostname container, chọn ngôn ngữ hiển thị rồi bấm Next để tiếp tục tạo tài khoản quản trị và thêm thư viện.

Mở Jellyfin qua trình duyệt để kiểm tra

Kiểm tra Jellyfin đã chạy ngon chưa

Dấu hiệu chắc chắn nhất là mở được trình duyệt tới http://ip-nas:8096 và thấy màn hình "Welcome to Jellyfin!" — nghĩa là container đã sống, port đã thông, không cần đoán qua đèn xanh đỏ trong Container Manager làm gì. Server name mặc định là một chuỗi hash dài ngoằng lấy theo hostname, đổi luôn thành tên dễ nhớ (ví dụ "NAS Phòng Khách") kẻo vài tháng sau nhìn lại chẳng biết đây là server nào. Bấm Next để tạo tài khoản admin, rồi ở bước thêm thư viện (Add Media Library) chọn đường dẫn /media — chính là thư mục /volume1/video đã map trong docker-compose. Lần quét đầu tiên với thư viện vài trăm GB có thể mất một lúc, cứ để nó chạy, đừng tắt tab vội.

Lỗi hay gặp và tùy chọn nâng cao (không bắt buộc)

Ba cái bẫy phổ biến nhất: một, quên chỉnh PUID/PGID đúng với user NAS — Jellyfin lên được nhưng thư viện trống trơn hoặc báo lỗi quyền truy cập, vì container không đọc được /volume1/video. Hai, thư mục trong volumes chưa tồn tại trước khi bấm Create — Container Manager vẫn tạo container nhưng Jellyfin không tìm thấy /config nên cấu hình mất sau mỗi lần restart, nhớ tạo đủ /volume1/docker/jellyfin/config và /cache như ở bước 1. Ba, cổng 8096 bị chiếm nếu máy từng cài Plex hay app khác dùng chung cổng — đổi vế trái trong ports của compose, ví dụ 8097:8096, rồi Apply lại. Nói đến Apply thì đây đúng là bước hay bị quên nhất trong mọi lần chỉnh compose: sửa xong tưởng xong, tối về debug mới nhớ ra chưa bấm gì cả. Phần nâng cao để dịp khác: HTTPS qua reverse proxy nếu muốn truy cập Jellyfin từ ngoài mạng an toàn, và hardware transcoding bằng cách map thêm /dev/dri vào container để tận dụng chip Intel QuickSync trên các dòng NAS có sẵn — không bắt buộc, xem phim trong mạng nhà thì cấu hình mặc định ở trên đã đủ chạy êm.

Mua NAS chính hãng

Xem tất cả →

Thiết bị NAS Synology & ổ cứng chính hãng Nhật Bản — tư vấn cấu hình, lắp đặt và bảo hành. Mua qua Shopee, giao toàn quốc.

No comments yet