Làm chủ HomeLab với Homepage: Hướng dẫn thực hành Dashboard API thời gian thực

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

Vượt qua mớ hỗn độn của nhiều tab: Nỗi ám ảnh hàng ngày của HomeLab

Nếu bạn cũng giống tôi, HomeLab của bạn có lẽ đã bắt đầu chỉ với một chiếc Raspberry Pi hoặc một chiếc laptop cũ. Hồi đó mọi thứ thật đơn giản. Nhưng sáu tháng sau, đột nhiên bạn phải vật lộn với một cụm Proxmox, bốn host Docker khác nhau, Pi-hole, Home Assistant và một server Jellyfin. Tuần trước, tôi nhận ra mình đang mở tới 22 tab trình duyệt chỉ để giám sát hạ tầng của mình. Tôi liên tục phải click qua lại để xem có container nào bị lỗi không hoặc liệu CPU có đang chạm mức 95% khi đang transcode media hay không.

Việc quá tải tab không chỉ gây khó chịu mà còn là kẻ thù của năng suất. Gần đây, tôi đã bỏ lỡ một cảnh báo về lưu trữ chỉ vì không muốn đăng nhập vào ba giao diện web riêng biệt chỉ để kiểm tra nhanh trạng thái. Tôi không cần thêm một danh sách bookmark. Tôi cần một trung tâm điều khiển — một dashboard giao tiếp trực tiếp với các dịch vụ và lấy dữ liệu trực tiếp mà không bắt tôi phải trải qua hàng tá màn hình đăng nhập.

Tại sao Bookmark tĩnh không còn phù hợp với HomeLab hiện đại

Bookmark chỉ là những ảnh chụp tĩnh của một thế giới luôn biến động. Những công cụ như Homer hay các thư mục trình duyệt đơn giản đều là những công cụ “ngớ ngẩn” — chúng cung cấp một liên kết nhưng không cho bạn biết gì về “sức khỏe” của dịch vụ. Nếu client Transmission của tôi bị treo hoặc ổ cứng TrueNAS bị lỗi, bookmark sẽ không nói một lời nào. Tôi chỉ phát hiện ra khi cố gắng sử dụng dịch vụ, và đó thường là lúc tồi tệ nhất.

Trong một thiết lập HomeLab nghiêm túc, khả năng quan sát (observability) là yếu tố phân định giữa một cuối tuần thư giãn và một buổi khắc phục sự cố xuyên đêm. Chúng ta cần lấy dữ liệu từ xa (telemetry) thông qua API. Hầu hết các dashboard hiện nay thường rơi vào hai cái bẫy: hoặc là quá cơ bản như Heimdall, hoặc yêu cầu hơn 400 dòng CSS và JSON phức tạp chỉ để trông đẹp mắt, đó là lý do Dashy thường khiến người dùng nản lòng.

Tìm kiếm điểm cân bằng: Tại sao tôi chuyển sang dùng Homepage

Tôi đã dành ba tuần để thử nghiệm các giải pháp khác nhau nhằm khắc phục lỗ hổng quan sát của mình. Dưới đây là cái nhìn tổng quan cho hầu hết những người đam mê DevOps:

  • Homer/Heimdall: Tuyệt vời để thiết lập trong năm phút, nhưng về cơ bản chúng chỉ là những biểu tượng đẹp mắt. Việc đưa dữ liệu thời gian thực vào chúng thường đòi hỏi các script lắt léo.
  • Dashy: Đây là lựa chọn cho người dùng chuyên sâu, nhưng chi phí cấu hình rất lớn. Tôi dành nhiều thời gian để sửa bố cục dashboard hơn là thực sự sử dụng lab của mình.
  • Portainer: Mặc dù không thể thiếu trong việc quản lý container, nhưng nó thiếu một cái nhìn tổng thể về các dịch vụ đang chạy trên bare metal hoặc phần cứng riêng biệt.

Sau đó, tôi phát hiện ra Homepage (gethomepage.dev). Nó đạt được sự cân bằng hoàn hảo cho quy trình làm việc của tôi. Nó sử dụng các file cấu hình YAML sạch sẽ và tải trong chưa đầy 250ms vì được xây dựng trên Next.js. Với sự hỗ trợ mặc định cho hơn 100 widget, nó không chỉ liên kết tới Pi-hole mà còn hiển thị tỷ lệ chặn trong 24 giờ. Nó không chỉ liên kết tới Proxmox mà còn hiển thị mức sử dụng bộ nhớ của node trong thời gian thực. Kể từ khi chuyển các màn hình giám sát hệ thống chính sang đây, đội ngũ của tôi có thể nắm bắt ngay lập tức tình trạng hệ thống mà không tốn nhiều công sức tư duy.

Thiết lập Homepage: Cách tiếp cận chuyên nghiệp trong 5 phút

Tôi luôn triển khai Homepage thông qua Docker Compose. Phương pháp này giữ cho bản cài đặt có tính di động cao và đảm bảo cấu hình được tách biệt hoàn toàn khỏi logic ứng dụng. Nếu tôi chuyển sang một server mới, tôi chỉ cần di chuyển thư mục config và mọi thứ sẽ hoạt động trở lại trong vài giây.

Bước 1: Cấu hình Docker Compose

Tạo một thư mục riêng cho dashboard của bạn. Tôi khuyên bạn nên ánh xạ múi giờ địa phương để đảm bảo các log nội bộ và widget thời tiết hoạt động chính xác.

version: "3.3"
services:
  homepage:
    image: ghcr.io/gethomepage/homepage:latest
    container_name: homepage
    ports:
      - 3000:3000
    volumes:
      - ./config:/app/config
      - /var/run/docker.sock:/var/run/docker.sock # Để theo dõi trạng thái container thời gian thực
    environment:
      - TZ=America/New_York
    restart: unless-stopped

Bước 2: Logic của việc cấu hình

Homepage tránh được cái bẫy “file cấu hình khổng lồ” bằng cách chia nhỏ các cài đặt thành nhiều file YAML khác nhau. Điều này giúp thiết lập của bạn luôn ngăn nắp khi hệ thống mở rộng. Bạn sẽ chủ yếu làm việc với bốn file sau:

  1. settings.yaml: Định nghĩa tiêu đề giao diện (UI), bố cục và chủ đề (theme).
  2. services.yaml: File cốt lõi nơi đặt các ứng dụng và tích hợp API.
  3. widgets.yaml: Thông tin chung như thời tiết, các chỉ số CPU và RAM.
  4. bookmarks.yaml: Các liên kết đơn giản cho các trang web không cần kiểm tra trạng thái.

Bước 3: Kết nối các dịch vụ với dữ liệu thời gian thực

Đây là lúc dashboard thực sự sống động. Thay vì một URL cơ bản, chúng ta thêm một khối widget. Dưới đây là một đoạn cấu hình để giám sát một instance Pi-hole và một node Proxmox cùng lúc.

- Hạ tầng:
    - Pi-hole:
        icon: pi-hole.png
        href: http://10.0.0.5/admin
        description: Chặn quảng cáo
        widget:
          type: pihole
          url: http://10.0.0.5
          key: NHẬP_TOKEN_API_CỦA_BẠN

    - Proxmox:
        icon: proxmox.png
        href: https://10.0.0.10:8006
        widget:
          type: proxmox
          url: https://10.0.0.10:8006
          username: root@pam
          password: NHẬP_TOKEN_HOẶC_MẬT_KHẨU
          node: pve-01

Giám sát mức độ chuyên nghiệp: Tích hợp Docker và Glances

Tôi dựa vào việc xem trạng thái container trực tiếp trên dashboard. Bằng cách gắn mount /var/run/docker.sock, Homepage sẽ tự động đánh dấu các container là ‘Running’ (Đang chạy) hoặc ‘Exited’ (Đã thoát). Đối với các máy từ xa, tôi cài đặt Glances. Nó cho phép Homepage lấy dữ liệu sử dụng CPU, nhiệt độ và RAM qua mạng với độ trễ gần như bằng không.

Thêm nội dung này vào widgets.yaml của bạn để xem các chỉ số quan trọng của server trong nháy mắt:

- resources:
    cpu: true
    mem: true
    disk: /
- glances:
    url: http://10.0.0.20:61208
    version: 3
    metric: cpu

Bài học về sự ổn định và lời kết

Sau khi chạy Homepage hơn một năm, độ tin cậy của nó là điều khiến tôi ấn tượng nhất. Nó xử lý các trường hợp quá hạn thời gian (timeout) rất mượt mà. Nếu một dịch vụ ngoại tuyến, widget cụ thể đó sẽ hiển thị lỗi, nhưng phần còn lại của dashboard vẫn hoạt động nhanh nhạy. Nó không bị treo như nhiều giải pháp khác.

Một mẹo thực tế: hãy sắp xếp services.yaml của bạn thành các nhóm logic như ‘Media’, ‘Hệ thống mạng lõi’ (Core Network) hoặc ‘Dev’. Điều này giúp giao diện di động dễ điều hướng hơn nhiều trên màn hình điện thoại. Ngoài ra, đừng lạm dụng việc tích hợp Docker. Chỉ nên ánh xạ các container ‘quan trọng’ thực sự cần giám sát 24/7.

Chuyển sang một dashboard ưu tiên API đã thay đổi cách tôi quản lý lab của mình. Tôi không còn phải đoán xem liệu bản sao lưu đã hoàn thành hay DNS có đang gặp trục trặc hay không. Tôi chỉ cần nhìn vào màn hình phụ của mình. Nếu bạn vẫn đang phải click qua một thư mục bookmark, đã đến lúc nâng cấp rồi đấy. Homepage chính là giao diện chuyên nghiệp mà HomeLab của bạn xứng đáng có được.

Share: