Portainer Homelab: Quản lý NAS, Media Server, Pi-hole dễ dàng

P P T P Chung

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 xuất hiện như một “bảng điều khiển trung tâm” cho Docker. Không thay thế hoàn toàn terminal, nhưng giúp homelab dễ quan sát, dễ thao tác, dễ bảo trì hơn. Đặc biệt với người dùng NAS, media server, Pi-hole, dashboard tại nhà, Portainer gần như là lớp quản trị đáng có.

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 sh

Bạ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:9443

Tạo admin user → chọn local Docker environment.

Lưu ý bảo mật quan trọng

Mount:

/var/run/docker.sock

và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:/config

Trong 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-stopped

Deploy 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-stopped

Portainer 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
/media

Path 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-stopped

Khuyế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 :53

Portainer 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-stopped

Dashboard 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-stopped

Kế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.0

Mô 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:ro

Portainer 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.

Tác giả

P T P

Chia sẻ

Bài viết liên quan

Bình luận (0)

Email của bạn sẽ không được hiển thị công khai.

Chưa có bình luận. Hãy là người đầu tiên!