ไม่มีชื่อบทความ
🚀 เตรียมโปรดักชัน: Env Variables, Vercel Deployment, และการคุมค่าใช้จ่าย Firestore
🧭 ขั้นตอน Deploy ไปยัง Vercel
- สมัครหรือเข้าสู่ระบบที่ vercel.com
- กด “New Project” แล้วเลือก repo จาก GitHub
- เลือก root เป็นโฟลเดอร์ Next.js ที่ใช้ App Router (มี
app/) - ในหน้า Environment Variables:
- เพิ่มค่าจาก
.env.localเช่นNEXT_PUBLIC_FIREBASE_API_KEYเป็นต้น - แยก ENV ของแต่ละสภาพแวดล้อมได้ (Production / Preview / Development)
- เพิ่มค่าจาก
🌤 การใช้ VERCEL_ENV
if (process.env.VERCEL_ENV === 'production') {
// ทำเฉพาะเมื่อ deploy จริง เช่น log analytics
}
ค่าที่เป็นไปได้:
production,preview,development
❗ เพิ่ม Error Logging ที่ app/page.js หรือ app/layout.js
'use client';
import { useEffect } from 'react';
export default function ErrorLogger({ children }) {
useEffect(() => {
window.addEventListener('error', (e) => {
console.error('💥 Frontend Error:', e.message);
// สามารถส่งไปยังระบบ log ภายนอก เช่น Sentry
});
}, []);
return children;
}
💰 วิธีควบคุมค่าใช้จ่าย Firestore
- จำกัด fields ที่ดึงมา (ใช้
select()เฉพาะ field ที่จำเป็น)
import { doc, getDoc } from 'firebase/firestore';
const ref = doc(db, 'users', 'abc123');
const snap = await getDoc(ref);
ตั้ง TTL (Time-To-Live)
- ไปที่ Firestore Indexes → TTL → เปิด TTL สำหรับ collection ที่เก็บข้อมูลชั่วคราว เช่น logs
ใช้
listDocumentsแทนgetDocs- กรณีต้องการลบชุดข้อมูลโดยไม่อ่านเนื้อหา เช่น batch delete
import { listDocuments, deleteDoc } from 'firebase/firestore';
const docs = await listDocuments(db, 'logs');
await Promise.all(docs.map(doc => deleteDoc(doc.ref)));
✅ เช็กลิสต์ก่อนเปิดให้ลูกค้าใช้งานจริง
| รายการ | สถานะ |
|---|---|
| [ ] ตั้ง Environment Variables ครบทุกตัวใน Vercel | |
| [ ] ใช้ VERCEL_ENV เช็คสภาพแวดล้อม | |
| [ ] ซ่อน console log ที่ไม่จำเป็นใน production | |
| [ ] จำกัด fields ที่อ่านจาก Firestore | |
| [ ] เปิด TTL สำหรับข้อมูลที่ไม่ถาวร | |
| [ ] ทดสอบ rules ใน Rules Playground | |
| [ ] ทดสอบฟังก์ชันทุก endpoint ทั้ง success/fail case | |
| [ ] ตั้ง fallback UI สำหรับ error (เช่น Error Boundary) |
การเตรียม Production อย่างรัดกุม จะช่วยให้ระบบทำงานเสถียร ไม่บานปลายค่าใช้จ่าย และมั่นใจได้มากขึ้นเมื่อนำไปใช้กับลูกค้าจริง