Chia sẻ đam mê công nghệ
Cập nhật

Docker không khó: phần khó của homelab là vận hành sau khi cài

Chạy Docker Compose chỉ đưa ứng dụng lên máy chủ. DNS, mạng nội bộ, truy cập từ xa và bản sao lưu mới quyết định dịch vụ gia đình có ổn định, an toàn sau nhiều tháng hay không.

Thiết bị Synology DiskStation dùng làm máy chủ lưu trữ tại nhà
Máy chủ lưu trữ tại nhà là một phần của homelab; để dịch vụ Docker đáng tin cậy, dữ liệu trên đó cần có đường sao lưu riêng.

Tóm tắt nhanh

  • Docker Compose giúp khởi chạy dịch vụ, nhưng không tự giải quyết DNS, chứng chỉ HTTPS, truy cập từ xa hay khôi phục dữ liệu.
  • Mạng bridge mặc định không cho các container gọi nhau bằng tên; mạng do người dùng tạo có DNS nội bộ để làm việc đó.
  • Volume trên cùng máy chủ là dữ liệu đang hoạt động, không phải bản sao lưu nếu ổ đĩa hỏng hoặc dữ liệu bị lỗi.
  • Với homelab tại nhà, nên xây mạng và đường khôi phục trước khi tăng số dịch vụ.

Một lệnh docker compose up -d có thể khiến dịch vụ mới xuất hiện trong vài phút, nhưng việc giữ nó truy cập được và khôi phục được khi có sự cố mới là phần tốn công. Docker đóng gói và chạy ứng dụng; người dựng máy chủ vẫn phải lo mạng, chứng chỉ, cập nhật và dữ liệu.

Ứng dụng chạy được chưa có nghĩa là hệ thống đã vận hành ổn

Khi mới dựng homelab, địa chỉ IP cùng cổng như :8080 hay :9000 thường đủ để mở giao diện. Cách này nhanh, nhưng khó nhớ và dễ gãy khi địa chỉ trong mạng nhà thay đổi. Nếu mở thẳng cổng dịch vụ ra Internet, máy chủ còn bị phơi ra trước các lượt dò cổng tự động; nếu chỉ dùng HTTP, thông tin đăng nhập không được mã hóa trên đường truyền.

Đây là khoảng cách giữa triển khai và vận hành: lệnh khởi chạy xử lý lần đầu, còn các quyết định về tên miền nội bộ, định tuyến, chứng chỉ, quyền truy cập và sao lưu phải được duy trì về sau. Một dashboard xanh hôm nay không cho biết dịch vụ sẽ hoạt động thế nào sau lần đổi IP, nâng cấp cơ sở dữ liệu hay hỏng ổ lưu trữ.

Mạng Docker cần được thiết kế để các dịch vụ tìm thấy nhau

Không nên mặc định rằng một reverse proxy có thể gọi mọi container bằng tên. Tài liệu Docker ghi rõ các container trên bridge mặc định có thể liên lạc bằng địa chỉ IP nhưng không phân giải tên container cho nhau. Với mạng do người dùng định nghĩa, các container có thể kết nối bằng tên nhờ DNS nhúng của Docker.

Khác biệt này quan trọng khi đặt Caddy hoặc một reverse proxy khác phía trước các ứng dụng: proxy cần một đường mạng tới dịch vụ đích, không chỉ một cấu hình tên miền đẹp. Tạo mạng riêng cho proxy và các ứng dụng cần xuất bản giúp mô hình kết nối rõ ràng hơn; những dịch vụ không cần nói chuyện với nhau có thể được tách khỏi mạng đó.

Docker cũng không tự công khai mọi cổng container ra Internet. Trên bridge, cổng có thể truy cập từ máy chủ và các container cùng mạng; muốn đưa cổng ra ngoài cần cấu hình publish. Vì thế, trước khi thêm quy tắc trên router, cần xác định chính xác cổng nào thực sự phải được công khai và thiết bị nào có thể truy cập nó.

DNS nội bộ và HTTPS giảm sự phụ thuộc vào địa chỉ cổng

Trang chủ Tailscale hiển thị trên màn hình máy tính
Truy cập homelab từ xa qua mạng riêng giúp tránh phơi trực tiếp các cổng quản trị ra Internet. Ảnh: XDA Developers / Tailscale

DNS nội bộ giúp người trong nhà mở dịch vụ bằng tên dễ nhớ, thay vì phải lưu địa chỉ IP và số cổng cho từng ứng dụng. Có thể dùng máy chủ DNS gia đình như Pi-hole, AdGuard Home hoặc Unbound để trỏ tên nội bộ về reverse proxy; proxy sau đó chuyển yêu cầu tới đúng dịch vụ.

Reverse proxy còn gom cấu hình HTTPS vào một điểm quản lý. Các công cụ như Caddy có thể tự động lấy và gia hạn chứng chỉ trong cấu hình phù hợp, nhưng HTTPS không tự biến một dịch vụ thành an toàn: quyền truy cập, cập nhật và việc giới hạn dịch vụ nào được đưa ra ngoài vẫn cần được tính riêng. Đặc biệt, tên miền chỉ dùng trong mạng nội bộ có cách cấp chứng chỉ khác với tên miền công khai, nên không nên mặc định mọi hướng dẫn ACME áp dụng nguyên xi cho mọi cấu hình gia đình.

Với người dùng Việt Nam, IP WAN động hoặc kết nối sau CGNAT có thể khiến chuyển tiếp cổng trên modem không dùng được như mong muốn. Một mạng riêng ảo dạng mesh như Tailscale hoặc WireGuard có thể là lựa chọn để truy cập thiết bị từ xa mà không mở trực tiếp giao diện quản trị ra Internet; cách triển khai cụ thể phụ thuộc modem, nhà mạng và thiết bị đầu cuối. Dù chọn phương án nào, hãy bật xác thực phù hợp và chỉ cấp quyền cho những thiết bị cần dùng.

Volume không thay thế được bản sao lưu

Thiết bị Synology NAS đặt trên kệ trong nhà
Thiết bị NAS đặt trong nhà vẫn cần một bản sao lưu độc lập ở nơi khác để dữ liệu không phụ thuộc vào một ổ đĩa. Ảnh: XDA Developers

Gắn volume hoặc bind mount vào SSD giúp dữ liệu tồn tại qua lần tạo lại container, nhưng dữ liệu vẫn nằm trên máy chủ đó. Nếu ổ đĩa hỏng, máy bị mất hoặc một thao tác xóa làm hỏng thư mục, volume không có bản sao độc lập để phục hồi. Cụm từ “đã lưu vào volume” vì thế không đồng nghĩa với “đã sao lưu”.

Thiết bị Synology DS925+ NAS đặt trên kệ
Một NAS gia đình minh họa lớp lưu trữ vật lý nằm dưới các dịch vụ tự host. Ảnh: XDA Developers

Quy tắc 3-2-1 thường được dùng làm khung lập kế hoạch: giữ nhiều bản sao, trên hơn một loại phương tiện lưu trữ và có ít nhất một bản ở nơi khác. Với ứng dụng có cơ sở dữ liệu, cần tính cả bản dump nhất quán hoặc snapshot phù hợp, mã hóa bản sao lưu và kiểm tra khả năng khôi phục. Công cụ như Restic, Borg hoặc Kopia có thể hỗ trợ tự động hóa, nhưng lịch chạy và chính sách giữ phiên bản phải khớp với dung lượng và mức mất dữ liệu chấp nhận được.

Mặt trước Synology DS925+ NAS với máy tính mini ở phía trên
Mặt trước NAS cho thấy phần cứng lưu trữ là nền tảng của dịch vụ, nhưng không thay thế bản backup ngoài máy. Ảnh: XDA Developers

Bản sao chưa từng thử khôi phục chỉ là giả định. Hãy thử phục hồi một dịch vụ hoặc cơ sở dữ liệu vào môi trường riêng trước khi cần đến nó; nếu bản sao lỗi định dạng hoặc thiếu khóa mã hóa, lịch backup vẫn chạy mà dữ liệu thực tế không cứu được.

NAS Synology hai khay màu trắng đặt trên bàn gỗ
NAS hai khay là một lựa chọn lưu trữ tại nhà, song dữ liệu vẫn cần bản sao tách biệt để phòng hỏng hóc hoặc xóa nhầm. Ảnh: XDA Developers

Cập nhật có kiểm soát giúp tránh biến một lần nâng cấp thành sự cố

Dùng thẻ :latest khiến phiên bản image có thể đổi giữa các lần kéo xuống, làm việc tìm nguyên nhân sau khi cập nhật khó hơn. Ghim phiên bản đã chọn giúp biết rõ mình đang triển khai gì và dễ quay lại bản trước hơn, dù vẫn cần theo dõi các bản vá bảo mật thay vì khóa phiên bản mãi mãi.

Trước khi nâng cấp dịch vụ lưu dữ liệu, nên có bản sao lưu phù hợp và đọc ghi chú thay đổi của ứng dụng, nhất là khi phiên bản mới có thể đổi schema cơ sở dữ liệu. Quy trình gọn cho máy chủ gia đình có thể là: chụp hoặc dump dữ liệu, cập nhật một dịch vụ, kiểm tra đăng nhập và chức năng chính, rồi mới tiếp tục với dịch vụ khác. Như vậy, lỗi được khoanh vùng thay vì xuất hiện đồng thời ở nhiều container.

Nên hoàn thiện đường vận hành trước khi cài thêm dịch vụ

Homelab không cần bắt đầu bằng một cụm máy phức tạp. Một mạng Docker dễ hiểu, tên miền nội bộ, reverse proxy được giới hạn đúng nhu cầu, cách truy cập từ xa có xác thực và bản sao lưu đã thử phục hồi thường hữu ích hơn việc chạy thêm nhiều dashboard.

Thứ tự cũng có ý nghĩa: xác định mạng và luồng truy cập trước, dựng proxy cùng DNS, chọn cách truy cập từ xa an toàn, rồi thiết lập backup và kiểm tra phục hồi. Khi các lớp này đã rõ, thêm ứng dụng mới chủ yếu là cấu hình dịch vụ; nếu bỏ qua chúng, mỗi container lại kéo theo một địa chỉ, một cổng và một điểm có thể hỏng mà không có đường quay lại.

Nguồn tham khảo: Docker Documentation — Networking overview; XDA Developers — Docker isn’t the hard part of self-hosting

Bài viết mới nhất