Khi mới bắt đầu hành trình tự host (self-hosting), việc theo dõi mọi thứ không quá khó khăn. Bạn có thể chỉ sở hữu 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 ra mình đơn giản là không thể tự mình quản lý tất cả mọi thứ một cách hiệu quả nữa. Tôi đã thử nghiệm với một vài công cụ tự host khác nhau để cố gắng theo dõi toàn bộ, nhưng cuối cùng, tôi quay lại với Obsidian để quản lý mọi dữ liệu liên quan đến Home Lab của mình.
Obsidian không chỉ là một ứng dụng ghi chú thông thường, đó chính là lý do nó trở nên hoàn hảo cho dự án này. Với một kho tàng plugin và công cụ phong phú, bạn có thể biến một bộ sưu tập ghi chú đơn thuần thành một cơ sở dữ liệu hoàn chỉnh. Tôi 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 máy chủ và các dịch vụ tự host, và nó đã hoạt động một cách hoàn hảo đáp ứng mọi nhu cầu của tôi.
Ban đầu có thể hơi khó khăn một chút để bắt đầu, chủ yếu vì 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 cách tôi thiết lập hệ thống của mình và làm thế nào để tôi có thể quản lý nó dễ dàng hơn.
Giao diện Obsidian được sử dụng để quản lý các dự án tự host và Home Lab
Xây Dựng Cấu Trúc Tài Liệu Cho Home Lab
Tổ Chức Thư Mục và Template (Mẫu Ghi Chú)
Để minh họa, tôi đã sao chép một số tài liệu thực tế từ Home Lab của mình nhằm trình bày cách tôi tổ chức các thư mục. Cấu trúc tài liệu Home Lab của tôi được sắp xếp 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 dành cho máy chủ, thiết bị mạng, sự cố và dịch vụ. Những mẫu này định nghĩa một bố cục chung mà mọi ghi chú sau đó cần tuân theo, hoàn chỉnh với các trường thuộc tính (property fields), tên, ngày cập nhật gần nhất, và nhiều thông tin khác. 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 xét toàn bộ 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 về từng mục. Ví dụ, một truy vấn Dataview mà tôi sử dụng là:
```dataview
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
Đoạn mã trên sẽ tạo một bảng không có ID (vì nếu có, `file.link` sẽ trùng lặp), và nó sẽ hiển thị tên host, địa chỉ IP, hệ điều hành (OS) và thời điểm cập nhật gần nhất. Nó lấy dữ liệu từ thư mục "1 - Hardware/Servers" nơi `type` bằng "server", sau đó sắp xếp theo thứ tự bảng chữ cái dựa trên `hostname`.
Bạn không cần 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ý dễ dàng hơn. Phần "Automation" chủ yếu chứa các tự động hóa quan trọng nhất từ Home Assistant của tôi, mặc dù kho dữ liệu thực tế của tôi cũng bao gồm thông tin về việc cập nhật tự động danh sách IP của OPNsense và các bản sao lưu Backblaze B2.
{width=3840 height=2088}
"Incidents" (Sự cố) là một thuật ngữ hơi kịch tính và phù hợp hơn với một nhà cung cấp dịch vụ thực thụ, nhưng mục đích là để tôi tài liệu hóa 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à các chi tiết về những gì đang xảy ra. Trong tương lai, nếu máy chủ đó lại bị treo, 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 liệu đó có phải là nguyên nhân tương tự hay không. Tôi sử dụng một 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, để 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ụ. Tuy nhiên, quy mô Home Lab của tôi vẫn còn 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 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 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ị cho tôi một bảng gồm tệp và tác vụ cần hoàn thành, để tôi có thể nhấp vào tệp, đi tới chi tiết dịch vụ và dễ dàng xem các chi tiết cần thiết để kết nối với nó. Tôi có thể thêm một loạt các 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 để hành động trên bảng điều khiển của mình. Các tác vụ này cũng được tạo động, vì vậy chúng sẽ bị 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" mà tôi thường không sử dụng nhiều, nhưng rất tốt để có. "Notes" chứa các ghi chú hàng ngày của 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 bận tâm làm điều đó. Còn "Design" là nơi lưu trữ các sơ đồ Excalidraw về mạng Home Lab của tôi.
## Quy Trình Tạo Ghi Chú Mới Từ Template
### Làm việc với các Template có sẵn
{width=3840 height=2088}
Để sử dụng template 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 có tên PVE3, chúng ta sẽ tạo một mục mới trong thư mục **Servers** có tên "PVE3". Sau đó, ở bên trái, chúng ta sẽ nhấp vào "Insert template" và chọn template máy chủ của chúng ta. Thao tác này sẽ điền phần còn lại của template, 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, một plugin 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ú.
Obsidian là một công cụ vô cùng mạnh mẽ, và tôi đã dần làm chủ nó trong khoảng nửa năm qua. Templates đặc biệt hữu ích, và với chúng, tôi có thể tạo một quy ước ghi chú chuẩn mà tất cả các ghi chú của tôi đều có thể được tạo ra từ đó. Không cần 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ả đều được xử lý như nhau và trông như nhau; chúng chỉ được điền với các giá trị phù hợp. Đó 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 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 đối với nhu cầu của mình. Obsidian đơn giản, tôi có thể đồng bộ hóa ghi chú của mình ở bất cứ đâu, và nó nằm trong định dạng Markdown quen thuộc, ngay bên cạnh các ghi chú khác của tôi.
---
Chúng tôi hy vọng bài viết này đã cung cấp cho bạn những góc nhìn hữu ích về cách quản lý Home Lab một cách hiệu quả với Obsidian. Bạn có đang sử dụng Obsidian hay một công cụ nào khác để tổ chức hạ tầng công nghệ của mình không? Hãy chia sẻ kinh nghiệm của bạn trong phần bình luận bên dưới hoặc khám phá thêm các bài viết chuyên sâu khác về tối ưu hóa công nghệ cá nhân trên congnghemoi.net!