คู่มือฉบับนุ่มนวลสำหรับการทำ Self-hosting
(knhash.in)- ในปี 2024 ที่บริการคลาวด์และบริการแบบสมัครสมาชิกกลายเป็นเรื่องทั่วไป การลองกลับมาทำ self-hosting ที่เน้นซอฟต์แวร์ เป็นงานอดิเรก เพื่อเรียนรู้ผ่านการตั้งค่าระบบด้วยตัวเอง ก็เป็นสิ่งที่น่าลอง
- Self-hosting อาจเป็นการต่อต้านบริการแบบปิดผูกขาดได้ แต่เพราะมีต้นทุนด้านเวลาและภาระทางใจสูง แรงจูงใจที่สำคัญที่สุดจึงคือ ความสนุกและการสำรวจค้นคว้า
- ผู้เริ่มต้นสามารถเริ่มได้แม้ไม่มีเซิร์ฟเวอร์จริง โดยใช้ shared hosting อย่าง Uberspace แล้วเชื่อมต่อผ่าน SSH เพื่อใช้งานสภาพแวดล้อมที่มีพื้นที่เก็บข้อมูล 10GB และ RAM 1.5GB
- บน Uberspace ใช้ Docker ไม่ได้ แต่สามารถอ้างอิง Uberspace Labs และ Awesome-Selfhosted เพื่อรันบริการอย่าง Actual Budget และ Miniflux ได้
- เมื่อเชื่อมโดเมนส่วนตัว ก็สามารถตั้งค่า subdomain แยกตามบริการ อีเมลแอดเดรสแบบกำหนดเอง และโฮสติ้งไฟล์สาธารณะ ทำให้แสดงและดูแลผลงานจาก self-hosting ได้ง่ายขึ้น
ความรู้สึกของการใช้คอมพิวเตอร์ส่วนบุคคลก่อนยุคคลาวด์
- ในยุค 2000 ซอฟต์แวร์และเกมถูกจัดจำหน่ายผ่าน DVD และคอมพิวเตอร์ส่วนบุคคลมีลักษณะชัดเจนว่าเป็นอุปกรณ์คำนวณที่ผู้ใช้ลงมือจัดการเอง
- ในยุค 2010 Chromebook และบริการคลาวด์แพร่หลายขึ้น ทำให้ซอฟต์แวร์จำนวนมากย้ายไปทำงานบน คอมพิวเตอร์ของคนอื่น
- เมื่อการสมัครสมาชิกกลายเป็นรูปแบบหลักของการหารายได้ออนไลน์ถัดจากโฆษณา แนวโน้มที่ผู้ใช้ยอมส่งต่ออำนาจควบคุมเพื่อแลกกับความสะดวกก็เพิ่มขึ้น
- ผลคือ คนบางส่วนในรุ่นที่เรียนวิทยาการคอมพิวเตอร์มีโอกาสเริ่มต้นจากการเป็นผู้หลงใหลคอมพิวเตอร์น้อยลง และทัศนคติแบบแฮ็กเกอร์ยุคแรกก็อ่อนแรงลงด้วย
เข้าหา self-hosting ในฐานะงานอดิเรก
- Self-hosting อาจเป็นการทวงคืน อำนาจควบคุม เหนือตัวตนดิจิทัลของตนเองในสภาพแวดล้อมที่ถูกครอบงำโดยบริการผูกขาด
- หากมองแค่ประโยชน์ใช้สอยล้วน ๆ การฝากโฮสติ้งไว้ที่อื่นอาจเป็นตัวเลือกที่ดีกว่า
- สามารถให้ผู้ให้บริการดูแลเรื่องเสถียรภาพ การรองรับการใช้งานพร้อมกัน ความซ้ำซ้อน และความพร้อมใช้งานได้
- แทนที่จะประหยัดค่าใช้จ่าย อาจต้องแลกด้วยเวลาและภาระทางใจที่มากขึ้น
- ในเชิงปัญญา มันใกล้เคียงกับ โรงรถดิจิทัล ที่คอยปรับแต่งระบบอยู่เรื่อย ๆ
- หลังเลิกงานในแต่ละวัน มันอาจกลายเป็นงานอดิเรกที่ได้แตะต้องระบบคล้ายของเล่นที่ตัวเองชอบ
- แทนที่จะถกเถียงอย่างเคร่งครัดว่าอะไรคือ “self-hosting ของจริง” สิ่งสำคัญกว่าคือการเริ่มต้นอย่างสนุก แม้จะเป็นแค่ระดับซอฟต์แวร์ก็ตาม
สร้างสภาพแวดล้อมแรกด้วย shared hosting
- หากจะเริ่ม self-hosting ก่อนอื่นต้องมีพื้นที่สำหรับโฮสต์
- โฮสติ้งที่แนะนำคือ Uberspace
- เป็นโฮสติ้งในแนวทางประมาณว่า “เราจะให้ไขควงคุณไป ขอแค่อย่าเผาตึก และขอให้สนุก”
- เป็นการชำระเงินภายหลังเมื่อสิ้นเดือน ดังนั้นเดือนแรกจึงใช้งานได้แทบเหมือนทดลองใช้ฟรี
- เมื่อสร้างบัญชีแล้ว จะสามารถ เชื่อมต่อผ่าน SSH ไปยังคอมพิวเตอร์ที่เชื่อมต่ออินเทอร์เน็ตอยู่ได้
- สภาพแวดล้อมที่ให้มามีพื้นที่เก็บข้อมูล 10GB และ RAM 1.5GB
- เมื่อรัน
lsจะเห็นไดเรกทอรีผู้ใช้ใหม่ที่ยังว่างอยู่
วิธีเลือกซอฟต์แวร์ที่จะติดตั้ง
- เมื่อต้องค้นหาซอฟต์แวร์สำหรับใช้บน Uberspace มีแหล่งข้อมูลสองแห่งที่มีประโยชน์เป็นพิเศษ
- Uberspace Labs: คู่มือเฉพาะทางที่อธิบายวิธีติดตั้งซอฟต์แวร์หลากหลายตัวบน Uberspace
- Awesome-Selfhosted: รายการรวบรวมซอฟต์แวร์ที่ทำ self-hosting ได้อย่างกว้างขวาง เหมาะสำหรับค้นหาโปรเจกต์ที่มีคอมมูนิตี้อยู่พอสมควร
- บน Uberspace ไม่สามารถใช้ Docker ได้
- ด้วยข้อจำกัดด้านหน่วยความจำ จึงรันชุด virtualization เต็มรูปแบบได้ยาก
- แม้จะไม่สะดวกสำหรับซอฟต์แวร์ขนาดใหญ่หรือการติดตั้งที่รองรับเฉพาะ Docker แต่ก็มีทางเลี่ยง เช่น ติดตั้งจากซอร์ส หรือดึง runtime สุดท้ายจากกระบวนการทำให้เป็น Docker มาใช้คล้ายกับ build image
ตัวอย่าง 1: จัดการข้อมูลการเงินเองด้วย Actual Budget
- Actual Budget เป็นแอปจัดการการเงินที่รวดเร็วและเน้นความเป็นส่วนตัว
- เหมาะกับผู้ใช้ที่ต้องการติดตามรายจ่าย มูลค่าสุทธิ รูปแบบการใช้จ่าย และอื่น ๆ
- สามารถใช้งานในรูปแบบที่ไม่ต้องฝากข้อมูลการเงินอ่อนไหวไว้กับบริการอื่น และเข้าถึงได้จากทุกที่ผ่านเบราว์เซอร์
- แกนหลักของแนวทางทำงบประมาณคือระเบียบวิธี Envelope Budgeting
- คู่มือติดตั้งบน Uberspace ดูได้ที่ guide_actual
- เมื่อดูส่วนรายงาน จะสามารถแบ่งดูและวิเคราะห์ข้อมูลการเงินได้
- รายการที่คิดว่าเป็นการซื้อเล็ก ๆ เมื่อรวมกันตลอดเดือนก็อาจกลายเป็นจำนวนมากได้
- อาจได้อินไซต์ เช่น ค่าเดินทางไปทำงานสูงกว่าที่คาดไว้
ตัวอย่าง 2: ทวงคืนฟีดด้วย Miniflux และ RSS
- Miniflux เป็น feed reader ที่เรียบง่ายและมีแนวคิดชัดเจน
- การใช้ RSS ช่วยให้ตรวจดูอัปเดตจากสำนักข่าว นิตยสาร และบล็อกที่ชอบได้ในที่เดียว
- ช่อง YouTube ที่ติดตามก็สามารถจัดให้เป็นเหมือนไทม์ไลน์ฟีดเฉพาะที่ไม่มีโฆษณาได้
- YouTube มี RSS feed ให้ใช้งาน
- YouTube player แบบฝังไม่มีโฆษณา
- หลังติดตั้ง Miniflux บน Uberspace แล้ว สามารถเพิ่มฟีดของช่อง YouTube ที่ชอบได้
- หากเปิดใช้งาน Fever API ในการตั้งค่า RSS client ที่อ่าน Fever API ได้ก็จะเข้าถึงตัวรวบรวม RSS บนคลาวด์ได้
- ในระบบนิเวศของ Apple แนะนำ Unread จาก Golden Hill Software
- อาจแยกหมวดหมู่ฟีดสำหรับข่าวและเว็บคอมิกออกจากกันได้
สร้างพื้นที่สำหรับโชว์ผลงานด้วยโดเมนส่วนตัว
- หนึ่งในความสนุกของ self-hosting คือการได้โชว์สิ่งที่ตนเองสร้าง
- โดเมนส่วนตัวทำหน้าที่เป็นพื้นที่ออนไลน์ของตัวเอง
- บริการจดโดเมนที่แนะนำคือ Porkbun
- หากมีโดเมนอย่าง
awesauce.comก็สามารถจัดรูปแบบได้หลายอย่าง- สามารถเชื่อมบริการที่โฮสต์บน Uberspace เข้ากับ subdomain อย่าง
actual.awesauce.com,miniflux.awesauce.comได้ - หากผู้ให้บริการอีเมลรองรับโดเมนแบบกำหนดเอง ก็สามารถสร้างที่อยู่อย่าง
contact@awesauce.comได้- แม้จะเปลี่ยนผู้ให้บริการอีเมลจริงในภายหลัง ก็ยังคงใช้ที่อยู่นั้นต่อได้
- อีเมลโดเมนแบบกำหนดเองอาจมีค่าใช้จ่าย
- สามารถเชื่อม subdomain หรือ path ของ URL เข้ากับ GitHub repository เพื่อให้ไฟล์สาธารณะอย่างเรซูเม่เข้าถึงได้ที่
awesauce.com/files/resume.pdf
- สามารถเชื่อมบริการที่โฮสต์บน Uberspace เข้ากับ subdomain อย่าง
การสำรวจต่อไปที่จงใจเว้นไว้
- เป้าหมายของบทความนี้ไม่ใช่การเป็นบทเรียนแบบละเอียดทีละขั้น แต่คือการกระตุ้นความอยากลองลงมือสำรวจด้วยตัวเอง
- งานที่เหลือไว้ให้ผู้อ่านสำรวจเองคือวิธีส่งการแจ้งเตือนมือถือเมื่อสินค้าบางรายการกลับมามีสต็อก หรือเมื่อเว็บไซต์มีการเปลี่ยนแปลง
- การอภิปรายที่เกี่ยวข้องบน Hacker News ต่อเนื่องอยู่ใน เธรดนี้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ถ้ามองจากมุมมองแบบเก่า การที่ตอนนี้ การจ่ายเงินค่า shared hosting ถูกเรียกว่า “self-hosting” นี่น่าประหลาดใจทีเดียว ไม่ได้แปลว่ามันแย่ในตัวเองนะ แต่เมื่อ 10 ปีก่อนคงไม่มีทางเรียกแบบนั้นแน่
มันคล้ายกับความหมายของ “ทำอาหารจากศูนย์” ที่เปลี่ยนไป ถ้าเป็นตำราอาหารในศตวรรษที่ 19 อาจเขียนวัตถุดิบว่า “หมู 1 ตัว” แล้วให้ไปเชือดเอง แต่ทุกวันนี้แน่นอนว่าคือไปซื้อเนื้อหมูที่แบ่งชิ้นใส่ถาดโฟมมาแล้ว
แต่ก็มีตลาดใหญ่มากของคนที่ได้ประโยชน์จาก self-hosting โดยไม่จำเป็นต้องเข้าใจรายละเอียดทุกอย่าง เช่น ถ้าใช้บริการแบบ managed service บนโดเมนของตัวเอง ก็ยังได้ข้อดีหลายอย่างพอสมควร เช่น การเป็นเจ้าของข้อมูล, ซอฟต์แวร์โอเพนซอร์ส, และการแข่งขันระหว่างผู้ให้บริการ เพราะงั้นน่าจะต้องมีคำที่กว้างกว่านี้ และช่วงนี้ผมใช้คำว่า indie hosting
ข้อยกเว้นที่ยอมรับกันโดยทั่วไปคือฝั่ง การป้องกันเครือข่าย เพราะถ้าเป็นไปได้คนส่วนใหญ่ก็ไม่อยากเปิดเผย IP บ้านตัวเองออกไปภายนอก จึงมีหลายคนใช้ Tailscale, Cloudflare Tunnel หรือ VPS เป็นพร็อกซี
ถ้ายังไม่พอ ในช่องแช่แข็งผมยังมีเนื้อหมูจากหมูที่เลี้ยงและชำแหละเอง รวมถึงเบคอนที่หมักเองที่บ้านด้วย คำว่า “วิญญาณเก่าในโลกใหม่” ดูจะเข้าทีมาก
ไม่ว่าคุณจะเช่าฮาร์ดแวร์นั้น, ประกอบเซิร์ฟเวอร์เอง, หรือใช้ virtual machine ที่ผู้ให้บริการให้มา ภาระงานด้านการดูแลรักษาก็ใกล้เคียงกันอยู่ดี ถึงอย่างนั้นมันก็ยังต่างจากการใช้ Wix/Squarespace, Geocities หรือแพลตฟอร์มโซเชียลมีเดีย
เพราะเขาเขียนไว้ว่า “ดังนั้นนี่จึงเป็นบทนำแบบนุ่มนวลสู่ self-hosting ที่ไม่ใช่ ‘self-hosting ของจริง’ แต่ก็ช่างมันเถอะ ถ้าอยากฟ้องก็เชิญ :)”
ผมชอบ self-hosting มากจริง ๆ และช่วงไม่กี่เดือนมานี้ก็ลงลึกไปพอสมควร ตอนนี้กำลังรันทั้งบริการสำหรับบริษัทและ homelab หลายชุด โดย deploy ไปที่ Hetzner VPS ด้วยไฟล์ Ansible + Docker Compose หรือผ่าน https://github.com/coollabsio/coolify/
คลัง awesome-selfhosted ก็เหมาะสำหรับหาว่าอยาก self-host โปรเจ็กต์อะไร แต่เพราะยังขาดฟีเจอร์ด้านความสะดวกในการใช้งาน ผมเลยทำไดเรกทอรีที่ปรับปรุงประสบการณ์ผู้ใช้นิดหน่อยไว้ที่ https://selfhostedworld.com มีการค้นหา, ตัวกรองตามจำนวนดาว/ความนิยม/วันที่ และ dark mode
ถ้าใช้เครื่องมือสมัยใหม่กับ virtual machine แล้วจะถือว่า ปลอดภัย พอสมควรไหม หรือยังต้องคอยใส่ใจต่อเนื่องแบบเช็กอัปเดตซอฟต์แวร์ทุกสัปดาห์? ผมอยากตั้งเซิร์ฟเวอร์มานานแล้ว และตอนนี้ก็มีโน้ตบุ๊กสำรอง เลยคิดว่าอย่างน้อยอาจลองรัน NAS ดู
https://ptah.sh
ฝั่งการยืนยันตัวตน ผมก็ทำ ตารางเปรียบเทียบ OIDC server ไว้ด้วย: https://github.com/lastlogin-net/obligator#comparison-is-the...
มีคำพูดประมาณว่า “ประหยัดเงินได้เท่าไร ก็เสียเวลาและสุขภาพจิตไปเท่านั้น จึงไม่ค่อยฉลาดในเชิงปฏิบัติ” และในคอมมูนิตี้ self-hosting นั้น Kubernetes มักถูกมองไม่ค่อยดีนัก แต่จริง ๆ แล้ว self-hosting โดยรวมก็มีด้านแบบนั้นอยู่แล้ว เพราะงั้นจะไปให้สุดทางเลยก็ไม่เลว
ตอนนี้กำลังรัน NixOS บน Dell R720XD 3 เครื่องเป็น k3s แบบ multi-master อยู่ ใช้ rook/ceph เป็นสตอเรจ และมีฮาร์ดดิสก์ขนาดไม่เท่ากันอยู่ราว ๆ 12 ลูก ท่าประจำที่ชอบที่สุดคือดึงฮาร์ดดิสก์ลูกไหนก็ได้ออกจากคลัสเตอร์ระหว่างสตรีมวิดีโอ ซึ่งระบบก็ไม่สนใจเลย พอเสียบกลับเข้าไปก็กลับมาเหมือนไม่มีอะไรเกิดขึ้น และตอนนี้ก็ยังมีพื้นที่เหลืออีกมาก เลยกำลังหาของมีประโยชน์มารันเพิ่มอยู่
ส่วนตัวใช้ Docker Swarm แม้จะมีแค่เดสก์ท็อปเล็ก ๆ 4 เครื่อง ถ้าเป็นฮาร์ดแวร์ที่คุณมี คิดว่าค่าไฟคงแตะ 200 ดอลลาร์ต่อเดือนได้ไม่ยาก Docker Swarm เก่าและไม่ค่อยนิยมแล้วก็จริง แต่ซับซ้อนกว่าการใช้ Docker ล้วน ๆ แค่นิดเดียว และให้ทุกอย่างที่ต้องการสำหรับการ deploy หลายโหนดกับ orchestration
วิธีนี้ทำให้ได้ข้อดีของ การตั้งค่า NixOS ขณะเดียวกันก็สามารถรันแอปพลิเคชันอะไรก็ได้ที่อาจไม่มีอยู่ใน nixpkgs ส่วนสตอเรจใช้ ZFS บน Proxmox ซึ่งเป็น hypervisor และแชร์ออกมาในเครื่องผ่าน NFS
[1] https://github.com/aksiksi/compose2nix
ต้นฉบับชี้ประเด็นนี้ไว้ได้ดี: “นี่คือปี 2024 ถึงเวลาแล้วที่จะหวนกลับไปหาความสนุกพื้นฐานของการตั้งค่าระบบด้วยตัวเอง”
self-hosting สนุกมากจริง ๆ เพราะมันเป็นส่วนผสมของการเรียนรู้ ความท้าทาย และการใช้งานจริง ขอ +1 ให้ Actual Budget กับ Changedetection.io แต่ขอ -1 ที่ไม่ได้พูดถึง threat modeling และความปลอดภัย ผู้เขียนต้นฉบับใช้ HTTPS ก็จริง แต่เปิดเว็บไซต์ไว้บนอินเทอร์เน็ตสาธารณะ คนที่เพิ่งเริ่มควรโฮสต์ให้ใช้ได้เฉพาะบน LAN หรือไม่ก็ล็อกให้แน่นมาก ๆ อย่างไรก็ตาม บน shared hosting อาจทำได้ยากหากไม่มีข้อจำกัด IP หรือ tunneling และฉันก็ไม่รู้ว่า uberspace มีสิ่งเหล่านี้ให้หรือเปล่า สำหรับคนที่พ้นช่วงเริ่มต้นไปแล้ว ขอแนะนำ Docker เพื่อให้รันหลายแอปเคียงกันได้มากขึ้น การรวม dependency ไว้เป็นชุดนั้นยอดเยี่ยมมาก ขอโปรโมตหนังสือของฉันที่พูดถึงแนวทางแบบ Docker นิดหน่อย: https://selfhostbook.com
เห็นด้วยกับเหล่ารุ่นเก๋าคนอื่น ๆ
ถ้าไม่ใช่ ฮาร์ดแวร์ของตัวเอง ที่กำลังทำงานอยู่ในพื้นที่ที่คุณเป็นเจ้าของหรือเช่าอยู่ ก็ไม่ถือว่าเป็น self-hosting ตอนนี้ฉันใช้แค่กล่อง Micro-ITX เล็ก ๆ ใบเดียว แต่เมื่อก่อนเคยมีแร็กเซิร์ฟเวอร์จริงจังที่ใส่ทั้งเซิร์ฟเวอร์ขนาด 6U, UPS และอุปกรณ์เครือข่ายด้วย เป็นเรื่องสมัยก่อนแต่งงาน
ฉันชอบ self-hosting มาก ได้เรียนรู้อะไรเยอะจากการทำโปรเจกต์งานอดิเรกเล็ก ๆ
เผื่อใครอยากรู้คอนฟิกของฉัน ก็เขียนไว้ตรงนี้ว่าไปซื้อ Dell R630 มือสองจาก eBay มาในราคาถูก ใช้ SSD 1TB RAID 1, RAM 32GB, 32 คอร์ แล้วก็สนุกรันแอปงานอดิเรกเล็ก ๆ ด้วย Docker, virsh และ minikube ซึ่งได้เรียนรู้ทั้งสามอย่าง มีอินเทอร์เน็ตไฟเบอร์ 1Gbps และมี cron job คอยตรวจทุก 1 นาทีว่า IP เปลี่ยนไหม จากนั้นก็ไปเปลี่ยน DNS A record ผ่าน Linode API
RAM 1.5GB ดิสก์ 10GB เหรอ? Cloud VPS เริ่มต้นของ Hetzner ให้ RAM 4GB กับดิสก์ 40GB ในราคา 4.51 ยูโร
ฝั่ง compute ระบุว่า “ในแต่ละ tenancy จะให้ฟรี 3,000 OCPU-hours แรกต่อเดือน และ 18,000GB-hours เพื่อให้สามารถสร้าง Ampere A1 Compute instance ได้ การใช้งาน free tier นี้แชร์กันระหว่าง bare metal, virtual machine และ container instance ทั้งหมด” ส่วน block storage ก็ประมาณว่า “สิทธิ์ free tier ของบริการ Block Volume มีรวม 200GB ต่อ tenancy ทั้งหมด หากมีหลายใบประเมินราคาใน tenancy เดียวกัน ก็ใช้รวมได้แค่ 200GB” สรุปคือได้ CPU ARM 4 คอร์ + RAM 24GB + พื้นที่ 200GB ฟรี
ขอเฉลยเลยว่า บทความนี้ไม่ได้เกี่ยวกับ self-hosting แต่เกี่ยวกับ shared hosting
แต่ถ้ามีใครมากระซิบข้างหูว่า K8S ล่ะก็…
ถ้าคุณเรียนจบจากไกด์นี้แล้ว ก็ควรไปดู /r/homelab กับ /r/homedatacenter ด้วย ;)