แยก 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 |
ตั้งค่า project ใหม่
หัวข้อที่มีชื่อว่า “ตั้งค่า project ใหม่”export SUPABASE_ACCESS_TOKEN=sbp_... # หรือใส่ใน .env.local ที่ root (gitignore) — ห้ามใส่ในไฟล์ที่ commitexport SUPABASE_PROJECT_REF=<ref ของ project ใหม่>export CONFIRM_PROJECT=$SUPABASE_PROJECT_REF # สคริปต์ที่แก้ project อื่นที่ไม่ใช่ dev ต้องยืนยันด้วยตัวแปรนี้pnpm db:push # apply migration ทั้งหมดpnpm db:test # SQL tests (rollback เสมอ) — รันได้ทุก projectpnpm 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 pathsapps/docs/* - Auth → URL Configuration: ใส่ Site URL และ Redirect URLs ของโดเมนจริง (ลิงก์อีเมล/คำเชิญ)
- สร้าง platform admin คนแรก: เข้าสู่ระบบด้วยลิงก์อีเมลหนึ่งครั้ง แล้ว
pnpm platform-admin:add you@example.com
ลำดับการปล่อยเวอร์ชันใหม่
หัวข้อที่มีชื่อว่า “ลำดับการปล่อยเวอร์ชันใหม่”- dev:
db:push→db:test→test:api→build→test:pages - staging:
db:push→db:test→ deploy แอป → ทดสอบด้วยมือ - production: แจ้งหอ (ถ้ากระทบการใช้งาน) →
pnpm db:backup→db:push→ deploy แอป → เปิด/api/health