Vấn đề: Khi 20 con VPS làm bạn ‘loạn não’
Cày cuốc Home Lab hơn nửa năm với hơn 20 con VPS chạy Ubuntu Server cho khách hàng, mình từng phát điên vì quên địa chỉ IP. Khi số lượng container Docker tăng vọt lên con số 30-40 (từ Portainer, Nginx Proxy Manager đến Plex, Grafana…), việc lục lại file Note để tìm URL thực sự là một cực hình.
Mình đã thử qua Heimdall, Dashy hay Organizr. Kết quả không mấy khả quan: cái thì quá nặng (ngốn tới 300-500MB RAM), cái thì giao diện lỗi thời, cái lại bắt click chuột cấu hình rất mất thời gian. Cuối cùng, mình dừng chân tại Homepage (gethomepage.dev). Đây là dashboard hiện đại, cấu hình hoàn toàn bằng file YAML – thứ mà dân kỹ thuật chúng ta luôn ưu tiên vì khả năng copy-paste cực nhanh.
Cái hay của Homepage là nó tích hợp sâu qua API với Docker và các công cụ giám sát như Glances. Bạn có thể theo dõi CPU, RAM của server hay xem container nào đang ‘sống’ hay ‘chết’ ngay trên một màn hình duy nhất mà không cần mở Terminal.
Cài đặt Homepage trên Ubuntu bằng Docker Compose
Cài đặt qua Docker là phương án tối ưu nhất. Cách này giúp bạn backup hoặc di chuyển sang server mới chỉ trong vòng 2 phút bằng việc copy thư mục cấu hình.
Bước 1: Tạo không gian lưu trữ
Đầu tiên, hãy tạo một thư mục để chứa toàn bộ linh hồn của dashboard. Mình thường để ngay trong thư mục home cho tiện:
mkdir -p ~/homepage/config
cd ~/homepage
Bước 2: Soạn thảo file Docker Compose
Dùng nano để tạo file chạy dịch vụ:
nano docker-compose.yml
Nội dung file như sau:
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 # Để Homepage đọc dữ liệu Docker
restart: unless-stopped
Lưu ý nhỏ: Việc mount /var/run/docker.sock giúp dashboard tự nhận diện trạng thái các container khác cùng server. Đừng quên dòng này nếu bạn muốn xem dashboard ‘nhảy’ số realtime.
Bước 3: Kích hoạt dashboard
Gõ lệnh sau để hệ thống tự tải image và khởi chạy:
docker compose up -d
Bây giờ, hãy mở trình duyệt và truy cập http://IP-Cua-Ban:3000. Một giao diện trống sẽ hiện ra, chờ bạn đổ dữ liệu vào.
Biến Homepage thành trung tâm điều khiển
Mọi thiết lập của Homepage nằm trong các file .yaml. Nếu chưa thấy file, bạn hãy tự tạo mới trong thư mục config.
1. Quản lý dịch vụ (services.yaml)
Đây là nơi liệt kê các app bạn đang chạy. Ví dụ mình thêm Portainer và Pi-hole để theo dõi:
- Quản lý Server:
- Portainer:
icon: portainer.png
href: http://192.168.1.10:9000/
description: Quản lý Docker
container: homepage
- Network:
- Pi-hole:
icon: pi-hole.png
href: http://192.168.1.10/admin
widget:
type: pihole
url: http://192.168.1.10
key: YOUR_API_KEY_HERE
Phần widget cực kỳ hữu ích. Nó sẽ lấy dữ liệu từ Pi-hole và hiển thị ngay số lượng quảng cáo đã chặn mà không cần bạn phải đăng nhập vào app đó.
2. Bookmark các trang hay dùng (bookmarks.yaml)
Dùng cho các link ngoài như GitHub hay Google Cloud. Cấu hình rất đơn giản:
- Công cụ:
- Github:
- abbr: GH
href: https://github.com/
- ChatGPT:
- abbr: AI
href: https://chat.openai.com/
3. Theo dõi sức khỏe hệ thống (widgets.yaml)
Để dashboard hiện thông số CPU, RAM hay Dung lượng đĩa cứng, bạn dùng file này:
- resources:
cpu: true
memory: true
disk: /
- datetime:
text_size: xl
format: { "timeStyle": "short", "dateStyle": "long" }
Kinh nghiệm thực tế và Bảo mật
Sau khi lưu file YAML, Homepage sẽ tự nhận diện thay đổi ngay lập tức. Bạn không cần khởi động lại container. Nếu giao diện không hiện, hãy dùng lệnh docker logs -f homepage để check lỗi cú pháp (thường là do thụt lề YAML sai).
Về vấn đề bảo mật, Homepage mặc định không có mật khẩu. Khi đưa dashboard này ra Internet qua Nginx Proxy Manager, mình luôn làm 2 bước:
- Bật Basic Auth trên Nginx để khóa cửa với người lạ.
- Dùng
settings.yamlđể đổi tiêu đề và chuyển sang tiếng Việt cho thân thiện.
Thực tế sử dụng cho thấy Homepage chỉ ‘cắn’ khoảng 50-80MB RAM. Nó giúp mình tiết kiệm ít nhất 15 phút mỗi ngày chỉ để tìm kiếm và gõ IP. Đây thực sự là ‘trang đáp’ hoàn hảo cho bất kỳ ai đang quản lý hệ thống Ubuntu hay Docker chuyên nghiệp.

