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ộ

Jellyfin trên Synology: vì sao phải qua Docker chứ không có gói cài thẳng

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ộng đồng, tự vác đi mà cài. Theo tài liệu chính thức của jellyfin.org, cách được khuyến nghị cho Synology là qua Container Manager (Docker), không phải Virtual Machine Manager.

Nghe tới đây chắc có người nghĩ "vậy dựng VM Linux rồi cài Jellyfin native cho lành". Được, nhưng đừng. VM chiếm cứng một cục RAM/CPU riêng để nuôi cả một hệ điều hành, còn GPU passthrough để dùng Intel Quick Sync transcode qua VM thì phức tạp và hay dở chứng tùy model. Docker thì ngược lại: container chia sẻ tài nguyên trực tiếp với DSM, muốn map GPU vào chỉ cần một dòng device là xong.

Container Manager còn có thêm tính năng Project — về bản chất vẫn là docker-compose chuẩn, nhưng có GUI xem log, giới hạn tài nguyên, update mà không phải mò SSH suốt ngày.

Chặn đầu luôn cho đỡ mất công đọc hết bài mới vỡ mộng: Docker/Container Manager chỉ chạy trên NAS x86_64 (chip Intel/AMD). Mấy dòng dùng chip ARM như DS223, DS220j, DS420j... không cài được, chấm hết. Kiểm tra model của bạn trước khi đọc tiếp.

Yêu cầu trước khi cài

  • NAS chạy chip x86_64 (Intel Celeron/Pentium/Core hoặc AMD Ryzen dòng Plus).
  • DSM 7.2 trở lên — DSM 7.0-7.1 vẫn còn gói "Docker" cũ, giao diện khác, không có tính năng Project như 7.2.
  • Nên chọn model có Intel Quick Sync (iGPU) nếu định phát nhiều thiết bị cùng lúc hoặc xem file 4K cần transcode. Model AMD Ryzen thường không có iGPU, transcode phải gánh bằng CPU — nặng hơn nhiều.
  • RAM rảnh tối thiểu 4GB dành cho container, ngoài phần DSM đã dùng.

Các bước cài đặt

Bước 1: Cài Container Manager

Vào Package Center, tìm "Container Manager", cài như bình thường. Nếu NAS đang chạy DSM cũ hơn 7.2, gói này sẽ không hiện — lúc đó phải update DSM trước.

Bước 2: Tạo thư mục lưu trữ

Mở File Station, tạo cấu trúc thư mục sau (đường dẫn ví dụ, đổi volume1 theo volume thật của bạn):

  • /volume1/docker/jellyfin/config — chứa database, user, cấu hình. Đây là thư mục quan trọng nhất, mất là mất sạch thư viện đã sắp xếp, lịch sử xem, user.
  • /volume1/docker/jellyfin/cache — file tạm khi transcode.
  • Thư mục media có sẵn, ví dụ /volume1/video — không cần copy gì thêm, chỉ trỏ vào.

Bước 3: Lấy PUID/PGID trước khi viết compose

Đây là bước 90% người mới bỏ qua rồi ăn lỗi permission ngay lần chạy đầu. SSH vào NAS, gõ:

id <tên-user-của-bạn>
Kết quả kiểu uid=1026(admin) gid=100(users) — 1026 là PUID, 100 là PGID. PUID/PGID chỉ là ID user trên NAS, không phải thứ tự đăng nhập hay gì cao siêu. Ai chưa quen thì bình thường, lần đầu ai cũng phải tra, không có gì phải ngại.

Bước 4: Tạo Project và deploy

Trong Container Manager, vào tab Project > Create > chọn "Create docker-compose.yml", dán nội dung sau:

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
devices:
- /dev/dri:/dev/dri
environment:
- PUID=1026
- PGID=100
- UMASK=022
restart: unless-stopped
Vài điểm cần sửa đúng theo máy bạn:

  • Pin cứng version (10.11) thay vì latest. Dùng latest thì lần restart tự nhiên container update lên bản mới, breaking change đâu ập vào đó, lúc đấy mới ngồi tra changelog thì đã muộn.
  • Dòng devices: /dev/dri:/dev/dri chỉ giữ lại nếu NAS có Intel Quick Sync. Không có thì bỏ dòng này, compose vẫn chạy được, chỉ là transcode bằng CPU.
  • Sửa PUID/PGID theo kết quả lệnh id ở bước 3, không copy nguyên số ví dụ.
  • Port 8920 (HTTPS) và 7359/udp (auto-discovery LAN) là tùy chọn, không bắt buộc nếu chỉ dùng HTTP trong mạng nội bộ.

Bấm Next, đặt tên project, Done. Nghe hiển nhiên nhưng đây là chỗ hay quên nhất — dán compose xong tưởng xong, quên bấm Apply/Build ở bước cuối, tối về thấy container "Stopped" mới ngớ người ra là chưa build.

Bước 5: Setup wizard và bật Hardware Transcoding

Chờ trạng thái container chuyển "Running", mở trình duyệt gõ http://<IP-NAS>:8096. Wizard sẽ hỏi ngôn ngữ, tạo tài khoản admin, rồi thêm thư viện — trỏ đúng path bên trong container là /media/... chứ không phải path thật trên NAS.

Nếu máy có Intel Quick Sync, vào Dashboard > Playback, chọn Intel Quick Sync (QSV) làm hardware acceleration. Không thấy mục này nghĩa là container chưa map được /dev/dri, kiểm tra lại compose.

Truy cập từ xa: đừng trông chờ QuickConnect

Đây là chỗ nhiều bài viết mập mờ, dễ hiểu lầm nhất. QuickConnect (quickconnect.to) chỉ hoạt động với các package DSM đăng ký chính thức với Synology. Jellyfin chạy trong Docker là container độc lập, không tự dùng được tunnel QuickConnect như Plex hay Photo Station. Đừng phí thời gian tìm nút bật QuickConnect cho Jellyfin, nó không tồn tại.

Ba cách thay thế, xếp theo độ an toàn:

  1. An toàn nhất — VPN: dùng Synology VPN Server hoặc Tailscale. Không mở port nào ra Internet, truy cập như đang ở nhà.
  2. Phổ biến — Reverse Proxy: Control Panel > Application Portal > Reverse Proxy, kết hợp DDNS miễn phí dạng xxx.synology.me và chứng chỉ Let's Encrypt, trỏ về port nội bộ 8096. Nhớ khai đúng "Known Proxies" và Base URL trong cấu hình Jellyfin, thiếu bước này dễ dính lỗi sai X-Forwarded-For hoặc lộ IP thật.
  3. Nếu bắt buộc port-forward: chỉ forward port 8920 sau khi đã bật HTTPS trong Jellyfin (Dashboard > Network). Tuyệt đối không forward thẳng port 8096 (HTTP) ra ngoài Internet.

Lỗi thường gặp và cách xử lý

  • Permission denied khi scan thư viện hoặc transcode: PUID/PGID trong compose không khớp quyền thư mục thật. Vào File Station, chuột phải thư mục media > Properties > Permission, cấp Read/Write cho user tương ứng, tick "Apply to subfolders".
  • Bật Quick Sync nhưng transcode vẫn chạy CPU: quên thêm dòng devices: /dev/dri:/dev/dri trong compose, hoặc NAS dùng chip AMD Ryzen không có iGPU — trường hợp này đành chịu, CPU gánh hết.
  • Ổ cứng không chịu vào chế độ ngủ (HDD hibernation): known issue trên vài bản 10.8.x, do Jellyfin liên tục quét/ghi log nền. Kiểm tra lại lịch quét thư viện (Scheduled Tasks trong Jellyfin), giãn tần suất ra.
  • Container báo lỗi port đã dùng: 8096 đụng dịch vụ DSM khác đang chiếm. Đổi port map bên ngoài trong compose, ví dụ "8296:8096", giữ nguyên port nội bộ container là 8096.
  • Video giật, đứng khi phát: thư mục /cache nằm ở volume gần đầy dung lượng. Chuyển cache sang volume còn trống nhiều, dọn định kỳ.

Jellyfin vs Plex: nên chọn cái nào

Cài xong rồi, câu hỏi thật sự là có nên bỏ Plex chuyển hẳn qua không. Bốn tiêu chí đáng cân nhắc nhất:

| Tiêu chí        | Jellyfin         | Plex          |
| --------------- | ---------------- | ------------- |
| Chi phí         | Miễn phí toàn bộ | Cần Plex Pass |
| HW transcode    | Free             | Cần Plex Pass |
| Tài khoản cloud | Không cần        | Bắt buộc      |
| Telemetry       | Không            | Có thu thập   |
| App Smart TV    | Đang tăng        | Rất nhiều     |

Về chi phí: Jellyfin mở toàn bộ tính năng miễn phí — hardware transcode, Live TV/DVR, sync app mobile, không giới hạn số user. Plex thì các tính năng đó nằm sau Plex Pass, tính phí theo tháng hoặc năm. Giá Lifetime của Plex Pass thay đổi theo thời điểm và khuyến mãi, nên tự kiểm tra trực tiếp trên plex.tv trước khi quyết định — đừng tin số liệu trôi nổi trên mấy trang so sánh, chênh lệch giữa các nguồn khá lớn.

Về vận hành: Plex bắt buộc có tài khoản plex.tv để setup server, kể cả khi bạn chỉ dùng trong mạng LAN — nghĩa là máy chủ Plex của bạn luôn có một sợi dây nối ra ngoài. Jellyfin ngược lại, tự host hoàn toàn, không gửi dữ liệu sử dụng về đâu cả, không cần tài khoản cloud để hoạt động. Ai coi trọng quyền riêng tư dữ liệu thì đây là điểm cộng rõ ràng cho Jellyfin.

Về trải nghiệm client: Plex vẫn nhỉnh hơn nhờ có app chính thức trên gần như mọi Smart TV, set-top-box đời mới. Jellyfin ít app built-in hơn nhưng đang cải thiện dần, dùng qua Findroid, Streamyfin, hoặc chạy qua Infuse trên Apple TV/iOS cũng mượt.

Cần tiết kiệm chi phí, coi trọng riêng tư, không ngại tự tay cấu hình — chọn Jellyfin. Cần trải nghiệm mượt ngay từ đầu trên nhiều thiết bị, sẵn sàng trả phí cho sự tiện lợi — Plex vẫn là lựa chọn ổn.

Bảo mật và bảo trì

  • Không bao giờ forward thẳng port 8096 (HTTP) ra Internet. Cần truy cập ngoài thì bắt buộc HTTPS qua 8920, hoặc tốt nhất là VPN.
  • Dùng reverse proxy thì cấu hình đúng "Known Proxies" và Base URL trong Jellyfin, tránh lộ IP thật hoặc log sai nguồn truy cập.
  • Đặt mật khẩu mạnh cho tài khoản admin đầu tiên — tài khoản này có toàn quyền trên server. Nếu chỉ dùng trong LAN, tắt luôn "Allow remote connections".
  • Giữ tag version cố định trong compose, tự kiểm tra changelog trước khi nâng cấp thay vì để latest tự update.
  • Backup định kỳ thư mục /config. Ổ cứng nào rồi cũng có ngày chết, chỉ là nó chọn đúng hôm bạn chưa kịp backup hay không thôi.

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