- FediMeteo là dịch vụ thông tin thời tiết toàn cầu khởi đầu từ một FreeBSD VPS giá 4 euro, tự động đăng thời tiết của từng thành phố thông qua Fediverse
- Mỗi quốc gia được tách riêng và quản lý bằng FreeBSD jail, sử dụng phần mềm snac và Open-Meteo API để lấy dữ liệu rồi đăng ở định dạng Markdown
- Hệ thống tự động cập nhật mỗi 6 giờ, hỗ trợ 39 jail, 2937 thành phố thuộc 38 quốc gia, và đã tăng lên hơn 7700 người theo dõi
- Dự án từng gặp nhiều vấn đề vận hành như rò rỉ API key, lỗi tính toán tọa độ, vấn đề dịch ngôn ngữ, nhưng đã được ổn định nhờ cải thiện bộ nhớ đệm và hỗ trợ đa ngôn ngữ
- Đây được đánh giá là một ví dụ cho thấy ngay cả với hạ tầng chi phí thấp vẫn có thể xây dựng dịch vụ toàn cầu hiệu quả và tự chủ
Tổng quan dự án
- FediMeteo là dịch vụ thông báo thời tiết tự động dựa trên Fediverse bắt đầu từ sở thích cá nhân
- Người tạo ra nó bắt đầu từ mong muốn được xem trực tiếp thời tiết của thành phố mình trên timeline
- Dịch vụ tạo tài khoản theo từng thành phố (bot) để định kỳ đăng thời tiết của từng nơi
- FreeBSD được chọn làm hệ điều hành, và jail được tách theo từng quốc gia để dễ quản lý và tăng cường bảo mật
- Thử nghiệm ban đầu được thực hiện trên một VPS tại Đức, và hiện đang vận hành trên VPS 4 euro ở Milan, Ý
Nguyên tắc thiết kế
- Tách instance theo từng quốc gia để tăng khả năng quản lý và bảo mật, đồng thời có thể di chuyển riêng lẻ khi cần
- Nguồn dữ liệu được chọn giữa wttr.in và Open-Meteo, ưu tiên tính thân thiện với mã nguồn mở và độ tin cậy
- Tăng cường khả năng tiếp cận: ngôn ngữ bản địa, tương thích với trình duyệt văn bản, dùng emoji, không phụ thuộc JavaScript
- Tuân theo triết lý Unix, duy trì cấu trúc trong đó các thành phần nhỏ phối hợp với nhau
- Chọn snac làm phần mềm cốt lõi nhờ hỗ trợ ActivityPub, tạo RSS, tiêu thụ ít tài nguyên và biên dịch nhanh
Triển khai kỹ thuật
- Mỗi jail hoạt động độc lập, với script Python lấy dữ liệu cho từng thành phố rồi chuyển sang Markdown
- Tính toán tọa độ bằng geopy rồi gọi Open-Meteo API
- Gửi bài đăng bằng lệnh
note của snac, không cần tự quản lý API key bên ngoài
- Script post.sh duyệt qua toàn bộ thành phố để tự động tạo và đăng bài
- cron chạy mỗi 6 giờ, trạng thái được theo dõi bằng Uptime-Kuma
- Tên thành phố được quản lý bằng tệp (
cities.txt), khi thêm thành phố mới sẽ tự động được phản ánh
Tăng trưởng và phản hồi
- Ban đầu thử nghiệm chủ yếu ở Ý, sau đó mở rộng sang các nước châu Âu
- Sau khi FediFollows giới thiệu dự án, lượng người theo dõi tăng mạnh và yêu cầu từ người dùng ở nhiều nước cũng gia tăng
- Đã bổ sung hỗ trợ đa ngôn ngữ, biểu đạt bằng emoji, và chức năng đăng không công khai (unlisted)
- Các tính năng tiếp tục được cải thiện nhờ phản hồi nhanh từ cộng đồng lập trình viên
Mở rộng và thách thức kỹ thuật
- Khi mở rộng toàn cầu, nhiều vấn đề phát sinh như chuyển đổi đơn vị (Celsius/Fahrenheit), chênh lệch múi giờ, phân biệt các thành phố trùng tên
- Khi mở sang Mỹ và Canada, dự án thêm hơn 1200 thành phố và dùng dấu phân cách
__ để phân biệt theo bang/tỉnh
- Sau khi vượt quá giới hạn của Open-Meteo API miễn phí, dự án đã được cấp API key chuyên dụng
- Nhờ hiệu quả của FreeBSD và snac, một VPS duy nhất vẫn có thể vận hành nhiều quốc gia
Hiệu năng hệ thống và hạ tầng
- Cấu hình VPS: FreeBSD 14.3-RELEASE, quản lý jail bằng BastilleBSD
- Tổng cộng 39 jail, chụp ZFS snapshot mỗi 15 phút, sao lưu ngoài mỗi giờ
- RAM sử dụng 501MB, tăng nhẹ trong lúc cập nhật
- Tải CPU trung bình dưới 10%, nhưng có thể tăng lên 70~75% khi cập nhật quy mô lớn
- Instance tại Mỹ đăng bài cách nhau 5 giây giữa các thành phố, toàn bộ quá trình mất khoảng 2 tiếng rưỡi
Các ví dụ xử lý sự cố
- Rò rỉ API key: bị lộ do mã debug, đã được sửa ngay và cấp key mới
- Lỗi geopy: khi phản hồi từ Nominatim thất bại, vấn đề được giải quyết bằng cách đưa vào bộ nhớ đệm tọa độ
- Vấn đề ngôn ngữ: đã sửa lỗi thiếu bản dịch đa ngôn ngữ và chọn sai ngôn ngữ địa phương
Trạng thái hiện tại (tính đến tháng 12 năm 2025)
- Quốc gia được hỗ trợ: 38 quốc gia, số thành phố 2937
- Số người theo dõi trên Fediverse hơn 7707, số người đăng ký RSS không thể ước tính
- Bao gồm các thành phố lớn ở châu Âu, Bắc Mỹ, châu Á và châu Đại Dương
- Hệ thống đang vận hành ổn định và vẫn còn khả năng mở rộng thêm quốc gia
Kết luận
- FediMeteo chứng minh rằng vẫn có thể xây dựng dịch vụ toàn cầu trên hạ tầng chi phí thấp
- Đây là ví dụ cho thấy giá trị của chủ quyền dữ liệu, cấu trúc đơn giản và hợp tác mã nguồn mở
- Người tạo dự án nhấn mạnh rằng thông qua dự án này, thời tiết đã trở thành một phương tiện xã hội kết nối con người
1 bình luận
Ý kiến trên Hacker News
Thật sự rất vui khi thấy những dự án nhỏ như thế này phát triển thành công
Tôi có cảm giác FreeBSD ít thành phần thừa và độ trễ thấp hơn so với các bản phân phối Linux
Tôi đã thiết lập một VM FreeBSD giá 4 USD/tháng trên Vultr (1GB RAM, 1vCPU), và ngay cả khi chạy Caddy thì mức dùng RAM cũng chỉ khoảng 12%
Với VM 4GB RAM, 4vCPU thì có vẻ có thể xử lý được khá nhiều lưu lượng
Tôi muốn làm blog cá nhân thành một webapp dạng văn bản phong cách BBS retro — kiểu server đa luồng Nim + sqlite, chạy trên FreeBSD chỉ với một file nhị phân 4MB, không container hay thư viện JS
Bài viết này khiến tôi càng vững tin hơn trên con đường chuyển sang FreeBSD
Hôm nay tôi thử với mkosi(https://github.com/systemd/mkosi), theo chuẩn cài đặt tối thiểu thì Fedora 43 dùng khoảng 130MiB RAM, còn Debian khoảng 100MiB
Tôi nhớ lần trước khi cài FreeBSD tối thiểu thì cũng tương tự, hoặc dùng hơi nhiều hơn một chút tùy cấu hình ZFS
Có lẽ một phần nguyên nhân là do chuyển sang x64
Thật thú vị khi cùng một công việc mà giờ lại dùng RAM gấp đôi, nhưng bù lại thì giờ gần như có thể dùng RAM không giới hạn
Ngay cả đăng nhập SSH cũng nhanh hơn Ubuntu rất nhiều, và trình quản lý gói apk cũng cực kỳ nhanh
Về mô hình giấy phép thì tôi thích phía GNU hơn, nhưng bản thân code thì tôi thích phong cách BSD hơn
Nếu là kiểu sau thì có thể tham khảo FlaskBB
Tôi cũng đang làm một hệ thống dự báo lướt sóng cá nhân tương tự bằng open-meteo
Nó chỉ xử lý một khu vực, nhưng cũng dễ mở rộng
Tôi kết hợp dữ liệu biển của open-meteo với dự báo thời tiết ngắn hạn và dài hạn, rồi dùng LLM để chuyển dữ liệu định lượng thành mô tả định tính
Về cơ bản là tự động hóa việc tôi vốn làm trong đầu
Nếu ai có ý tưởng gì thì rất mong được góp ý
https://surfrash.xyz/
Tôi thích giao diện thiên về diễn giải thay vì một bức tường dữ liệu
Cũng xin đề nghị thêm khu vực Manly(NSW, Australia)
Đọc rất thú vị
Giá mà hồi trẻ tôi quan tâm đến *BSD nhiều hơn; giờ tôi đã quá quen với Linux nên khó đổi hẳn
Có vẻ ZFS và tính năng jail đã giúp việc quản trị trở nên trơn tru
Tôi dùng podman, nhưng trên Linux thì vẫn chưa thử ZFS
Tôi định làm một kho lưu trữ cá nhân nên muốn tận dụng deduplication của ZFS
Tôi đang cố giảm bớt những stack phức tạp kiểu Docker, và dù có systemd, khái niệm jail hay sandbox vẫn khá hấp dẫn
Tôi thích các công cụ hoạt động tốt chỉ với cấu hình mặc định
Cấu hình của “VPS 4 euro” này thật đáng ngạc nhiên
Ví dụ, VPS rẻ nhất của Hetzner là 2 vCPU, 4GB RAM, 40GB NVMe SSD, nhưng không có kết nối 1Gb/s
Loại rẻ nhất tôi tìm thấy là Contabo
Máy chủ giá rẻ thường dùng phần cứng đời cũ hoặc bị chia sẻ quá mức
4 vCPU có thể còn chậm hơn 2 vCPU trên máy chủ đời mới
Tuy vậy, nếu là ứng dụng chủ yếu cần RAM thì đây vẫn có thể là lựa chọn tốt
Có người nói là khó giành được instance, nhưng tôi đã dùng ổn hơn 2 năm rồi
Tài khoản miễn phí có thể bị đóng, nên chuyển sang trả phí sẽ an toàn hơn
Thật hay khi thấy ai đó tự xây một dự án đơn giản mà không cần đến hạ tầng khổng lồ như Kubernetes, AWS hay DynamoDB
Bản thân Hacker News cũng chạy trên một máy chủ FreeBSD 4 lõi
Liên kết liên quan
Tôi cũng mua một máy chủ có cấu hình tương tự với giá khoảng 5 USD
Nó có 400~500GB dung lượng lưu trữ, và tôi bắt đầu bằng chương trình khuyến mãi 8 USD trong 3 tháng
Sau đó sẽ chuyển sang 5 USD/tháng, nhưng niềm vui và cảm giác đắm mình khi tự vận hành VPS là rất lớn
OVH có giá rẻ và lợi thế là chính sách egress không giới hạn
Upcloud cũng có đội hỗ trợ rất tốt
Tôi cũng nghe mẹo là nếu cần hỗ trợ từ OVH thì nên hỏi qua Twitter hoặc Discord
Bản thân quá trình tối ưu, so sánh giá máy chủ và chất lượng hỗ trợ cũng đã rất thú vị
Tôi từng nghĩ đến ý tưởng mua domain “freeofcharge.org” rồi cung cấp qua subdomain những dịch vụ miễn phí có thể chứa gọn trong RAM
Ý tưởng là tập hợp các dịch vụ hữu ích có thể vận hành với chi phí dưới 10 USD/tháng
Tôi cũng muốn làm một công cụ tương tự để chuyển các cảnh báo thời tiết cho một khu vực cụ thể sang dạng HTML/Markdown dễ đọc hơn
Không phải cho fediverse, chỉ đơn giản là để có thông báo thời tiết dễ tiếp cận hơn
Về ý kiến “cần cung cấp dự báo bằng ngôn ngữ địa phương”,
tôi nghĩ rằng việc ghi đè ngôn ngữ mặc định của trình duyệt là không cần thiết, vì cũng có nhiều người dùng không biết ngôn ngữ địa phương
Thay vào đó, nó cung cấp cách biểu đạt trực quan bằng emoji để giảm rào cản ngôn ngữ