Hướng dẫn nhẹ nhàng về self-hosting
(knhash.in)- Vào năm 2024, khi cloud và các dịch vụ thuê bao đã trở nên phổ biến, self-hosting lấy phần mềm làm trung tâm — tự thiết lập hệ thống để học hỏi — là một thú vui đáng thử lại
- Self-hosting có thể là một cách phản kháng các dịch vụ độc quyền, nhưng vì tốn nhiều thời gian và chi phí tinh thần, niềm vui và sự khám phá mới là động lực quan trọng nhất
- Người mới có thể bắt đầu mà không cần máy chủ vật lý; trên shared hosting như Uberspace, có thể kết nối qua SSH và dùng môi trường 10GB lưu trữ, 1.5GB RAM
- Uberspace không dùng được Docker, nhưng có thể tham khảo Uberspace Labs và Awesome-Selfhosted để vận hành các dịch vụ như Actual Budget và Miniflux
- Khi kết nối tên miền cá nhân, có thể cấu hình subdomain cho từng dịch vụ, địa chỉ email tùy chỉnh và lưu trữ file công khai, giúp dễ trưng bày và duy trì thành quả self-hosting hơn
Cảm giác máy tính cá nhân trước thời cloud
- Trong thập niên 2000, phần mềm và game được phân phối bằng DVD, và máy tính cá nhân mang đậm tính chất là thiết bị tính toán do chính người dùng trực tiếp điều khiển
- Sang thập niên 2010, Chromebook và các dịch vụ cloud lan rộng, khiến nhiều phần mềm chuyển sang cách chạy trên máy tính của người khác
- Sau quảng cáo, thuê bao trở thành phương thức kiếm tiền trực tuyến chủ đạo, và xu hướng người dùng đánh đổi quyền kiểm soát để lấy sự tiện lợi ngày càng lớn
- Kết quả là một bộ phận thế hệ học khoa học máy tính có ít cơ hội hơn để khởi đầu như những người mê máy tính, và thái độ kiểu hacker thời kỳ đầu cũng đang yếu đi
Tiếp cận self-hosting như một thú vui
- Self-hosting có thể là hành động giành lại quyền kiểm soát đối với bản ngã số trong một môi trường bị độc quyền chi phối
- Nếu chỉ xét tính thực dụng thuần túy, giao việc hosting cho nơi khác có thể là lựa chọn tốt hơn
- Có thể giao việc quản lý độ ổn định, khả năng xử lý đồng thời, dự phòng và tính sẵn sàng cho nhà cung cấp dịch vụ
- Đổi lại việc tiết kiệm chi phí, thời gian và gánh nặng tinh thần có thể tăng lên
- Về mặt trí tuệ, nó giống một garage số nơi bạn liên tục tinh chỉnh hệ thống
- Sau một ngày làm việc, đó có thể trở thành thú vui được mày mò một hệ thống như món đồ chơi mình yêu thích
- Thay vì khắt khe tranh luận tiêu chuẩn “self-hosting thật sự”, điều quan trọng hơn là bắt đầu một cách vui vẻ, dù chỉ ở cấp độ phần mềm
Tạo môi trường đầu tiên bằng shared hosting
- Để bắt đầu self-hosting, trước hết cần có không gian để host
- Dịch vụ hosting được gợi ý là Uberspace
- Đây là kiểu hosting gần với tinh thần “chúng tôi đưa bạn tua vít, miễn đừng đốt cả tòa nhà, còn lại cứ vui vẻ mà làm”
- Thanh toán trả sau vào cuối tháng, nên tháng đầu gần như có thể dùng như bản dùng thử miễn phí
- Khi tạo tài khoản, bạn có thể kết nối SSH vào một máy tính nối Internet
- Môi trường được cung cấp gồm 10GB lưu trữ và 1.5GB RAM
- Chạy
lssẽ thấy một thư mục người dùng mới còn trống
Cách chọn phần mềm để cài đặt
- Khi tìm phần mềm dùng trên Uberspace, hai tài liệu sau đặc biệt hữu ích
- Uberspace Labs: hướng dẫn chuyên biệt về cách cài đặt nhiều phần mềm trên Uberspace
- Awesome-Selfhosted: danh sách rộng các phần mềm có thể self-host, phù hợp để tìm các dự án có cộng đồng nhất định
- Trên Uberspace không thể dùng Docker
- Do hạn chế bộ nhớ, khó chạy cả một bộ ảo hóa đầy đủ
- Điều này bất tiện với phần mềm lớn hoặc các cài đặt chỉ dành cho Docker, nhưng vẫn có cách обход như cài từ source hoặc lấy runtime cuối cùng của quá trình Docker hóa theo kiểu dùng image build
Ví dụ 1: Tự quản lý dữ liệu tài chính với Actual Budget
- Actual Budget là ứng dụng quản lý tài chính nhanh và tập trung vào quyền riêng tư
- Phù hợp với người dùng muốn theo dõi chi tiêu, tài sản ròng, mô hình tiêu dùng, v.v.
- Có thể vận hành theo cách không giao thông tin tài chính nhạy cảm cho dịch vụ khác, đồng thời truy cập từ bất cứ đâu qua trình duyệt
- Trọng tâm của phương pháp lập ngân sách là phương pháp Envelope Budgeting
- Hướng dẫn cài đặt trên Uberspace có tại guide_actual
- Trong phần báo cáo, bạn có thể cắt lát và phân tích dữ liệu tài chính
- Những khoản tưởng là mua sắm nhỏ cũng có thể trở nên lớn khi cộng lại trong một tháng
- Có thể rút ra insight như chi phí đi làm cao hơn dự kiến
Ví dụ 2: Lấy lại feed bằng Miniflux và RSS
- Miniflux là một trình đọc feed tối giản và có quan điểm rõ ràng
- Dùng RSS, bạn có thể xem cập nhật từ các báo, tạp chí và blog yêu thích ở một nơi
- Các kênh YouTube đã đăng ký cũng có thể được cấu hình như một timeline feed riêng không quảng cáo
- YouTube cung cấp RSS feed
- Trình phát YouTube nhúng không có quảng cáo
- Sau khi cài Miniflux trên Uberspace, bạn có thể thêm feed của các kênh YouTube yêu thích
- Nếu bật Fever API trong phần cài đặt, các client RSS đọc được Fever API có thể truy cập bộ tổng hợp RSS trên cloud
- Trong hệ sinh thái Apple, Unread của Golden Hill Software được khuyến nghị
- Cũng có thể để riêng danh mục feed cho tin tức và webcomic
Tạo một không gian để trưng bày bằng tên miền cá nhân
- Một trong những niềm vui của self-hosting là khoe những gì mình đã tạo ra
- Tên miền cá nhân đóng vai trò như không gian trực tuyến của riêng bạn
- Porkbun được khuyến nghị làm dịch vụ đăng ký tên miền
- Nếu có một tên miền như
awesauce.com, bạn có thể cấu hình nhiều thứ- Có thể kết nối các dịch vụ host trên Uberspace với các subdomain như
actual.awesauce.com,miniflux.awesauce.com - Nếu nhà cung cấp email hỗ trợ tên miền tùy chỉnh, có thể tạo địa chỉ như
contact@awesauce.com- Về sau dù đổi nhà cung cấp email thực tế, địa chỉ vẫn có thể được giữ nguyên
- Email dùng tên miền tùy chỉnh có thể mất phí
- Có thể kết nối subdomain hoặc đường dẫn URL với repository GitHub để cung cấp file công khai như CV tại
awesauce.com/files/resume.pdf
- Có thể kết nối các dịch vụ host trên Uberspace với các subdomain như
Những khám phá cố ý để lại cho bước tiếp theo
- Mục tiêu của bài viết này không phải là hướng dẫn từng bước chi tiết, mà là khơi gợi sự tò mò muốn tự tay mày mò
- Một bài tập để độc giả tự khám phá là cách gửi thông báo di động khi một sản phẩm cụ thể được nhập lại hàng hoặc khi website thay đổi
- Thảo luận liên quan trên Hacker News tiếp tục trong thread này
1 bình luận
Ý kiến trên Hacker News
Nhìn từ góc độ cũ, thật ngạc nhiên khi trả tiền cho shared hosting giờ lại được gọi là “self-hosting”. Không phải nói bản thân việc đó là xấu, nhưng 10 năm trước chắc chắn sẽ không ai gọi như vậy là self-hosting
Nó giống như ý nghĩa của “nấu từ đầu” đã thay đổi. Nếu là sách nấu ăn thế kỷ 19, phần nguyên liệu có thể ghi “1 con lợn” rồi bảo bạn tự giết mổ, nhưng giờ thì đương nhiên là mua các phần thịt lợn đặt trong khay xốp
Nhưng cũng có một thị trường lớn gồm những người có thể hưởng lợi từ self-hosting mà không cần hiểu mọi chi tiết. Ví dụ, nếu dùng dịch vụ được quản lý với tên miền riêng, bạn vẫn có được khá nhiều lợi ích như quyền sở hữu dữ liệu, phần mềm nguồn mở, và sự cạnh tranh giữa các nhà cung cấp. Vì vậy có vẻ cần một thuật ngữ rộng hơn, và gần đây tôi dùng cách gọi indie hosting
Ngoại lệ thường được chấp nhận là phần bảo vệ mạng. Vì nếu có thể thì không muốn để lộ địa chỉ IP nhà ra bên ngoài, nên nhiều người dùng Tailscale, Cloudflare Tunnel, hoặc VPS làm proxy
Nếu chừng đó vẫn chưa đủ, trong tủ đông nhà tôi còn có thịt lợn từ con lợn tự nuôi, tự làm thịt, và cả bacon tự ướp tại nhà. Câu “một linh hồn cũ sống trong thế giới mới” khá đúng với tôi
Dù bạn thuê phần cứng, tự lắp server, hay dùng máy ảo do nhà cung cấp cấp, khối lượng bảo trì cũng tương tự nhau. Nhưng nó vẫn khác với việc dùng Wix/Squarespace, Geocities hay các nền tảng mạng xã hội
Vì họ đã viết: “Vì vậy ở đây tôi sẽ viết một phần nhập môn nhẹ nhàng về self-hosting, dù nó không phải là ‘self-hosting thật sự’. Muốn kiện thì cứ kiện.” :)
Tôi thật sự rất thích self-hosting và trong vài tháng qua đã sa vào nó khá sâu. Hiện tôi đang vận hành vài dịch vụ cho công ty và homelab, triển khai lên Hetzner VPS bằng Ansible + file Docker Compose hoặc https://github.com/coollabsio/coolify/
Kho awesome-selfhosted cũng rất tốt để tìm dự án đem đi self-host, nhưng thiếu các tính năng tiện dụng, nên tôi đã tạo một thư mục ở https://selfhostedworld.com với một chút cải thiện về trải nghiệm người dùng. Có tìm kiếm, bộ lọc theo số sao/độ phổ biến/ngày tháng, và dark mode
Tôi muốn biết liệu dùng các công cụ hiện đại và máy ảo thì có tương đối an toàn không, hay vẫn phải liên tục để ý kiểu kiểm tra cập nhật phần mềm hằng tuần. Tôi đã muốn dựng server từ lâu, và giờ có một laptop dư nên đang nghĩ ít nhất cũng chạy NAS thử
https://ptah.sh
Về phần xác thực, tôi cũng đã làm một bản so sánh các OIDC server: https://github.com/lastlogin-net/obligator#comparison-is-the...
Có câu rằng “tiết kiệm được bao nhiêu tiền thì mất bấy nhiêu thời gian và tinh thần, nên xét thực dụng là dại”, và trong cộng đồng self-hosting, Kubernetes thường bị nhìn không mấy thiện cảm. Nhưng bản thân self-hosting vốn cũng có khía cạnh như vậy, nên đi tới cùng hẳn cũng không tệ
Tôi đang chạy NixOS trên 3 máy Dell R720XD, vận hành dưới dạng k3s multi-master. Phần lưu trữ dùng rook/ceph, với khoảng 12 ổ cứng đủ kích cỡ khác nhau. Trò “biểu diễn tiệc tùng” tôi thích nhất là đang stream video thì rút đại một ổ cứng nào đó khỏi cluster, và hệ thống chẳng hề bận tâm. Cắm lại thì mọi thứ quay về như chưa có gì xảy ra; dung lượng vẫn còn nhiều nên tôi vẫn đang tìm thêm những thứ hữu ích để tiếp tục host
Cá nhân tôi dù chỉ có 4 máy desktop nhỏ vẫn dùng Docker Swarm. Với phần cứng của bạn, riêng tiền điện chắc dễ lên tới 200 USD mỗi tháng. Docker Swarm đã cũ và không còn phổ biến, nhưng chỉ phức tạp hơn Docker nguyên bản một chút, và làm được mọi thứ cần thiết cho triển khai đa node và orchestration
Cách này cho phép hưởng lợi từ cấu hình NixOS trong khi vẫn chạy được các ứng dụng tùy ý có thể không có trong nixpkgs. Phần lưu trữ dùng ZFS trên hypervisor Proxmox, rồi expose cục bộ qua NFS
[1] https://github.com/aksiksi/compose2nix
Bài gốc đã chỉ ra rất đúng chỗ này: “Đã là năm 2024 rồi, giờ là lúc nhìn lại niềm vui căn bản của việc tự tay thiết lập hệ thống của mình.”
Self-hosting thật sự rất vui. Vì nó là sự pha trộn giữa học hỏi, thử thách và tính thực dụng. +1 cho Actual Budget và Changedetection.io. Nhưng -1 vì không đề cập đến threat modeling và bảo mật. Tác giả bài gốc dùng HTTPS nhưng lại mở website ra Internet công cộng. Người mới bắt đầu nên host chỉ trong LAN hoặc khóa thật chặt. Tuy nhiên với shared hosting thì việc này có thể khó nếu không có giới hạn IP hay tunneling, và tôi không biết uberspace có cung cấp những thứ đó không. Với người đã qua giai đoạn đầu, tôi khuyên dùng những thứ như Docker để chạy song song nhiều ứng dụng hơn. Phụ thuộc được đóng gói sẵn là tuyệt nhất. Nhân tiện tự quảng bá nhẹ cuốn sách của tôi, trong đó cũng nói về cách dùng Docker: https://selfhostbook.com
Tôi đồng ý với phe những người lâu năm khác
Nếu không phải phần cứng của chính bạn đang chạy trong không gian bạn sở hữu hoặc thuê, thì đó không phải là self-hosting. Hiện tôi dùng một hộp Micro-ITX nhỏ, nhưng trước đây từng có cả một rack server đúng nghĩa với server 6U, UPS và thiết bị mạng. Đó là chuyện trước khi tôi kết hôn
Tôi rất thích self-hosting. Tôi đã học được rất nhiều khi làm các dự án hobby nhỏ
Nếu ai tò mò về cấu hình của tôi thì: tôi mua rẻ một con Dell R630 đã qua sử dụng trên eBay. Cấu hình gồm SSD 1TB RAID 1, RAM 32GB, 32 core, và tôi đang vui vẻ chạy các app hobby nhỏ bằng Docker, virsh, minikube. Tôi đã học được cả ba. Tôi có đường cáp quang 1Gbps, và cứ mỗi phút một cron job kiểm tra xem IP có đổi không, rồi dùng Linode API để đổi DNS A record
RAM 1,5GB, đĩa 10GB á? VPS cloud cơ bản của Hetzner có 4GB RAM và 40GB đĩa với giá 4,51 euro
Về compute, họ nói “mỗi tháng miễn phí 3.000 OCPU-giờ đầu tiên và 18.000 GB-giờ để tạo các instance Ampere A1 Compute cho mỗi tenancy. Mức dùng miễn phí này được chia sẻ trên bare metal, máy ảo và container instance.” Về block storage thì kiểu như “hạn mức Free Tier của dịch vụ Block Volume là tổng cộng 200GB cho toàn bộ tenancy. Nếu có nhiều báo giá trong cùng một tenancy thì tổng cộng chỉ áp dụng 200GB.” Tức là coi như bạn có CPU ARM 4 core + RAM 24GB + 200GB dung lượng miễn phí
Spoiler một chút: bài này không nói về self-hosting mà là về shared hosting
Nhưng rồi nếu có ai đó thì thầm vào tai bạn K8S…
Khi tốt nghiệp khỏi guide này, bạn cũng nên ghé xem /r/homelab và /r/homedatacenter ;)