Vì sao không cài Plex qua Package Center cho xong chuyện
Synology có sẵn package Plex Media Server trong Package Center, cài một cú click, không cần biết Docker là gì. Nghe hấp dẫn đấy, nhưng đây là kiểu "tiện trước, khổ sau" mà dân dùng NAS lâu năm đều nếm qua ít nhất một lần.
Vấn đề nằm ở chỗ package native này thường lag version so với bản Plex thật ngoài kia. Tệ hơn: DSM update đã từng "đạp" Plex native ít nhất 3 lần kể từ DSM 7, do Synology đổi kernel hoặc module hệ thống khiến package lỗi không khởi động được. Kịch bản quen thuộc: cuối tuần rảnh rang định cày phim, bật NAS lên thì Plex báo lỗi tùm lum — vì tối qua DSM âm thầm tự update lúc bạn đang ngủ.
Docker giải quyết chuyện này bằng cách cô lập hoàn toàn Plex khỏi runtime của DSM. Container chạy trong môi trường riêng, DSM có update kiểu gì cũng không đụng tới. Thêm nữa, nếu bạn cần hardware transcoding (rất cần nếu muốn xem phim mượt trên nhiều thiết bị cùng lúc), GUI wizard kéo-thả của Container Manager không cho map device — nghĩa là không bật được tăng tốc phần cứng. Muốn có tính năng này, bắt buộc phải dùng Project (docker-compose) hoặc SSH gõ lệnh tay. Bài này đi theo hướng Project vì vừa linh hoạt vừa không cần đụng dòng lệnh SSH.
Nếu bạn không cần transcoding, không care version mới nhất, và ghét dây dưa với Docker — package native vẫn là lựa chọn hợp lý, tối giản. Còn nếu đã đọc đến đây rồi thì thôi, khỏi giấu: bạn muốn làm cho ra trò. Vậy đi theo hướng Docker thôi.
Yêu cầu trước khi bắt đầu
- NAS chạy DSM 7.2 trở lên — package tên là Container Manager (đổi tên từ "Docker" ở DSM 7.1 trở về trước), và tính năng Project (tương đương docker-compose) chỉ có từ DSM 7.2.
- Nếu muốn hardware transcoding: NAS phải dùng CPU Intel có Quick Sync Video (QSV). Các model dùng CPU Realtek hoặc ARM như DS223, DS223j, DS224+ không hỗ trợ khoản này — đừng mất công tìm cách bật, vô ích.
- Cài Container Manager từ Package Center nếu chưa có.
- Tài khoản Plex (miễn phí là đủ để dùng cơ bản; Plex Pass cần nếu muốn hardware transcoding).
Bước 1: Chuẩn bị thư mục trên File Station
Mở File Station, tạo cấu trúc thư mục sau trong shared folder docker (tạo folder này nếu chưa có):
/volume1/docker/plex/config— nơi Plex lưu database, metadata. Nếu NAS có khe NVMe/SSD cache, nên để volume này trên đó vì Plex quét metadata liên tục./volume1/docker/plex/transcode— chỗ chứa file tạm lúc transcode. Ưu tiên SSD để giảm tải ghi/xoá liên tục lên ổ cứng chính.- Thư mục media của bạn, ví dụ
/volume1/media/movies,/volume1/media/tv.
Lưu ý luôn: đừng map cả /volume1 vào container cho tiện. Chỉ mount đúng thư mục media cần dùng thôi — càng ít quyền càng an toàn, tránh trường hợp Plex (hay bug nào đó trong container) ghi/xoá nhầm vào chỗ không nên đụng.
Bước 2: Lấy PLEX_CLAIM token — nhớ làm ngay, đừng để dành
Truy cập plex.tv/claim, đăng nhập, copy token dạng claim-xxxxxxxxxxxx.
Đây là chỗ dễ ăn hành nhất: token này chỉ sống 4 phút. Lấy xong mà đi pha ly cà phê rồi quay lại tạo container là auto hết hạn, deploy xong Plex báo "invalid claim token" ngay. Lấy token xong là bắt tay vào tạo Project luôn, đừng để dành.
Bước 3: Tạo Project trong Container Manager
Vào Container Manager > Project > Create. Đặt tên project (ví dụ plex), chọn đường dẫn /volume1/docker/plex làm thư mục project, và chọn kiểu docker-compose.yml. Dán nội dung dưới đây, chỉnh lại đường dẫn/token cho khớp máy bạn:
version: "3"
services:
plex:
image: linuxserver/plex:latest
container_name: plex
network_mode: host
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Ho_Chi_Minh
- VERSION=docker
- PLEX_CLAIM=claim-xxxxxxxxxxxx
volumes:
- /volume1/docker/plex/config:/config
- /volume1/docker/plex/transcode:/transcode
- /volume1/media/movies:/movies:ro
- /volume1/media/tv:/tv:ro
devices:
- /dev/dri:/dev/dri
restart: unless-stopped
Vài điểm cần giải thích, không phải chỉ copy-paste cho có:
- network_mode: host — bắt buộc gần như vậy để các tính năng discovery (DLNA, GDM, Plex Companion) hoạt động trơn tru. Nếu không dùng host network, bạn phải tự map cả đống port (1900/udp, 32410-32414/udp, 32469/tcp, 3005/tcp...) — quá cực, không đáng.
- PUID/PGID — là ID user trên NAS sở hữu thư mục media. SSH vào NAS gõ lệnh
idlà ra ngay số này. Chưa biết số của mình là bình thường, ai cũng phải tra lần đầu. - image: ở đây dùng
linuxserver/plexvì cập nhật nhanh, cộng đồng lớn, linh hoạt biến môi trường. Nếu thích tối giản hơn, đổi sangplexinc/pms-docker:latest(image chính chủ Plex, ít biến môi trường hơn) cũng được, cấu trúc volume tương tự. - devices: /dev/dri:/dev/dri — dòng này chính là lý do vì sao phải dùng Project thay vì wizard GUI. Không có dòng này, hardware transcoding coi như vô vọng dù bạn có bật nút gì trong Settings đi nữa.
Bấm Next, review lại, rồi Done để deploy. Container Manager sẽ pull image về và khởi động container.
Bước 4: Kiểm tra và claim server
Vào tab Log của container trong Container Manager, xem có báo lỗi gì không. Nếu log sạch, mở trình duyệt truy cập:
http://<IP-NAS>:32400/web
Đăng nhập bằng tài khoản Plex, server sẽ tự động claim (nhờ token bạn nhét vào compose lúc nãy). Nếu không tự claim, vào Settings > Remote Access kiểm tra thủ công.
Bước 5: Thêm Library
Trong giao diện Plex, vào Home > "+" > Add Library. Chọn loại (Movies/TV Shows), trỏ vào đúng thư mục đã mount (/movies, /tv — đây là đường dẫn bên trong container, không phải đường dẫn thật trên NAS). Chọn agent metadata (mặc định để nguyên là ổn), rồi để Plex tự quét và nhận diện phim/series. Tuỳ số lượng file cần quét, việc này có thể mất vài phút đến vài giờ.
Bật hardware transcoding
Vào Settings > Transcoder, bật Use hardware acceleration when available và Use hardware-accelerated video encoding. Lưu ý: tính năng này yêu cầu Plex Pass (6.99$/tháng, 69.99$/năm, hoặc lifetime 249.99$ — giá lifetime này áp dụng đến 30/6/2026, sau đó tăng lên 749.99$ theo thông báo của Plex).
Nếu bật xong mà transcode vẫn chạy CPU 100% (kiểm tra qua Dashboard trong Plex, cột "Transcode" sẽ hiện "(hw)" nếu dùng phần cứng), gần như chắc chắn container của bạn thiếu /dev/dri. Fix: xoá container cũ, đảm bảo compose có đúng dòng devices như ở bước 3, rồi deploy lại.
Remote access: xem phim khi ra khỏi nhà
Muốn xem Plex từ ngoài mạng, cần hai việc: mở port 32400 và cấu hình router.
- Firewall trên NAS: Control Panel > Security > Firewall. Mặc định firewall Synology không tự mở port cho app custom như Plex container — bạn phải tự thêm rule cho phép TCP 32400.
- Port forwarding trên router: forward port 32400 TCP về IP nội bộ của NAS.
Đây là chỗ dân dùng mạng Việt Nam hay vướng nhất: forward port đúng hết rồi mà remote access vẫn báo "This site can't be reached". Nguyên nhân phần lớn không phải do bạn làm sai, mà do ISP (FPT, Viettel, VNPT) đẩy bạn vào CGNAT/double-NAT — router của bạn không có IP public thật, nên forward port kiểu gì cũng vô nghĩa. Cách kiểm tra: so sánh IP hiện trên router với IP hiện ra khi bạn tra "IP của tôi" trên trình duyệt. Nếu hai IP khác nhau, khả năng cao bạn dính CGNAT. Giải pháp: gọi ISP xin IP tĩnh/public (thường có phí), hoặc dùng Plex Relay (miễn phí nhưng giới hạn băng thông khoảng 2Mbps, xem phim HD sẽ giật), hoặc chuyển sang dùng VPN (Synology VPN Server, Tailscale) để truy cập thay vì mở thẳng port ra Internet.
Khuyến nghị của mình: hạn chế mở port 32400 thẳng ra Internet nếu không thật sự cần thiết. VPN vẫn an toàn hơn nhiều so với port-forward trần trụi.
Lỗi SSL khi truy cập Plex qua HTTPS
Nếu bạn thấy trình duyệt báo "Your connection is not private" khi Plex tự chuyển qua HTTPS — đừng hoảng, đây không phải do bạn cấu hình sai gì. Plex tự tạo self-signed certificate riêng của nó, không dùng chung cert Let's Encrypt mà Synology đã cấp cho NAS.
Có hai cách xử lý:
- Cách nhanh: vào Plex Settings > Network, đổi "Secure connections" từ Required xuống Preferred. Hết lỗi ngay nhưng giảm bảo mật kết nối — chỉ nên dùng tạm.
- Cách chuẩn: dùng Reverse Proxy có sẵn của Synology (Control Panel > Application Portal > Reverse Proxy). Tạo rule nguồn HTTPS (dùng domain DDNS và cert Let's Encrypt của Synology) trỏ đích về HTTP
localhost:32400. Chỗ hay bị bỏ sót: phải thêm custom header choUpgradevàConnectionđể hỗ trợ WebSocket — thiếu bước này thì Plex vẫn chạy nhưng mất mấy tính năng real-time như progress bar khi transcode hay notification.
Ba lỗi hay gặp nhất — tổng hợp lại cho dễ tra
| Lỗi | Nguyên nhân | Cách fix |
| ------------------------------- | --------------------------------------------- | ---------------------------------------------------------------- |
| Hardware transcoding không chạy | Tạo container bằng GUI wizard, thiếu /dev/dri | Xoá container, tạo lại bằng Project có device mapping |
| PLEX_CLAIM báo invalid | Token hết hạn (chỉ sống 4 phút) | Lấy token mới ngay trước lúc deploy |
| Không thấy/không ghi được media | PUID/PGID sai, không khớp quyền thư mục | Kiểm tra UID/GID ở Control Panel > User & Group, sửa lại env var | Bảo trì và bảo mật lâu dài
- Cập nhật image định kỳ qua Container Manager > Registry, hoặc dùng watchtower để tự động — bản vá bảo mật của image Docker không tự cập nhật như package native.
- Dùng một user riêng (không phải admin) để set PUID/PGID, giới hạn phạm vi container có thể đụng tới trên hệ thống.
- Chỉ mount đúng thư mục cần, ưu tiên gắn
:rocho thư mục nguồn như trong ví dụ compose ở trên.
Khi nào nên đổi sang Jellyfin thay vì Plex
Nếu tiêu chí của bạn là "miễn phí, không giới hạn" — Jellyfin free hoàn toàn kể cả hardware transcoding, remote access, HDR tone-mapping, những thứ Plex khoá sau Plex Pass. Nhưng Plex vẫn thắng ở hệ sinh thái app mượt hơn, hỗ trợ tốt hơn trên nhiều loại TV/thiết bị, giao diện thân thiện hơn với người dùng phổ thông (không rành công nghệ). Nếu nhà bạn có nhiều thành viên không "IT" dùng chung, Plex vẫn đáng đồng tiền bát gạo. Nếu chỉ có mình bạn dùng và không ngại vọc thêm chút, Jellyfin đáng cân nhắc.
Dù chọn hướng nào, đừng cài xong rồi bỏ mặc nó tự lo thân. Container vẫn cần cập nhật, config vẫn cần backup — cái database Plex mất cả tháng trời quét metadata, hỏng một cái là phải cày lại từ đầu, lúc đó mới thấm thía.



No comments yet