Deploy เว็บแอปด้วย Cloudflare Pages + D1
เริ่มจากโปรเจกต์เล็ก ๆ สู่การใช้งานจริง พร้อมข้อดีของ Cloudflare D1 ฐานข้อมูล SQLite ที่กระจายตัวทั่วโลก
Cloudflare ไม่ได้เป็นแค่ CDN หรือ DNS อีกแล้ว ตอนนี้มีทั้ง Workers, Pages, D1, R2, KV, Durable Objects ครบครันพอจะ build web app ขนาดกลางได้โดยไม่ต้องพึ่ง AWS/GCP บทความนี้พูดถึง Cloudflare Pages + D1 ที่ใช้คู่กันเพื่อ deploy full-stack app ขนาดเล็ก
Cloudflare Pages คืออะไร
Pages คือ static hosting แบบเดียวกับ Vercel/Netlify แต่เชื่อมตรงกับ Workers ได้ทันที ทำให้เพิ่ม API endpoint เป็น serverless function ใน repo เดียวกันได้เลยโดยไม่ต้อง deploy แยก ทุก deploy ได้ global CDN ฟรี
Build workflow
Connect repo กับ Pages, Cloudflare จะ trigger build ทุกครั้งที่ push กับ branch main ตั้ง preview deployment ได้ทุก PR ทำให้ review change ได้ก่อน merge เหมือน workflow ของ Vercel
D1: SQLite ที่กระจายตัวทั่วโลก
D1 เป็น managed SQLite ที่ Cloudflare รันใน edge network ข้อดีคือ query latency ต่ำมากเพราะ database อยู่ใกล้ user แต่ข้อเสียคือ — ยัง write ได้จาก region เดียว (primary) เวลา write จะ replicate ไปทั่วโลกภายหลัง
สำหรับ read-heavy workload เช่น บล็อก, catalog, documentation D1 เหมาะมาก ส่วน app ที่ write หนัก ๆ ยังต้องดูว่าเหมาะไหม
D1 ไม่ใช่ replacement ของ PostgreSQL — มันเป็นทางเลือกสำหรับ app ที่ read > write และต้องการ global reach
Migration
D1 รองรับ migration แบบ versioned โดยเก็บไฟล์ SQL ใน migrations/ แล้วใช้ wrangler d1 migrations apply รัน migration จะถูก track ใน table _cf_KV ห้ามแก้ย้อนหลัง ให้เขียน migration ใหม่ขึ้นไปเสมอ
ข้อจำกัดที่ต้องรู้
D1 ยังมี database size limit (ปัจจุบัน 10GB per database) และรองรับ SQL subset ไม่ครบทุก feature ของ SQLite เช่น SAVEPOINT หรือ triggers บางแบบ — ควรอ่าน documentation ก่อนย้ายมาจาก SQLite full
อีกข้อคือ Pages Functions (Workers ใต้ Pages) มี CPU limit 50ms ต่อ request สำหรับ free tier ถ้า query ซับซ้อนอาจจะ timeout ดังนั้นควร optimize query ให้เรียบง่าย + ใส่ index ให้ถูก
เริ่มต้นอย่างไร
1. สร้าง project Astro หรือ Next.js ธรรมดา, 2. push ขึ้น GitHub, 3. เข้า Cloudflare Dashboard → Pages → Connect Git, 4. ตั้ง build command, 5. สร้าง D1 database ผ่าน wrangler CLI, 6. bind database ใน wrangler.toml, 7. เขียน Pages Functions เรียก env.DB — จบครบ full-stack ภายใน 1 ชั่วโมง
สรุป
Cloudflare Pages + D1 เป็นทางเลือกที่ประหยัดสำหรับ web app ขนาดเล็ก-กลาง โดยเฉพาะถ้ามี audience ทั่วโลก latency ต่ำสุดเมื่อเทียบกับ US-only stack ของ Vercel/Railway ส่วนที่ยังต้องพัฒนาคือ D1 ที่ยังใหม่เมื่อเทียบกับ PostgreSQL แต่สำหรับ use case ที่เหมาะก็ทำงานได้ดีมาก