N

Nokfa Docs

Current: framework-next.js

ไม่มีชื่อบทความ

🚀 เตรียมโปรดักชัน: Env Variables, Vercel Deployment, และการคุมค่าใช้จ่าย Firestore

🧭 ขั้นตอน Deploy ไปยัง Vercel

  1. สมัครหรือเข้าสู่ระบบที่ vercel.com
  2. กด “New Project” แล้วเลือก repo จาก GitHub
  3. เลือก root เป็นโฟลเดอร์ Next.js ที่ใช้ App Router (มี app/)
  4. ในหน้า 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

  1. จำกัด fields ที่ดึงมา (ใช้ select() เฉพาะ field ที่จำเป็น)
import { doc, getDoc } from 'firebase/firestore';
const ref = doc(db, 'users', 'abc123');
const snap = await getDoc(ref);
  1. ตั้ง TTL (Time-To-Live)

    • ไปที่ Firestore Indexes → TTL → เปิด TTL สำหรับ collection ที่เก็บข้อมูลชั่วคราว เช่น logs
  2. ใช้ 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 อย่างรัดกุม จะช่วยให้ระบบทำงานเสถียร ไม่บานปลายค่าใช้จ่าย และมั่นใจได้มากขึ้นเมื่อนำไปใช้กับลูกค้าจริง