Le Duy Khuong

Chuỗi: supabase-series · Phần 10

Năng suất & công cụ dev

Deploy, CI/CD và multi-project

Deploy migration an toàn; CI/CD (secret, branch); nhiều project dev/staging/prod; bảo mật key; checklist deploy.

2026-03-173 phút đọcVI

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ồi supabase 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ặc production) 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

  1. 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.
  2. 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).
  3. 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.
  4. 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_role hoặ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 log

Checklist 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).

LDK

Le Duy Khuong

AI Transformation & Digital Strategy. Writing about agentic systems, engineering leadership, and building in public.