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

ตั้งค่า Project และ Supabase CLI

Supabase project เริ่มต้นจาก Postgres instance แบบ hosted พร้อม API key สองตัวที่ระดับความน่าเชื่อถือต่างกันมาก และ Supabase CLI คือสิ่งที่ทำให้คุณ link folder บนเครื่องเข้ากับ project นั้น แล้วรันทั้ง stack บนเครื่องตัวเองด้วย Docker ได้

คุณสร้าง hosted project ใหม่ได้จาก dashboard ของ Supabase หรือ shortcut database.new เบื้องหลัง Supabase จะ provision Postgres instance ของคุณเอง, API URL และ API key สองตัว

  • anon key — public ใช้ใน client-side code ได้ปลอดภัย (browser bundle, mobile app) request ที่ใช้ key นี้ต้องผ่าน Row Level Security
  • service_role key — secret, full-access, bypass Row Level Security ทั้งหมด ใช้เฉพาะกับ server-side code ที่เชื่อถือได้เท่านั้น
// Server-side only — e.g. an API route, a cron job, an Edge Function.
// process.env.SUPABASE_SERVICE_ROLE_KEY must never be bundled into client code.
import { createClient } from '@supabase/supabase-js';
const supabaseAdmin = createClient(
process.env.SUPABASE_URL!,
process.env.SUPABASE_SERVICE_ROLE_KEY!
);

CLI คือวิธีจัดการ project เป็น code แทนที่จะทำผ่าน dashboard อย่างเดียว

Terminal window
# Scaffold a local supabase/ config directory in your project
npx supabase init
# Authenticate the CLI with your Supabase account
supabase login
# Connect this local project folder to a specific hosted project
supabase link --project-ref <project-ref>

supabase link คือคำสั่งที่บอกว่า folder supabase/ บนเครื่องคุณตรงกับ hosted project ตัวไหน — db push หรือ db diff ครั้งต่อ ๆ ไปจะเล็งไปที่ project ที่ link ไว้นี้เสมอ

Terminal window
supabase start

คำสั่งนี้จะสตาร์ท Supabase stack ทั้งชุดบนเครื่องตัวเองผ่าน Docker — Postgres, Studio, Auth, Storage, Realtime และอื่น ๆ รันเป็น container บนเครื่องคุณทั้งหมด นั่นแปลว่าคุณ develop และ test schema, RLS policy และ client code ได้แบบ offline เต็มรูปแบบ โดยไม่มีความเสี่ยงต่อ hosted project เลย ก่อนจะรัน supabase db push ขึ้นของจริง

flowchart LR
  subgraph local["Local machine (supabase start)"]
    lpg[("Postgres")]
    lstudio["Studio"]
    lauth["Auth"]
    lstorage["Storage"]
  end
  subgraph hosted["Hosted project"]
    hpg[("Postgres")]
    hapi["API URL + anon/service_role keys"]
  end
  local -- "supabase link --project-ref" --> hosted
  local -- "supabase db push" --> hosted
Local Docker-based stack ที่ link เข้ากับ hosted project
anon key กับ service_role key ต่างกันตรงไหนหลัก ๆ
ทำไม service_role key ห้ามหลุดไปถึง client-side code
`supabase start` ทำอะไร
`supabase link --project-ref <ref>` ทำอะไร