- Sau nhiều năm thử nghiệm nhiều cách tiếp cận self-hosting khác nhau, tác giả chia sẻ kinh nghiệm xây dựng thành công một môi trường tùy chỉnh phù hợp với mình
- Mục tiêu chính là kiểm soát dữ liệu cá nhân và duy trì hạ tầng đáng tin cậy, vì vậy đã kết hợp nhiều công nghệ cốt lõi như NixOS, ZFS, Tailscale, Authelia
- Đồng thời cũng tăng cường khả năng tiếp cận bằng cách cân nhắc cả trải nghiệm sử dụng cho gia đình và người quen, như SSO và trang bắt đầu riêng
- Bài viết tổng hợp chi tiết các vấn đề gặp phải khi vận hành thực tế và cách giải quyết cụ thể (ví dụ: proxy công khai cho dịch vụ riêng tư, môi trường VPN hỗn hợp, tích hợp xác thực)
- Trong tương lai, tác giả dự định tiếp tục cải thiện như hạ tầng sao lưu và tăng cường bảo mật, đồng thời để lại kinh nghiệm và tài liệu tham khảo
Giới thiệu và động lực
- Sau vài năm thử nhiều hình thức self-hosting, tác giả đã xây dựng được một môi trường "đủ tốt" phù hợp với nhu cầu của mình
- Tác giả đã tham khảo nhiều tài liệu mã nguồn mở và kinh nghiệm của người khác, rồi chia sẻ lại quá trình này để giúp ích cho các lập trình viên khác
Mục tiêu
- Theo đuổi việc tăng cường quyền riêng tư và giảm thiểu rủi ro từ việc dịch vụ phụ thuộc thay đổi hoặc ngừng hoạt động, bằng cách trực tiếp kiểm soát dữ liệu cá nhân và các dịch vụ liên quan
- Tập trung xây dựng một môi trường dịch vụ đáng tin cậy để mang lại quyền kiểm soát đó cho cả gia đình và người quen
Yêu cầu
-
Yêu cầu bắt buộc
- Hạn chế tối đa việc phơi dịch vụ ra Internet công cộng để giảm rủi ro sự cố bảo mật
- Giảm thiểu downtime của hạ tầng cốt lõi do lỗi thao tác (tránh phụ thuộc vòng tròn và đảm bảo dễ rollback cấu hình)
- Tự sở hữu các thành phần cốt lõi như xác thực, mạng, tên miền và ưu tiên mã nguồn mở
- Chú trọng tính dễ dùng từ góc nhìn của gia đình và người quen (đăng nhập SSO nhất quán, cần ít bảo trì)
- Tích cực áp dụng cấu hình khai báo bằng tệp cấu hình (dễ quản lý phiên bản, sao lưu/khôi phục, đồng thời thuận tiện tham khảo và tái sử dụng cấu hình của người khác)
- Cập nhật phải dễ và an toàn để có thể quản lý định kỳ
-
Yêu cầu không ưu tiên
- Không cần mức độ mô-đun hóa hoặc gọn gàng cực đoan (ưu tiên tính thực dụng)
- Không bắt buộc mọi thứ đều là mã nguồn mở, nhưng nếu có thể thì ưu tiên sử dụng
- Không theo đuổi tính sẵn sàng cao (HA), chấp nhận downtime để đổi lấy cấu trúc đơn giản
Lựa chọn công nghệ
-
NixOS
- Một bản phân phối Linux quản lý toàn bộ cấu hình hệ điều hành theo kiểu khai báo bằng ngôn ngữ Nix và trình quản lý gói
- Cấu hình được mã hóa thành code nên có thể quản lý phiên bản và rollback có hệ thống
- Hỗ trợ nhiều gói phần mềm và tích hợp với Docker/PODMAN
- Tích lũy kinh nghiệm bằng cách tham khảo cấu hình Nix của các lập trình viên khác
-
ZFS
- Hệ thống tệp hiệu năng cao với khả năng bảo vệ dữ liệu rất tốt như snapshot và rollback
- Cấu hình 4 HDD 10TB theo RAIDZ2 (chịu được lỗi đồng thời của 2 đĩa), dùng SSD 256GB để cache
- Tách dataset file và media, quản lý bằng các mount NFS theo từng mục đích
- Xây dựng kiến trúc lưu trữ chính đơn giản nhưng đáng tin cậy
-
Tailscale & headscale
- Tailscale: Mesh VPN dễ tiếp cận, chỉ cần cài client là có thể truy cập mạng nội bộ mà không cần phơi ra Internet công cộng
- Headscale: backend Tailscale mã nguồn mở có thể tự host (loại bỏ rủi ro do thay đổi chính sách công ty)
- Giúp tăng cường độ an toàn mạng, nhưng yêu cầu cài client trên thiết bị người dùng
- Về mặt usability, việc phải cài client trên từng thiết bị là một rào cản nhất định
-
Authelia & LLDAP
- Authelia: giải pháp SSO, xác thực và phân quyền dựa trên OpenID Connect, có thể tích hợp với proxy nginx
- LLDAP: LDAP gọn nhẹ, dùng để quản lý người dùng/nhóm cho Authelia và làm kênh xác thực dự phòng
- Hoạt động tốt với tài nguyên tối thiểu, nhưng cấu hình tương đối khó và có đường cong học tập trong việc tích hợp với từng dịch vụ
Thiết kế cấu trúc
-
Kiến trúc
- Mỗi máy chủ được đặt tên theo các hành tinh trong Star Wars
- Điểm vào (public server) là "taris", cung cấp các dịch vụ thiết yếu như Authelia, headscale, blog
- headscale, Authelia, LLDAP cần cho phép truy cập từ bên ngoài nên được vận hành công khai trong phạm vi hạn chế
- Các dịch vụ riêng tư (Foundry VTT, giám sát, v.v.) được proxy qua NGINX để chỉ phơi ra một cách chọn lọc
-
Máy chủ riêng
- Trên máy chủ chính "kuat", TrueNAS quản lý VM NixOS và pool lưu trữ ZFS
- Tách phạm vi snapshot/backup thành "files" (dữ liệu không thể khôi phục) và "media" (dữ liệu có thể khôi phục nếu muốn)
- Các dịch vụ chính chạy trên VM "bespin" với NixOS, đồng thời có một VM thử nghiệm riêng là "alderaan"
-
Dịch vụ khác
- Các thiết bị mang tính mission-critical được cấu hình như appliance một mục đích duy nhất (ví dụ: smart home dùng riêng Home Assistant OS)
- Máy chủ Matrix và client Element sử dụng Ansible Playbook chính thức
- Email và quản lý mật khẩu được thuê ngoài sang ProtonMail và Bitwarden để ngăn phụ thuộc vòng tròn
Các vấn đề riêng lẻ và cách giải quyết
-
Trang bắt đầu dịch vụ
- Một dashboard đơn giản dựa trên Flame, giúp cải thiện khả năng truy cập dịch vụ theo từng người dùng
- Nhẹ, đẹp về mặt thị giác và đủ thực dụng để vận hành trước khi chuyển sang dịch vụ thay thế
-
Dùng đồng thời Tailscale và VPN khác
- Một số hệ điều hành (đặc biệt là Android, Windows) không thể chạy đồng thời nhiều VPN
- Kết hợp tính năng exit node của Tailscale với Gluetun (VPN client dạng container) để chuyển hướng qua VPN bên ngoài như ProtonVPN
- Tuy nhiên có tác dụng phụ như tăng tiêu hao pin và đôi lúc giảm tốc độ
-
Lưu ý về xác thực (Authentification)
- Các giao thức xác thực chính của dịch vụ self-hosting: OIDC (ưu tiên), OAuth, LDAP
- Cần cấu hình riêng cho từng dịch vụ và cho Authelia
- Tài khoản quản trị phải luôn được duy trì tách biệt với liên kết Authelia/LLDAP để đảm bảo có đường khôi phục khi xảy ra sự cố xác thực
- Với các dịch vụ không hỗ trợ OIDC, có thể triển khai kiểm soát truy cập bằng cách tích hợp proxy giữa NGINX và Authelia
- OIDC của Authelia và kiểm soát truy cập qua NGINX Proxy cần được cấu hình riêng biệt
-
DNS và cấp SSL
- Dịch vụ công khai được vận hành theo cách thông thường (tên miền → IP công cộng)
- Dịch vụ nội bộ dùng subdomain "internal" và IP Tailscale để chặn lộ ra bên ngoài
- Chứng chỉ SSL sử dụng hỗ trợ Let's Encrypt tích hợp sẵn của NixOS (dịch vụ công khai dùng HTTP-01, dịch vụ nội bộ dùng DNS-01)
-
Lưu ý khi cài NixOS trên VPS
- Nhiều VPS không cung cấp sẵn tùy chọn cài NixOS
- Nếu cần cài, nên tham khảo wiki cộng đồng để xác nhận lộ trình cài đặt được hỗ trợ
-
Mount dataset TrueNAS vào VM
- Firewall mặc định của TrueNAS chặn VM truy cập host
- Có thể triển khai mount dataset NFS theo hướng dẫn chính thức (tạo mạng Bridge)
-
Proxy công khai cho dịch vụ cá nhân
- Khi dùng headscale, có thể phơi dịch vụ riêng tư ra bên ngoài bằng
NGINX proxyPass
- Ngoài Tailscale Funnel chính thức, bài viết còn cung cấp ví dụ cấu hình và tài liệu tham khảo
Bước tiếp theo và bài toán còn lại
- Cần bổ sung máy chủ sao lưu chuyên dụng và hệ thống kiểm chứng khôi phục
- Có kế hoạch tận dụng tích cực kiểm soát truy cập của Tailscale/headscale
- Sẽ tiếp tục tăng cường bảo mật như truy cập SSH
- Đang cân nhắc triển khai các giải pháp mã hóa/cache DNS cục bộ như Pi-hole, AdGuard Home
- Cân nhắc mở rộng thêm các dịch vụ mới như Forgejo, Manyfold, RomM
Tài liệu tham khảo
2 bình luận
Tuyệt vời!
Ý kiến Hacker News
Nếu muốn để gia đình hay bạn bè có thể dùng dễ dàng, mục tiêu là cho mỗi người một tài khoản đăng nhập để truy cập nhiều dịch vụ dựa trên SSO (đăng nhập một lần); đây thực sự là phần khó nhất nhưng đồng thời cũng là phần hay nhất. Mã nguồn mở và Linux đúng là có một nghịch lý: chúng được dùng ở khắp nơi và bao phủ đủ mọi giao thức, nhưng khi xây dựng môi trường client thực tế, tức là kết nối con người với nhau và tự dựng các yếu tố kiểu groupware, thì mọi thứ lại phức tạp hơn. Bản thân quá trình tích hợp hữu cơ nhiều hệ thống và dựng cả hạ tầng directory đã là điều đáng kinh ngạc. Tôi từng không nghĩ sẽ có ngày tự vận hành FreeIPA hay dịch vụ directory tương thích Windows, nhưng gần đây cũng có cảm giác thế giới dựa trên OpenID đang thực sự bắt đầu ổn định vị trí của mình.
Cảm ơn vì sự đồng cảm. Đăng nhập đơn giản và khả năng truy cập là yêu cầu khó nhất trong dự án này, và tôi nghĩ đó chính là điểm quyết định việc mọi người có thực sự dùng hay không. Mã nguồn mở đúng là ở khắp nơi, nhưng vấn đề bắt đầu nảy sinh ngay từ lúc người dùng phổ thông thử tự dùng một thứ gì đó. Tôi nghĩ nghịch lý này xuất phát từ việc mỗi dự án đều muốn tự đổi mới theo hướng riêng. Không có một chủ thể nào kéo tất cả đi theo một hướng, đó vừa là ưu điểm vừa là nhược điểm. Dù vậy, chỉ nhìn riêng môi trường self-hosting trong 5 năm gần đây thôi cũng thấy việc cài đặt và sử dụng đã trở nên dễ hơn rất nhiều.
Tôi thực sự đồng ý với nghịch lý này. Hôm qua tôi cũng đã đăng trên nền tảng xác thực của mình về việc FOSS khó tiếp cận với người không chuyên đến mức nào. Điều đó khiến tôi tự hỏi liệu một nền tảng kiểu system integrator, kết nối người dùng kỹ thuật với người dùng không kỹ thuật, có thể là lời giải hay không.
Thật ra không quá khó đâu. Nếu không quá bám vào một dịch vụ cụ thể mà lấy việc có hỗ trợ SSO làm tiêu chí ưu tiên hàng đầu để chọn dịch vụ, thì việc thiết lập lại dễ hơn tưởng tượng. Tôi lúc đầu cũng gần như không có kinh nghiệm, nhưng dùng caddy và authentik nên nhanh chóng hoàn thiện được hệ thống self-host. Ngoài ra, yunohost là một bản phân phối rất dễ dùng, tự cấu hình luôn cả SSO.
Tôi đang dùng authentik với xác thực SSO của Google, Discord và GitHub. Nó hoạt động đủ tốt cho tất cả mọi người.
Tôi biết việc tìm ra một hệ thống “vừa khít” cho riêng mình có thể mất thời gian, vì ai cũng có mục tiêu, sở thích và môi trường khác nhau. Tôi muốn viết một bài blog tổng hợp quá trình đi đến cấu hình cuối cùng của mình để chia sẻ: mục tiêu và yêu cầu, công nghệ dùng, thiết kế và quá trình giải quyết vấn đề. Cách làm của tôi sẽ không phù hợp với tất cả mọi người, nhưng hy vọng vẫn có thể là tài liệu tham khảo cho ai đó. Tôi cũng trưởng thành nhờ rất nhiều nội dung và phần mềm miễn phí, nên muốn tiếp tục chia sẻ lại sự giúp đỡ đó.
Tôi tò mò cảm nhận của bạn khi dùng Nix trong homelab. Tôi đã chơi khá hardcore với rack 25U, kubernetes cỡ nhỏ, ceph và Talos Linux hơn 7 năm rồi, nhưng càng ngày càng muốn đơn giản hóa, và cứ nghĩ đi nghĩ lại thì lạ là lại đi đến kết luận Nix và ZFS. Những khó khăn liên quan tôi đều rất quen thuộc. Nếu bạn cũng có gì muốn hỏi thì cứ hỏi.
Không biết bạn đã từng cân nhắc dùng coolify chưa. Tôi dùng coolify hơn một năm nay và khá thích việc nó tự động triển khai từ GitHub dễ như Heroku. https://coolify.io/
Không biết bạn có dùng cả tính năng mã hóa của ZFS không. Trước đây tôi từng chạy nhiều VM như FreeIPA trên Debian+ZFS, rồi để đơn giản hóa thì chuyển sang mô hình chỉ chạy thư viện mã hóa Seafile trên VPS và dùng ZFS send/receive để backup về server ở nhà. Server đó mỗi đêm sẽ bật lên, cập nhật và đồng bộ xong rồi lại ngủ. Để an toàn hơn, tôi đang cân nhắc có nên chạy cả ZFS trên desktop Linux (Fedora) với mã hóa toàn bộ hay không. Vì dataset chính đã được mã hóa, nên việc đồng bộ lên ổ ngoài hay cloud cũng đơn giản hơn hẳn. Đưa cả kho ảnh lên Seafile trên VPS thì chi phí khá nặng, nên tôi đang tìm giải pháp.
Bài chia sẻ trải nghiệm thiết lập và phần giải thích chi tiết rất hữu ích. Tôi chưa thể áp dụng ngay như bạn, nhưng đã quyết định cài flame làm dashboard để thử nghiệm cùng gia đình.
Rất vui được gặp bạn, công việc của bạn thật sự rất thú vị. Tôi cũng đang làm một dự án tương tự dựa trên NixOS. Mục tiêu của tôi là tạo ra một chiếc hộp nhỏ gần như cấu hình bằng 0, kiểu cảm giác Apple, nơi ai cũng chỉ cần cắm vào modem và đi qua một trình hướng dẫn cài đặt trên web là xong. Vẫn còn ở giai đoạn đầu nhưng ở nhà tôi đã dùng rồi. Nó đồng thời làm hybrid router (OPNSense/PFSense) và app server (Nextcloud, Synology, Yunohost, v.v.). Toàn bộ cấu hình cũng được quản lý chỉ bằng một trang Nix module. Dynamic DNS, chứng chỉ Let's encrypt, tự động gán subdomain cho từng app, chặn quảng cáo, headscale đều có sẵn. Giờ tôi còn đang làm cả SSO nữa và định lấy thêm vài ý tưởng từ bài viết của bạn. Chi tiết xem tại https://homefree.host
Thỉnh thoảng nhìn vào mạng gia đình, tôi lại tưởng tượng nếu mình chết đi thì sẽ gây phiền toái cho gia đình đến mức nào, hoặc người ngoài sẽ khó hiểu cấu hình của tôi ra sao. “Chơi homelab” thật ra lấp vào một nhu cầu khá giống thú chơi làm đường ray tàu mô hình của các “ông chú” thế hệ trước. Tôi không nói điều này theo nghĩa xấu, mà thấy rằng có những người có bản năng muốn sở hữu một thế giới thu nhỏ của riêng mình, nơi họ có thể kiểm soát tuyệt đối.
Tôi cũng nghĩ y hệt nên đã viết sẵn tài liệu cho trường hợp đó. Phần 1 là tiền bạc và vị trí giấy tờ quan trọng, phần 2 là hướng dẫn cách biến ngôi nhà trở nên “ngu hơn”. Ví dụ như bỏ công tắc thông minh và khôi phục công tắc truyền thống, chuyển các dịch vụ khóa như Bitwarden lên cloud, chi phí duy trì domain/mail, cách trả router về thiết bị mặc định của ISP, v.v. Vợ tôi vốn không mấy tích cực với smart home, nhưng khi biết lúc nào cũng có thể biến nó trở lại thành một “ngôi nhà ngốc” thì thấy yên tâm hơn. Thành thật mà nói tôi cũng không biết mọi thứ biến mất thì sẽ bất tiện đến đâu, nhưng ít ra vẫn có thể tự an ủi là lúc đó không còn là việc của mình nữa.
Tôi lưu ảnh gia đình trên home lab RAID1, rồi mỗi đêm backup bằng rsync sang ổ ngoài gắn với máy tính ở nhà bố mẹ. Làm vậy vừa có backup, vừa để nếu có chuyện gì thì gia đình vẫn dễ truy cập. Vợ tôi không quan tâm đến IT nên tôi chỉ nói đơn giản là “cắm USB vào là có hết”.
Tôi nghĩ có thể bỏ qua những kịch bản đe dọa vô ích như trộm đĩa vật lý. Thực tế hơn là lưu tất cả ảnh và tài liệu quan trọng mà không mã hóa, đồng thời để lại hướng dẫn thật dễ hiểu. Phần home automation mới là thứ đáng lo hơn.
Việc người vận hành homelab suy nghĩ trước về chuyện sẽ ra sao nếu mình vắng mặt lâu hoặc có sự cố là điều thực tế rất quan trọng. Tôi không cố tình chú ý đến việc này để làm mọi thứ dễ hơn, nhưng cảm giác là nên suy nghĩ thêm. Cốt lõi là phải để lại dữ liệu quan trọng và thông tin xác thực để truy cập vào chúng. Nên dùng các dịch vụ như Nextcloud để dữ liệu tự động đồng bộ sang thiết bị của gia đình, và cũng nên để gia đình, bạn bè trực tiếp chạm tay sử dụng thử các dịch vụ đó. Ở nhà tôi, tôi cũng cố làm cho Home Assistant trở thành một thứ gần giống thiết bị gia dụng thiết yếu mà vợ/chồng tôi có thể cùng dùng. Việc nó tồn tại dưới dạng phần cứng thực tế thay vì một VM riêng cũng giúp dễ quản lý hơn. Tất nhiên, tất cả những điều này phần lớn vẫn là hy vọng, nên điều quan trọng là cần cùng người thân lập kế hoạch chi tiết từ trước.
Tôi cũng đã suy nghĩ khá nhiều về chuyện này. Tôi mặc định rằng NAS và các dịch vụ Docker sẽ không thể tự boot ổn thỏa nếu không có tôi. Bản backup mật khẩu offsite thì thực ra có lẽ cũng không thể khôi phục nếu không có chuyên gia giúp. Vì vậy tôi dùng cron để mỗi ngày lưu snapshot tăng dần vào thư mục mới trên ổ cứng ngoài NTFS. Dung lượng dưới 50GB nên có thể nhân đôi với chi phí rẻ. Nếu có chuyện thì chỉ cần cắm ổ đó vào và copy thư mục là xong. Tôi cũng có bản sao toàn bộ thư viện Seafile trên từng laptop. Domain mail thì tôi đã trả trước 10 năm và đang host trên iCloud. Do ảnh gia đình đính kèm làm đầy dung lượng nên mail bị trả lại; tôi đang cân nhắc migadu cho vấn đề đó.
Tôi cũng rất hứng thú với lĩnh vực này. Xin cảnh báo là nếu tự kinh doanh/khởi nghiệp IT thì ham muốn homelab còn tăng mạnh hơn. Dần dần chỉ chạy container đơn giản sẽ không còn đủ nữa, bạn sẽ nộp đủ loại giấy tờ để lấy DBA và ASN hợp pháp, rồi thực sự tiến hóa thành ISP của riêng mình với cả dải IP/IPV6 riêng. Vấn đề ingress (truy cập từ bên ngoài) thì nhiều người giải bằng tailscale, nhưng đây thật sự là phần khó. Tôi nghĩ về mặt lý thuyết, kiến trúc dựa trên STUN/TURN, chỉ cache static file của toàn bộ server, còn truy cập động thì xác thực bằng magic link email tại login wall, cũng không hẳn quá rủi ro hay quá tốn kém. Khi dựng môi trường phát triển từ xa, lại có thêm cái cớ để đào sâu hơn vào những phần này. Link tham khảo: https://en.wikipedia.org/wiki/Traversal_Using_Relays_around_NAT, https://en.wikipedia.org/wiki/STUN
Gần đây tôi đang nghịch Immich, nhưng cứ phân vân liệu bên ngoài nhà chỉ nên truy cập qua tailscale hay nên dựng thêm reverse proxy trên VPS. Điều khiến tôi để tâm nhất là tìm một giải pháp monitoring/bảo mật thân thiện với người dùng để cho biết ai đang thử tấn công từ phía VPS.
Cấu hình của tôi đơn giản hơn nhiều
HTTP gửi mật khẩu dưới dạng plaintext, nên ít nhất cũng nên dùng chứng chỉ tự ký để an toàn hơn.
Tự xây hạ tầng hay dịch vụ bằng code thật sự là cách học tuyệt vời nhất. Điểm hay nữa là có thể khớp chính xác với nhu cầu riêng của mình.
Tôi muốn thử vận hành kiểu homelab này nhưng không có thời gian. Cuối tuần thì có thể cài đặt, nhưng không đủ dư dả để duy trì/cập nhật đều đặn, nên tôi cứ giao cho nhà cung cấp cloud và thôi không bận tâm nữa. Không biết những ai chỉ dùng cloud như tôi thì thường tiếp cận theo cách nào.
Hồi cấu hình trước đây của tôi cũng vậy, bảo trì không tử tế nên thành căng thẳng. Vì thế tôi mới thích NixOS và ZFS. Cả hai đều cho rollback rất dễ. Cập nhật xong nếu có vấn đề thì quay lại bản trước ngay, còn debug thì để lúc nào rảnh làm sau. Ngoài ra, nếu bạn thấy hài lòng với phương án cloud thì cũng hoàn toàn ổn. Tự dựng hệ thống đúng là tốn thời gian, nên ai cũng phải tự cân đối chi phí và giá trị.
Tôi đang chạy khoảng 12 dịch vụ self-hosted, mà thường việc nâng cấp còn chưa tới 1 phút mỗi tháng. Mỗi dịch vụ có một thư mục riêng, bên trong là docker-compose stack và thư mục dữ liệu. Cập nhật chỉ cần
docker compose pullrồiup -dlà xong. Thỉnh thoảng hiếm hoi mới có bản nâng cấp đòi đổi cấu hình, còn đa số xong trong vài phút. Không cần VM, và theo tôi self-host hoàn toàn bằng Docker Compose là cách đơn giản nhất.Chuyện này không chỉ là việc làm trong một ngày cuối tuần rồi thôi. Với tôi, nó bắt đầu từ việc cài Plex thử một lần, rồi một năm sau đã thành một cấu trúc phức tạp với Proxmox và đủ loại tích hợp home automation. Nói đùa mà thật, nếu muốn cấu hình tối thiểu thì nên bắt đầu bằng docker compose vì nó dễ quản lý và nâng cấp cũng đơn giản.
Tôi nghi ngờ liệu có thực sự cần đưa cả SSO vào không. Nếu gia đình/bạn bè dùng wireguard client (kể cả trên iOS cũng rất đơn giản) thì chỉ cần bật một nút là có thể vào mạng ở nhà, và không cần SSO riêng vẫn dùng được toàn bộ dịch vụ nội bộ. Với mạng gia đình quy mô nhỏ, lợi ích dường như vượt xa nhược điểm.
Các dịch vụ chúng tôi dùng như Nextcloud hay Mealie vốn mặc định đã có tài khoản cho từng người dùng. Nhờ SSO mà có thể truy cập mọi dịch vụ bằng cùng một tài khoản, đồng thời tôi cũng không còn phải quản lý cả mật khẩu nữa. Thiết lập có phức tạp hơn một chút, nhưng vận hành lại dễ hơn, nên khả năng gia đình thực sự sử dụng cũng cao hơn.
Tôi đang self-host 20 ứng dụng và đã quá ngán việc quản lý xác thực riêng cho từng cái nên đang triển khai SSO. Khi muốn mở một phần ứng dụng cho gia đình dùng thì việc xử lý xác thực ở một nơi là ưu tiên số một. Tôi không nghĩ mình có thể đồng ý với cách làm nói ở trên.
Tôi tò mò vì sao lại nhất thiết dùng flame. Điều đó có nghĩa là kéo hàng chục đến hàng trăm phụ thuộc bên thứ ba như node, react, redux vào “vương quốc an ninh”, trong khi một trang khởi đầu thật ra chỉ cần một file HTML đơn giản liệt kê link là đủ, đúng không?
Tôi muốn thử self-host bằng NixOS nhưng vẫn chưa thực sự bắt đầu. Môi trường hiện tại của tôi được quản lý bằng vài VM và mỗi VM có một file docker compose, rồi ansible playbook chỉ việc copy file compose sang; OS thì dùng Fedora Server chậm hơn một bản phát hành và đến lúc hết hạn thì nâng cấp là xong. Vì trên Mac tôi cũng chạy nix-darwin nên hiểu được lợi ích của cấu hình Nix, nhưng vẫn chưa thấy hiệu quả hay tỷ lệ thời gian/công sức đủ thuyết phục để port toàn bộ môi trường sang Nix. Trừ khi LLM (AI cỡ lớn) có thể chép lại file cấu hình hộ, còn hiện tại tôi chưa có nhiều động lực để thử.
Tôi cũng thử NixOS và chỉ trong một tuần đã di chuyển cả home network lẫn hai server thật sang đó. Đã khoảng 3~4 tháng trôi qua và tôi hài lòng hơn kỳ vọng. Di chuyển server còn dễ hơn chuyển workstation. Gần đây tôi còn lấy NixOS ra nghịch với món đồ chơi Jetson Orin Nano. Nếu là thời Gentoo thì tôi không dám nghĩ tới chuyện đó. Điều khiến tôi khó chịu nhất ở Gentoo là thời gian compile vô lý trên máy cũ; ví dụ build GHC trên chiếc XPS 2019 có thể mất tới 6 tiếng.
Với tôi, điểm khác biệt lớn nhất của NixOS là rollback cực kỳ dễ khi có thứ gì đó bị hỏng. Dù ansible hay nền tảng dựa trên compose cũng có thể backup/phục hồi, nhưng bạn phải tự viết chính hệ thống đó. Dù sao, nếu bạn đã hài lòng với hệ thống hiện tại thì như vậy cũng tốt rồi.
Nếu bạn đã dùng IaC ở mức nào đó rồi, thì tôi không cảm thấy hiệu quả bổ sung mà NixOS mang lại lớn đến vậy.