Khi bạn bắt đầu hành trình tự host (self-hosting), việc theo dõi mọi thứ ban đầu có vẻ không quá khó khăn. Thường thì bạn chỉ có một máy chủ duy nhất với vài dịch vụ, mọi thứ vẫn trong tầm kiểm soát. Tuy nhiên, khi hệ thống home lab của tôi ngày càng phát triển, tôi nhận thấy việc quản lý thủ công trở nên quá phức tạp và khó theo dõi. Tôi đã thử nghiệm một số công cụ tự host khác nhau với hy vọng duy trì được sự ngăn nắp, nhưng cuối cùng, tôi quyết định quay lại với Obsidian để tài liệu hóa và kiểm soát mọi thứ.
Obsidian không chỉ đơn thuần là một ứng dụng ghi chú thông thường, đó chính là lý do vì sao nó hoàn hảo cho dự án quản lý home lab này. Với hàng loạt plugin và công cụ mạnh mẽ, bạn có thể biến một bộ sưu tập ghi chú thành một cơ sở dữ liệu đầy đủ chức năng. Cá nhân tôi sử dụng kết hợp các plugin cốt lõi như Properties và Backlinks cùng với các plugin cộng đồng như Dataview, Excalidraw và Advanced Tables để theo dõi các máy chủ và dịch vụ tự host của mình, và nó đã hoạt động một cách hiệu quả tối đa theo nhu cầu của tôi.
Ban đầu, việc làm quen với Obsidian có thể hơi mất thời gian một chút, chủ yếu là do bạn sẽ phải nhập mọi thứ thủ công. Tuy nhiên, tôi sẽ hướng dẫn bạn chi tiết về cách thiết lập của tôi và cách tôi làm cho quá trình này trở nên dễ dàng hơn.
Thiết Lập Cấu Trúc Tài Liệu Chuyên Nghiệp Với Obsidian
Tận Dụng Mẫu (Templates) và Hệ Thống Thư Mục Khoa Học
Để minh họa, tôi đã sao chép một phần tài liệu thực tế từ home lab của mình để chỉ ra cách tôi tổ chức các thư mục. Tôi cấu trúc tài liệu home lab của mình như sau:
- 0 – Meta
- Templates
- 1 – Hardware
- Network devices
- Servers
- 2 – Services
- 3 – Automation
- 4 – Incidents
- 5 – Notes
- 6 – Design
Templates (Mẫu) là những gì bạn mong đợi; tôi có các mẫu riêng cho máy chủ, thiết bị mạng, sự cố và dịch vụ. Chúng định nghĩa một bố cục chung mà mọi ghi chú tiếp theo phải tuân theo, bao gồm các trường thuộc tính (property fields), tên, ngày cập nhật cuối cùng và nhiều hơn nữa. Trường thuộc tính của tôi, nằm ở đầu mỗi ghi chú, trông như thế này:
---
type: server
hostname: "{{title}}"
role:
os:
ip:
mac:
cpu:
ram_gb:
disk_tb:
rack_u:
location: "{{location}}"
production: false
last_update: ""
tags:
- server
---
Cấu trúc này cho phép tôi tạo các truy vấn Dataview để xem toàn bộ nội dung trong một thư mục, và tôi có thể sử dụng các trường thuộc tính để điền thông tin vào các bảng dữ liệu cho mỗi mục. Ví dụ, một truy vấn Dataview tôi sử dụng là:
TABLE WITHOUT ID file.link AS "File", hostname AS "Host", ip AS "IP", os AS "OS", last_update AS "Last updated"
from "1 - Hardware/Servers"
where type = "server"
sort hostname
Truy vấn trên sẽ tạo một bảng không có ID (vì nếu có, file.link
sẽ bị trùng lặp), và nó sẽ hiển thị tên host, IP, hệ điều hành (OS) và thời điểm cập nhật cuối cùng. Dữ liệu được lấy từ thư mục “1 – Hardware/Servers” nơi trường type
bằng “server”, sau đó được sắp xếp theo thứ tự bảng chữ cái của hostname.
Bạn không nhất thiết phải tổ chức chính xác như thế này, nhưng một cấu trúc tương tự sẽ giúp việc quản lý home lab dễ dàng hơn. Thư mục “Automation” chủ yếu chứa các tác vụ tự động hóa quan trọng nhất của Home Assistant, mặc dù trong vault thực tế của tôi còn có thông tin về việc cập nhật tự động danh sách IP OPNsense và sao lưu Backblaze B2.
Mẫu ghi chú sự cố trong tài liệu Home Lab của Obsidian
“Incidents” (Sự cố) có thể là một thuật ngữ hơi “đao to búa lớn” và phù hợp hơn với một nhà cung cấp dịch vụ thực tế, nhưng mục đích là để tôi có thể ghi lại các vấn đề. Ví dụ, nếu một máy chủ bị treo, tôi có thể lưu nhật ký và chi tiết về những gì đang xảy ra, và sau này, nếu máy chủ đó lại gặp sự cố, tôi có thể so sánh nó với một sự cố trước đó trên cùng máy chủ hoặc dịch vụ để xem chúng có giống nhau không. Tôi sử dụng thuộc tính “affected” (ảnh hưởng) để liên kết đến dịch vụ hoặc máy chủ bị ảnh hưởng, nhờ đó tôi thậm chí có thể tạo một truy vấn Dataview để hiển thị tất cả các sự cố ảnh hưởng đến một dịch vụ cụ thể. Tuy nhiên, home lab của tôi vẫn còn ở quy mô nhỏ nên điều này chưa thực sự cần thiết.
Tuy nhiên, một điều hữu ích là khả năng hiển thị tất cả các tác vụ đang chờ xử lý trên các máy chủ và dịch vụ của tôi. Tôi đã tạo một truy vấn Dataview cơ bản có thể kéo tất cả các mục chưa được đánh dấu hoàn thành trong mỗi ghi chú máy chủ và dịch vụ. Nó trông như thế này:
TABLE WITHOUT ID file.link AS "File", t.text AS "Task"
FROM "1 - Hardware" OR "2 - Services"
FLATTEN file.tasks AS t
WHERE !t.completed
SORT name, t.text
Truy vấn này sẽ hiển thị một bảng gồm tệp (ghi chú) và tác vụ cần hoàn thành, giúp tôi có thể nhấp vào tệp, truy cập chi tiết dịch vụ và dễ dàng xem những thông tin tôi cần để kết nối với nó. Tôi có thể thêm nhiều tác vụ ảnh hưởng đến các dịch vụ khác nhau, sau đó liệt kê tất cả chúng trong một bảng để thực hiện trên bảng điều khiển (dashboard) của mình. Các tác vụ này cũng được tạo động, vì vậy chúng sẽ được xóa hoặc bổ sung tùy thuộc vào những gì xảy ra trong ghi chú.
Cuối cùng, “Notes” (Ghi chú) và “Design” (Thiết kế) là những mô tả mang tính “meta” hơn mà tôi không thường xuyên sử dụng nhiều, nhưng rất tốt để có. “Notes” lưu trữ các ghi chú hàng ngày của tôi trong Obsidian khi tôi tạo chúng, và có thể đóng vai trò như một nhật ký thay đổi nếu tôi muốn. “Design” dùng để chứa các sơ đồ Excalidraw của mạng gia đình tôi.
Quy Trình Tạo Ghi Chú và Tận Dụng Mẫu (Templates)
Tối Ưu Hóa Quy Trình Với Chức Năng Templates
Để sử dụng mẫu của chúng ta, chúng ta sẽ tạo một ghi chú thông thường trong thư mục chính xác. Ví dụ, nếu chúng ta định tạo một máy chủ mới tên là PVE3, chúng ta sẽ tạo một mục mới trong thư mục Servers với tên “PVE3”. Sau đó, ở phía bên trái, chúng ta sẽ nhấp vào “Insert template” và chọn mẫu máy chủ của mình. Thao tác này sẽ điền phần còn lại của mẫu, thay thế các biến {{title}}
bằng tiêu đề thực tế của ghi chú. Tôi chưa định nghĩa {{ip}}
, {{location}}
hoặc {{mac}}
vì tôi đang trong quá trình chuyển sang Templater plugin, điều này sẽ cho phép tôi đưa ra các lời nhắc yêu cầu những chi tiết đó trước khi tạo ghi chú.
Cách chèn mẫu vào ghi chú Home Lab trong Obsidian
Obsidian là một công cụ cực kỳ mạnh mẽ, và tôi đã dần làm quen với nó trong khoảng nửa năm qua. Chức năng Templates đặc biệt hữu ích, và với chúng, tôi có thể tạo một hệ thống ghi chú tiêu chuẩn mà tất cả các ghi chú của tôi có thể được tạo ra từ đó. Không cần phải sao chép và dán thủ công, cũng không có nguy cơ lộn xộn trong cấu trúc ghi chú. Tất cả chúng đều được xử lý và trông giống nhau; chúng chỉ được điền các giá trị đúng. Đó cũng là lý do tại sao tôi muốn cấu hình plugin Templater, vì nó cho phép tôi chèn các đoạn mã để kiểm soát và tự động hóa nhiều hơn nữa.
Nếu bạn có một home lab phức tạp với vô số dịch vụ và công cụ tự host, tôi thực sự khuyên bạn nên dùng thử Obsidian để tài liệu hóa nó. Tôi đã thử các công cụ như NetBox và HomeBox, nhưng tôi thấy chúng quá phức tạp so với nhu cầu của mình. Obsidian thì đơn giản, tôi có thể đồng bộ hóa ghi chú của mình ở bất cứ đâu, và nó ở định dạng Markdown quen thuộc ngay bên cạnh các ghi chú khác của tôi. Hãy bắt đầu hành trình tổ chức home lab của bạn với Obsidian ngay hôm nay và chia sẻ trải nghiệm của bạn với chúng tôi!