- FediMeteo เป็น บริการข้อมูลสภาพอากาศระดับโลก ที่เริ่มต้นจาก FreeBSD VPS ราคา 4 ยูโร และโพสต์สภาพอากาศของแต่ละเมืองแบบอัตโนมัติผ่าน Fediverse
- แต่ละประเทศถูกแยกและจัดการด้วย FreeBSD jail โดยใช้ซอฟต์แวร์ snac และ Open-Meteo API เพื่อดึงข้อมูลและเผยแพร่ในรูปแบบ Markdown
- ระบบมีการอัปเดตอัตโนมัติทุก 6 ชั่วโมง, รองรับ 39 jail, 38 ประเทศ 2937 เมือง และเติบโตจนมี ผู้ติดตามมากกว่า 7700 คน
- แม้จะเผชิญปัญหาในการดำเนินงานหลายอย่าง เช่น API key รั่วไหล, ข้อผิดพลาดในการคำนวณพิกัด, และ ปัญหาการแปลภาษา แต่ก็ทำให้ระบบเสถียรขึ้นได้ด้วยการแคชและการปรับปรุงการรองรับหลายภาษา
- ได้รับการประเมินว่าเป็นกรณีตัวอย่างที่แสดงให้เห็นว่าแม้จะใช้อินฟราต้นทุนต่ำ ก็สามารถสร้าง บริการระดับโลกที่มีประสิทธิภาพและทำงานได้อย่างอัตโนมัติ
ภาพรวมของโครงการ
- FediMeteo คือ บริการแจ้งเตือนสภาพอากาศอัตโนมัติบน Fediverse ที่เริ่มจากความสนใจส่วนตัว
- ผู้สร้างเริ่มต้นจากความคิดที่ว่าอยากเห็นสภาพอากาศของเมืองตัวเองได้โดยตรงบนไทม์ไลน์
- บริการนี้สร้าง บัญชีแยกตามเมือง (bot) เพื่อโพสต์สภาพอากาศของแต่ละเมืองเป็นระยะ
- เลือกใช้ FreeBSD เป็นระบบปฏิบัติการ และแยก jail ตามประเทศเพื่อให้ง่ายต่อการจัดการและเพิ่มความปลอดภัย
- การทดสอบช่วงแรกดำเนินการบน VPS ในเยอรมนี และปัจจุบันให้บริการอยู่บน VPS ราคา 4 ยูโรในมิลาน ประเทศอิตาลี
หลักการออกแบบ
- แยกอินสแตนซ์ตามประเทศ เพื่อเสริมทั้งการจัดการและความปลอดภัย และสามารถย้ายเป็นรายส่วนได้เมื่อจำเป็น
- แหล่งข้อมูล เลือกได้ระหว่าง wttr.in และ Open-Meteo โดยให้ความสำคัญกับความเป็นมิตรต่อโอเพนซอร์สและความน่าเชื่อถือ
- เพิ่มการเข้าถึง: ใช้ภาษาท้องถิ่น, รองรับ text browser, ใช้อีโมจิ, และ ไม่พึ่งพา JavaScript
- ยึดตาม ปรัชญา Unix ด้วยโครงสร้างที่ประกอบจากส่วนย่อยเล็ก ๆ ที่ทำงานร่วมกัน
- เลือกใช้ snac เป็นซอฟต์แวร์หลัก โดยรองรับ ActivityPub, สร้าง RSS ได้, ใช้ทรัพยากรต่ำ, และคอมไพล์ได้รวดเร็ว
การติดตั้งใช้งานทางเทคนิค
- แต่ละ jail ทำงานอย่างอิสระ และมี สคริปต์ Python ดึงข้อมูลของแต่ละเมืองแล้วแปลงเป็น Markdown
- ใช้ geopy คำนวณพิกัด จากนั้นเรียก Open-Meteo API
- ส่งโพสต์ด้วยคำสั่ง
note ของ snac โดยไม่จำเป็นต้องจัดการ API key ภายนอก
- สคริปต์ post.sh จะวนลูปทุกเมืองเพื่อสร้างและเผยแพร่โพสต์โดยอัตโนมัติ
- cron ทำงานทุก 6 ชั่วโมง และใช้ Uptime-Kuma เพื่อติดตามสถานะระบบ
- ชื่อเมืองถูกจัดการผ่านไฟล์ (
cities.txt) และเมื่อเพิ่มเมืองใหม่ ระบบจะนำไปใช้โดยอัตโนมัติ
การเติบโตและการตอบรับ
- ช่วงแรกทดสอบโดยเน้นอิตาลี ก่อนขยายไปยังประเทศต่าง ๆ ในยุโรป
- หลังจาก FediFollows แนะนำโครงการนี้ จำนวนผู้ติดตามเพิ่มขึ้นอย่างรวดเร็ว และมีคำขอจากผู้ใช้ในหลายประเทศมากขึ้น
- มีการเพิ่มฟีเจอร์ รองรับหลายภาษา, การใช้อีโมจิ, และ การโพสต์แบบไม่แสดงในรายการสาธารณะ (unlisted)
- ฟีดแบ็กที่รวดเร็วจากชุมชนนักพัฒนาช่วยให้มีการปรับปรุงฟีเจอร์อย่างต่อเนื่อง
การขยายตัวและความท้าทายทางเทคนิค
- เมื่อขยายสู่ระดับโลก พบปัญหาเรื่อง การแปลงหน่วย (เซลเซียส/ฟาเรนไฮต์), ความต่างของเขตเวลา, และ การแยกเมืองชื่อซ้ำกัน
- เมื่อลุยตลาด สหรัฐฯ และแคนาดา มีการเพิ่มเมืองมากกว่า 1200 แห่ง และใช้ตัวคั่น
__ เพื่อแยกตามรัฐ
- หลังเกิดปัญหาเกินลิมิตของ Open-Meteo ฟรี API ก็ได้รับ API key เฉพาะ สำหรับใช้งาน
- ด้วย ประสิทธิภาพของ FreeBSD และ snac จึงสามารถให้บริการหลายประเทศได้แม้ใช้ VPS เพียงเครื่องเดียว
ประสิทธิภาพของระบบและอินฟรา
- สเปก VPS: FreeBSD 14.3-RELEASE, จัดการ jail ด้วย BastilleBSD
- รวม 39 jail, มี ZFS snapshot ทุก 15 นาที และแบ็กอัปภายนอกทุกชั่วโมง
- ใช้ RAM 501MB, และจะเพิ่มขึ้นเล็กน้อยระหว่างอัปเดต
- ภาระ CPU เฉลี่ยต่ำกว่า 10%, แต่ระหว่างอัปเดตขนาดใหญ่จะเพิ่มขึ้นถึง 70~75%
- อินสแตนซ์สหรัฐฯ โพสต์โดยเว้นช่วง 5 วินาทีระหว่างเมือง และใช้เวลาประมวลผลทั้งหมดประมาณ 2 ชั่วโมงครึ่ง
ตัวอย่างการแก้ปัญหา
- API key รั่วไหล: เกิดจากโค้ดดีบัก ทำการแก้ไขทันทีและออกคีย์ใหม่
- ข้อผิดพลาดของ geopy: เมื่อ Nominatim ตอบกลับล้มเหลว จึงแก้ด้วยการแคชพิกัด
- ปัญหาด้านภาษา: แก้ไขกรณีแปลหลายภาษาไม่ครบและเลือกภาษาท้องถิ่นผิดพลาด
สถานะปัจจุบัน (ณ ธันวาคม 2025)
- ประเทศที่รองรับ: 38 ประเทศ, จำนวนเมือง 2937 เมือง
- ผู้ติดตามบน Fediverse มากกว่า 7707 คน, ส่วนจำนวนผู้ติดตาม RSS ไม่สามารถประเมินได้
- ครอบคลุมเมืองสำคัญใน ยุโรป, อเมริกาเหนือ, เอเชีย, และโอเชียเนีย
- ระบบยังคงทำงานได้อย่างเสถียร และยังมีศักยภาพในการขยายไปยังประเทศเพิ่มเติม
บทสรุป
- FediMeteo พิสูจน์ให้เห็นว่าสามารถสร้างบริการระดับโลกได้แม้ใช้อินฟราต้นทุนต่ำ
- เป็นตัวอย่างที่แสดงคุณค่าของ อธิปไตยด้านข้อมูล, โครงสร้างที่เรียบง่าย, และ ความร่วมมือแบบโอเพนซอร์ส
- ผู้สร้างเน้นว่า ผ่านโครงการนี้ สภาพอากาศได้กลายเป็นสื่อกลางทางสังคมที่เชื่อมผู้คนเข้าด้วยกัน
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ชอบมากที่ได้เห็นโปรเจ็กต์เล็ก ๆ แบบนี้ เติบโตจนประสบความสำเร็จ
รู้สึกว่า FreeBSD มีส่วนเกินน้อยกว่าและหน่วงต่ำกว่า ดิสโทร Linux
ผมตั้งค่า FreeBSD VM ราคา 4 ดอลลาร์ต่อเดือนบน Vultr (RAM 1GB, 1vCPU) แล้วแม้จะรัน Caddy อยู่ การใช้ RAM ก็แค่ 12% เท่านั้น
ถ้าเป็น VM 4GB RAM, 4vCPU ก็น่าจะรับทราฟฟิกได้เยอะพอสมควร
ผมอยากทำบล็อกส่วนตัวให้เป็น เว็บแอปแบบข้อความสไตล์ Retro BBS — ใช้เซิร์ฟเวอร์แบบมัลติเธรดของ Nim + sqlite รันบน FreeBSD ด้วยไบนารีไฟล์เดียวขนาด 4MB โดยไม่ต้องมีคอนเทนเนอร์หรือไลบรารี JS
บทความนี้ทำให้ผมมั่นใจมากขึ้นว่าจะไปทาง FreeBSD
วันนี้ลองทดสอบด้วย mkosi(https://github.com/systemd/mkosi) แล้วพบว่า Fedora 43 แบบติดตั้งขั้นต่ำใช้ RAM ราว 130MiB ส่วน Debian ใช้ประมาณ 100MiB
จำได้ว่าตอนเคยลง FreeBSD แบบขั้นต่ำก็กินพอ ๆ กัน หรืออาจมากกว่านิดหน่อยขึ้นอยู่กับการตั้งค่า ZFS
การเปลี่ยนมาใช้ x64 อาจเป็นสาเหตุหนึ่ง
น่าแปลกที่ทำงานเท่าเดิมแต่กลับใช้ RAM เป็นสองเท่า แต่ข้อดีก็คือตอนนี้แทบจะใช้ RAM ได้ไม่จำกัดแล้ว
แค่ SSH login ก็เร็วกว่า Ubuntu มากแล้ว และ apk package manager ก็เร็วมาก
เรื่องไลเซนส์ผมชอบฝั่ง GNU มากกว่า แต่ตัวโค้ดเองผมชอบสไตล์ BSD มากกว่า
ถ้าเป็นอย่างหลัง ลองดู FlaskBB ได้
ผมก็กำลังทำระบบพยากรณ์คลื่นสำหรับเล่นเซิร์ฟส่วนตัวโดยใช้ open-meteo คล้าย ๆ กัน
แม้ตอนนี้จะรองรับแค่พื้นที่เดียว แต่ขยายต่อได้ง่าย
มันเอาข้อมูลทะเลจาก open-meteo มารวมกับพยากรณ์อากาศระยะสั้นและระยะยาว แล้วใช้ LLM แปลงข้อมูลเชิงปริมาณให้เป็นคำอธิบายเชิงคุณภาพ
เหมือนเป็นการทำสิ่งที่ผมเคยประมวลผลเองในหัวให้เป็นระบบอัตโนมัติ
ถ้ามีไอเดียอะไรอยากให้บอกได้เลย
https://surfrash.xyz/
ผมชอบ อินเทอร์เฟซที่เน้นคำอธิบาย มากกว่ากำแพงข้อมูล
อยากขอเพิ่มพื้นที่ Manly (NSW, Australia) ด้วย
อ่านสนุกมาก
ถ้าตอนหนุ่มกว่านี้ผมสนใจ *BSD มากกว่านี้ก็คงดี แต่ตอนนี้ชินกับ Linux มากเกินไปแล้วเลยเปลี่ยนยาก
ดูเหมือนว่า ZFS กับ ฟีเจอร์ jail จะช่วยให้การดูแลจัดการลื่นไหลดี
ผมใช้ podman อยู่ แต่บน Linux ยังไม่เคยลอง ZFS
มีแผนจะทำคลังข้อมูลส่วนตัว เลยตั้งใจจะใช้ deduplication ของ ZFS
กำลังพยายามลดความซับซ้อนของสแตกแบบ Docker และแม้จะมี systemd อยู่แล้ว แต่แนวคิดเรื่อง jail หรือ sandbox ก็น่าสนใจมาก
ผมชอบเครื่องมือที่ทำงานได้ดีตั้งแต่ค่าเริ่มต้น
สเปกของ “VPS 4 ยูโร” น่าทึ่งมาก
อย่างเช่น VPS ราคาต่ำสุดของ Hetzner ให้ 2 vCPU, 4GB RAM, 40GB NVMe SSD แต่ไม่มีการเชื่อมต่อ 1Gb/s
ที่ถูกที่สุดที่ผมหาเจอคือ Contabo
เซิร์ฟเวอร์ราคาถูกมักเป็นเครื่องรุ่นเก่าหรือถูกแชร์หนักเกินไป
4 vCPU อาจช้ากว่า 2 vCPU บนเครื่องรุ่นใหม่ก็ได้
แต่ถ้าเป็นแอปที่เน้น RAM ก็อาจเป็นตัวเลือกที่ดี
แม้จะมีคนบอกว่าจับจองอินสแตนซ์ยาก แต่ผมก็ใช้มาเกิน 2 ปีได้ปกติดี
แนะนำว่าแปลงเป็นบัญชีแบบเสียเงินจะปลอดภัยกว่า เพราะบัญชีฟรีอาจถูกยกเลิกได้
ชอบที่ได้เห็นการ สร้างโปรเจ็กต์เรียบง่ายด้วยตัวเอง โดยไม่ต้องพึ่งโครงสร้างพื้นฐานขนาดใหญ่ (Kubernetes, AWS, DynamoDB ฯลฯ)
ตัว Hacker News เองก็รันอยู่บน เซิร์ฟเวอร์ FreeBSD 4 คอร์
ลิงก์ที่เกี่ยวข้อง
ผมก็เพิ่งซื้อเซิร์ฟเวอร์สเปกใกล้เคียงกันมาราว 5 ดอลลาร์
มีพื้นที่เก็บข้อมูล 400~500GB และเริ่มต้นจากโปรโมชัน 8 ดอลลาร์สำหรับ 3 เดือน
หลังจากนั้นจะเปลี่ยนเป็นเดือนละ 5 ดอลลาร์ และ ความสนุกกับความอินของการดูแล VPS เอง นั้นมีมากจริง ๆ
OVH เด่นเรื่องราคาถูกและ นโยบาย egress ไม่จำกัด
ส่วน Upcloud ก็มีทีมซัพพอร์ตที่ยอดเยี่ยม
ยังเคยได้ยินเคล็ดลับว่าถ้าจะติดต่อซัพพอร์ต OVH ให้ลองผ่าน Twitter หรือ Discord
กระบวนการเปรียบเทียบราคาเซิร์ฟเวอร์กับคุณภาพซัพพอร์ตแล้วปรับให้เหมาะที่สุดนั้นสนุกในตัวมันเอง
ผมเคยคิดไอเดียจะซื้อโดเมนชื่อ “freeofcharge.org” แล้วเปิดให้บริการฟรีที่ อยู่ใน RAM ได้ ผ่านซับโดเมนต่าง ๆ
แนวคิดคือรวมบริการที่มีประโยชน์และรันได้ในงบไม่เกิน 10 ดอลลาร์ต่อเดือน
ผมก็อยากทำเครื่องมือคล้าย ๆ กัน คือ แปลงประกาศเตือนสภาพอากาศของบางพื้นที่ให้อ่านง่ายในรูปแบบ HTML/Markdown
ไม่ได้ทำเพื่อ fediverse แต่ทำเป็นระบบแจ้งเตือนอากาศที่เข้าถึงง่ายเฉย ๆ
เรื่องความเห็นที่ว่า “ควรให้พยากรณ์เป็นภาษาท้องถิ่น”
ผมคิดว่าไม่จำเป็นต้อง เขียนทับการตั้งค่าภาษาเริ่มต้นของเบราว์เซอร์ เพราะมีผู้ใช้จำนวนมากที่ไม่รู้ภาษาท้องถิ่นเหมือนกัน
แทนที่จะทำหลายภาษา ก็ใช้ อีโมจิเป็นการสื่อสารที่เข้าใจง่าย เพื่อลดกำแพงทางภาษา