Portainer trong homelab: quản lý NAS, media server, Pi-hole và dashboard tại nhà
Homelab thường bắt đầu rất đơn giản: một chiếc mini PC cũ, Raspberry Pi, NAS tự dựng, vài container Docker. Ban đầu mọi thứ ổn: SSH vào máy, chạy docker compose up -d, chỉnh file YAML, xem log bằng terminal. Nhưng sau vài tháng, dịch vụ tăng lên: Jellyfin/Plex, Pi-hole, Home Assistant, Uptime Kuma, qBittorrent, Syncthing, dashboard, reverse proxy, backup job. Lúc này, quản lý thủ công bắt đầu mệt.
Portainer là gì? Vì sao hợp với homelab?
Portainer là giao diện web để quản lý Docker, Docker Compose, Swarm, Kubernetes ở mức cơ bản đến trung cấp. Trong homelab, dùng nhiều nhất là quản lý Docker standalone qua web UI.
Thay vì nhớ từng lệnh:
docker ps
docker logs
docker compose pull
docker compose up -d
docker exec -it container shBạn có thể vào Portainer để:
– Xem container đang chạy/dừng. – Restart, stop, recreate container. – Xem log nhanh. – Quản lý image, volume, network. – Deploy stack bằng Docker Compose. – Cập nhật container. – Theo dõi endpoint/máy chủ Docker. – Phân quyền người dùng nếu có nhiều người cùng quản trị.
Với homelab, lợi ích lớn nhất không phải “đẹp”, mà là giảm ma sát vận hành. Khi Pi-hole lỗi DNS, media server không nhận ổ NAS, dashboard không load, bạn cần nhìn nhanh: container nào chết, log báo gì, volume mount đúng chưa, network còn không.
Cài Portainer: cách phổ biến nhất
Với Docker đã có sẵn, cài Portainer rất nhanh:
docker volume create portainer_data
docker run -d
--name portainer
--restart=always
-p 9443:9443
-p 8000:8000
-v /var/run/docker.sock:/var/run/docker.sock
-v portainer_data:/data
portainer/portainer-ce:latest
Sau đó truy cập:
https://IP-MAY-CHU:9443Tạo admin user → chọn local Docker environment.
Lưu ý bảo mật quan trọng
Mount:
/var/run/docker.sockvào Portainer nghĩa là Portainer có quyền rất cao với Docker host. Ai chiếm được Portainer gần như có thể kiểm soát máy chủ.
Nên làm:
– Dùng mật khẩu mạnh.
– Không public Portainer trực tiếp ra Internet.
– Đặt sau VPN như WireGuard/Tailscale.
– Nếu dùng reverse proxy, bật HTTPS, auth bổ sung nếu cần.
– Update Portainer định kỳ.
– Backup volume portainer_data.
Quản lý NAS bằng Portainer
Nhiều homelab dùng NAS theo 2 kiểu:
1. NAS chuyên dụng: Synology, TrueNAS, Unraid. 2. NAS tự dựng: Debian/Ubuntu + ZFS/Btrfs/mdadm + Samba/NFS.
Portainer không thay thế hệ thống file NAS. Nó giúp quản lý các service chạy quanh NAS: Samba helper, file browser, backup, sync, media indexer, download client.
Volume mount: điểm sống còn
Khi chạy container media hoặc backup, mount thư mục NAS đúng cực kỳ quan trọng.
Ví dụ:
volumes:
- /mnt/storage/media:/media
- /mnt/storage/downloads:/downloads
- /mnt/storage/config/jellyfin:/configTrong Portainer, bạn có thể mở stack → kiểm tra Compose → xem container inspect → kiểm tra mount. Khi app không thấy file, nguyên nhân hay gặp:
– Sai path host. – Container user không có quyền đọc/ghi. – NAS mount NFS/SMB chưa mount khi Docker khởi động. – UID/GID trong container không khớp user trên host.
Gợi ý cấu trúc thư mục
Một cấu trúc gọn cho NAS homelab:
/mnt/storage/
media/
movies/
tv/
music/
downloads/
backups/
config/
jellyfin/
pihole/
uptime-kuma/
homepage/Ưu điểm: config tách khỏi data, backup dễ hơn, migrate máy khác đơn giản hơn.
File browser cho NAS
Có thể dùng File Browser container để quản lý file qua web:
services:
filebrowser:
image: filebrowser/filebrowser
container_name: filebrowser
ports:
- "8081:80"
volumes:
- /mnt/storage:/srv
- /mnt/storage/config/filebrowser:/database
restart: unless-stoppedDeploy stack này trong Portainer → có web UI duyệt file. Nhưng cần auth mạnh, không expose công khai.
Media server: Jellyfin, Plex, qBittorrent, Sonarr/Radarr
Media server là use case rất phổ biến. Portainer giúp gom toàn bộ thành stack dễ quản lý.
Jellyfin/Plex
Jellyfin ví dụ:
services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
ports:
- "8096:8096"
volumes:
- /mnt/storage/config/jellyfin:/config
- /mnt/storage/media:/media
restart: unless-stoppedPortainer hỗ trợ:
– Xem Jellyfin có restart liên tục không. – Kiểm tra log khi scan library lỗi. – Recreate container sau khi đổi volume. – Pull image mới → redeploy.
Nếu dùng Intel Quick Sync/NVIDIA transcoding, cần mount device/GPU. Khi đó nên cẩn thận hơn, vì cấu hình phụ thuộc host.
qBittorrent + download folder
services:
qbittorrent:
image: lscr.io/linuxserver/qbittorrent
container_name: qbittorrent
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Ho_Chi_Minh
- WEBUI_PORT=8080
ports:
- "8080:8080"
- "6881:6881"
- "6881:6881/udp"
volumes:
- /mnt/storage/config/qbittorrent:/config
- /mnt/storage/downloads:/downloads
restart: unless-stoppedĐiểm cần chú ý:
– PUID/PGID phải có quyền ghi /downloads.
– Không để torrent ghi vào ổ hệ thống nhỏ.
– Nếu dùng VPN container, network phức tạp hơn → nên quản lý bằng Compose stack, không bấm tay từng container.
Arr stack
Sonarr/Radarr/Lidarr/Prowlarr thường cần cùng thấy path:
/downloads
/mediaPath giữa container phải nhất quán. Nếu qBittorrent lưu /downloads/movie.mkv, Radarr cũng phải thấy đúng /downloads/movie.mkv. Portainer giúp đọc Compose nhanh, tránh lệch mount.
Pi-hole: DNS nội bộ dễ quản lý hơn
Pi-hole là dịch vụ nhạy cảm vì nó ảnh hưởng toàn mạng. Khi Pi-hole chết, nhiều thiết bị có thể mất DNS. Portainer hữu ích để restart, xem log, cập nhật, rollback cấu hình.
Ví dụ stack:
services:
pihole:
image: pihole/pihole:latest
container_name: pihole
ports:
- "53:53/tcp"
- "53:53/udp"
- "8082:80"
environment:
- TZ=Asia/Ho_Chi_Minh
- WEBPASSWORD=mat_khau_manh
volumes:
- /mnt/storage/config/pihole/etc-pihole:/etc/pihole
- /mnt/storage/config/pihole/etc-dnsmasq.d:/etc/dnsmasq.d
restart: unless-stoppedKhuyến nghị thực tế
– Đặt IP tĩnh cho máy chạy Pi-hole.
– Router DHCP trỏ DNS về Pi-hole.
– Có DNS phụ: router, Cloudflare, hoặc Pi-hole thứ hai.
– Không update Pi-hole lúc cả nhà đang họp/streaming.
– Backup /etc/pihole.
Port conflict
Pi-hole cần port 53. Nếu host đang chạy systemd-resolved, có thể xung đột. Kiểm tra:
sudo ss -tulpn | grep :53Portainer cho thấy container fail, nhưng nguyên nhân thường phải xử lý ở host.
Dashboard tại nhà: Homepage, Homarr, Dashy, Uptime Kuma
Khi số service tăng, bạn cần dashboard. Portainer quản lý container, còn dashboard giúp người dùng truy cập service nhanh.
Homepage
Homepage nhẹ, đẹp, đọc được Docker socket để tự phát hiện container nếu cấu hình.
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
ports:
- "3000:3000"
volumes:
- /mnt/storage/config/homepage:/app/config
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stoppedDashboard nên có:
– NAS/File Browser. – Jellyfin/Plex. – qBittorrent. – Sonarr/Radarr. – Pi-hole. – Portainer. – Uptime Kuma. – Router. – Home Assistant.
Uptime Kuma
Portainer cho biết container chạy, nhưng chưa chắc service khỏe. Uptime Kuma kiểm tra HTTP/TCP/Ping tốt hơn.
services:
uptime-kuma:
image: louislam/uptime-kuma
container_name: uptime-kuma
ports:
- "3001:3001"
volumes:
- /mnt/storage/config/uptime-kuma:/app/data
restart: unless-stoppedKết hợp tốt:
– Portainer → quản trị container. – Homepage/Homarr → cổng truy cập. – Uptime Kuma → giám sát uptime. – Pi-hole → DNS/filter. – NAS → lưu data/config.
Backup, update, rollback: phần hay bị bỏ qua
Homelab vui nhất lúc chạy được. Nhưng giá trị thật nằm ở khả năng khôi phục.
Cần backup gì?
Ưu tiên backup:
– /mnt/storage/config
– Portainer volume portainer_data
– Pi-hole config
– Jellyfin metadata nếu đã chỉnh nhiều
– Compose files/stacks
– Reverse proxy config
– Password/secrets
Không nhất thiết backup media nếu quá lớn, nhưng config thì bắt buộc.
Update container qua Portainer
Portainer có thể pull image mới, recreate container. Nhưng không nên update bừa.
Quy trình an toàn:
1. Đọc release notes nếu service quan trọng. 2. Backup config. 3. Pull image. 4. Recreate. 5. Xem log. 6. Test web/app. 7. Nếu lỗi → rollback tag cũ.
Tránh dùng latest cho dịch vụ quan trọng nếu bạn muốn ổn định. Nên pin version:
image: pihole/pihole:2024.07.0Mô hình mạng: đừng để homelab thành rủi ro
Portainer, Pi-hole, dashboard, media server đều có web UI. Không nên public tất cả ra Internet.
Khuyến nghị:
– Dùng VPN: Tailscale, WireGuard, ZeroTier. – Reverse proxy chỉ cho service cần thiết. – Bật HTTPS nội bộ nếu có thể. – Dùng mật khẩu riêng cho từng service. – Không dùng default password. – Tách network Docker theo nhóm. – Chỉ mount Docker socket khi thật cần.
Ví dụ: Homepage chỉ cần Docker socket read-only:
- /var/run/docker.sock:/var/run/docker.sock:roPortainer thì cần quyền cao hơn, nên càng phải bảo vệ.
Khi nào Portainer không đủ?
Portainer rất tiện, nhưng không phải cây đũa thần.
Không nên phụ thuộc hoàn toàn vào UI. Bạn vẫn nên biết:
– Docker Compose cơ bản. – Cách đọc log. – Quyền Linux: UID/GID. – Volume bind mount. – Network bridge/host. – Backup/restore. – SSH vào host khi Portainer lỗi.
Portainer tốt nhất khi dùng như lớp quản lý, còn cấu hình gốc vẫn nên nằm trong Compose rõ ràng, có backup, có version control nếu được.
Kết luận: Portainer là “trạm điều hành” hợp lý cho homelab
Trong homelab tại nhà, Portainer giúp biến một đống container rời rạc thành hệ thống dễ nhìn, dễ quản lý, dễ sửa lỗi. Với NAS, nó giúp kiểm soát mount, volume, service phụ trợ. Với media server, nó giúp deploy và cập nhật Jellyfin/Plex/qBittorrent/Arr stack gọn hơn. Với Pi-hole, nó giúp xử lý nhanh khi DNS gặp vấn đề. Với dashboard và monitoring, nó trở thành một phần của trải nghiệm quản trị hoàn chỉnh.
Công thức thực tế:
– Portainer để quản lý Docker. – NAS để lưu data/config. – Jellyfin/Plex để media. – Pi-hole để DNS/filter. – Homepage/Homarr để truy cập nhanh. – Uptime Kuma để giám sát. – VPN để truy cập an toàn. – Backup để ngủ ngon.
Nếu homelab của bạn mới có vài container, Portainer giúp bạn đi nhanh hơn. Nếu đã có hàng chục service, Portainer giúp bạn bớt hỗn loạn. Miễn là bảo mật đúng, backup đều, Compose rõ ràng, đây là một trong những công cụ đáng cài nhất cho homelab gia đình.
Bình luận (0)
Chưa có bình luận. Hãy là người đầu tiên!