2026-03-173 phút đọcVI
- 0.Chuỗi bài: Supabase từ setup đến deploy
- 1.Tổng quan Supabase
- 2.Project setup, CLI và biến môi trường
- 3.Thiết kế schema Postgres và bảng
- 4.Migrations: viết và áp dụng
- 5.Auth: JWT, session và tích hợp backend
- 6.Prisma + Supabase: kết nối và đồng bộ schema
- 7.Row Level Security (RLS) và policy
- 8.API: PostgREST, custom API và khi nào dùng gì
- 9.Realtime và Edge Functions
- 10.Deploy, CI/CD và multi-project(bài này)
Deploy, CI/CD and multi-project
Introduction
Final post in the series: deploy migrations safely, CI/CD (secrets, branch), multiple projects (dev / staging / prod) and secure keys. Apply environment separation, no logging of secrets, and a deploy checklist (manifest) when needed.
Goal: Have a consistent process for deploying migrations and app; clear dev/staging/prod split; keys and secrets never in repo or logs.
Chức năng
Deploy migration
- Local → cloud: Sau khi test migration local (
supabase db reset), link project (staging trước):supabase link --project-ref <staging-ref>, rồisupabase db push. Kiểm tra ứng dụng chạy đúng trên staging rồi mới push lên production. - Rollback: Không có “rollback migration” tự động; muốn undo phải viết migration mới (ALTER/DROP). Backup DB trước khi push migration lớn hoặc có risk.
CI/CD
- Secret: SUPABASE_SERVICE_ROLE_KEY, JWT secret, DB password đặt trong CI/CD variables (GitHub Secrets, GitLab CI variables); không ghi trong repo. Script chỉ đọc từ env.
- Branch: Thường
main(hoặcproduction) deploy prod; branch khác deploy preview/staging. Migration nên chạy trong bước deploy (vd.supabase link+supabase db push) với secret từ CI. - Checklist deploy: Document bước: build → chạy migration (staging rồi prod) → deploy app → smoke test. Gọi là “deployment checklist” hoặc “release runbook”; giúp không bỏ bước (vd. quên push migration).
Multi-project
- Mô hình: Mỗi môi trường một project Supabase (dev, staging, prod) → URL và key khác nhau; app mỗi env đọc đúng bộ biến. Hoặc một project nhiều branch (Supabase Branching) nếu dùng tính năng đó.
- Shared vs dedicated: “Dedicated” = mỗi app/microservice một project (tách DB); “shared” = nhiều app dùng chung một project. Chọn theo nhu cầu tách dữ liệu và chi phí.
Workflow / Process
- Chuẩn bị: Repo có
supabase/migrations/; CI có biến SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY (hoặc DB URL cho migration) cho từng env. - Merge PR: Sau merge vào branch tương ứng, pipeline build và test. Bước deploy: link project (ref từ env) →
supabase db push(chạy migration mới) → deploy ứng dụng (build, deploy serverless hoặc container). - Thứ tự env: Deploy staging trước; verify (test tay hoặc E2E); rồi deploy production. Migration luôn chạy trước hoặc cùng lúc với deploy app tương thích schema.
- Audit: Không log URL, key, token trong CI log; kiểm tra pre-commit hoặc CI không commit file chứa
service_rolehoặc password.
Quy ước: Một checklist deploy (bước, thứ tự, người chịu trách nhiệm) cho release; secret chỉ trong env/secret manager.
Sample code
CI (GitHub Actions) — ví dụ bước deploy migration
- name: Push migrations (staging)
env:
SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
run: |
npx supabase link --project-ref ${{ secrets.SUPABASE_STAGING_REF }}
npx supabase db push
# Không echo token/ref thật ra logChecklist deploy (markdown trong repo)
## Deploy production
1. Đảm bảo staging đã chạy ổn với migration mới.
2. Trong CI: chạy job deploy prod (link prod project, db push, deploy app).
3. Smoke test: login, tạo resource, kiểm tra Realtime nếu có.
4. Nếu lỗi: xem log (không có secret), rollback app hoặc xử lý migration theo runbook.Tách env trong app
# .env.staging
SUPABASE_URL=https://xxx-staging.supabase.co
SUPABASE_ANON_KEY=...
# .env.production
SUPABASE_URL=https://xxx-prod.supabase.co
SUPABASE_ANON_KEY=...App đọc đúng file theo NODE_ENV hoặc biến DEPLOY_ENV; không hardcode URL/key.
Áp dụng trong kiến trúc
- Tách môi trường: Dev/staging/prod có project và bộ biến riêng; deploy migration và app theo thứ tự, staging trước prod. Tránh dùng chung DB giữa env.
- Không log secret: URL có thể log (thường không nhạy); key, password, token tuyệt đối không in ra log hoặc response. CI và pre-commit kiểm tra pattern lộ key.
- Checklist deploy: Có bước rõ ràng (migration → deploy app → verify) giúp giảm lỗi người và dễ rollback tinh thần (biết đã làm tới đâu).
Kết
Chuỗi 10 bài kết thúc tại đây: từ tổng quan Supabase, setup, schema, migrations, auth, Prisma, RLS, API, Realtime/Edge đến deploy và CI/CD. Áp dụng tách môi trường, secret an toàn và checklist deploy để vận hành ổn định.
Về đầu chuỗi: 00 — Giới thiệu chuỗi
Đọc thêm: Supabase — Self-hosting, Branching (nếu dùng).