ข้ามไปยังเนื้อหา

แยก dev / staging / production

แยก Supabase project ก่อนเปิดใช้จริง และคำสั่งที่ใช้กับแต่ละ project

ตอนนี้มี project เดียว (dev: yuvwdonxkdncllcjkuuj) ก่อน Go-live ให้สร้างเพิ่ม 2 project ในองค์กร Supabase เดียวกัน (region Singapore):

Project ใช้ทำอะไร ข้อมูล
dev พัฒนา + รัน test ทุกชุด ข้อมูลทดสอบ
staging ทดสอบก่อนปล่อย + ซ้อมนำเข้าข้อมูลหอนำร่อง สำเนาข้อมูลจริงที่ปิดข้อมูลส่วนตัวแล้ว หรือข้อมูลทดสอบ
production หอใช้งานจริง ข้อมูลจริง — ห้ามรัน test:api / test:pages
Terminal window
export SUPABASE_ACCESS_TOKEN=sbp_... # หรือใส่ใน .env.local ที่ root (gitignore) — ห้ามใส่ในไฟล์ที่ commit
export SUPABASE_PROJECT_REF=<ref ของ project ใหม่>
export CONFIRM_PROJECT=$SUPABASE_PROJECT_REF # สคริปต์ที่แก้ project อื่นที่ไม่ใช่ dev ต้องยืนยันด้วยตัวแปรนี้
pnpm db:push # apply migration ทั้งหมด
pnpm db:test # SQL tests (rollback เสมอ) — รันได้ทุก project
pnpm functions:deploy # Edge Functions (purge-org-files)
  • ตั้ง PRODUCTION_PROJECT_REF=<ref production> ไว้ใน shell — test:api และ test:pages จะไม่ยอมรันกับ production
  • แอป: ตั้ง NEXT_PUBLIC_SUPABASE_URL และ NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY ของแต่ละ project ในที่ deploy (Vercel: Environment Variables แยก Preview/Production)
  • Vercel: apps/admin และ apps/tenant เป็น 2 โปรเจกต์ (Root Directory ของแต่ละแอป + ติ๊ก “Include files outside the root directory”), ตั้ง ENABLE_EXPERIMENTAL_COREPACK=1, Function Region Singapore (sin1) ให้ใกล้ Supabase, เปิด “Skip deployments when there are no changes to the root directory” — คู่มือ (apps/docs) อยู่บน Cloudflare ตั้ง Build watch paths apps/docs/*
  • Auth → URL Configuration: ใส่ Site URL และ Redirect URLs ของโดเมนจริง (ลิงก์อีเมล/คำเชิญ)
  • สร้าง platform admin คนแรก: เข้าสู่ระบบด้วยลิงก์อีเมลหนึ่งครั้ง แล้ว pnpm platform-admin:add you@example.com
  1. dev: db:push → db:test → test:api → build → test:pages
  2. staging: db:push → db:test → deploy แอป → ทดสอบด้วยมือ
  3. production: แจ้งหอ (ถ้ากระทบการใช้งาน) → pnpm db:backup → db:push → deploy แอป → เปิด /api/health