Skip to content

Deploy

Quy trình: push lên GitHub → Cloudflare tự build và deploy. Không chạy wrangler deploy hay wrangler pages deploy từ máy cá nhân.

Cloudflare Pages — frontend

Mỗi site frontend là một Pages project, kết nối với cùng một repo GitHub nhưng khác Root directory.

compass.conan1.com

Cấu hìnhGiá trị
Root directorycompass.conan1.com
Build commandnpm run build
Build outputdist
Node version22
Biến môi trườngVITE_API_BASE=https://api.conan1.com
Custom domaincompass.conan1.com

File public/_redirects đã có sẵn /* /index.html 200 để React Router hoạt động khi người dùng mở trực tiếp một URL con.

docs.conan1.com

Cấu hìnhGiá trị
Root directorydocs.conan1.com
Build commandnpm run build
Build outputdocs/.vitepress/dist
Node version22
Custom domaindocs.conan1.com

Cloudflare Worker — api.conan1.com

API là Worker chứ không phải Pages, vì binding D1 nằm ở Worker.

Tạo database (chạy một lần)

bash
cd api.conan1.com
npx wrangler d1 create conan-compass

Lệnh trên in ra database_id. Dán giá trị đó vào wrangler.jsonc, thay cho REPLACE_WITH_D1_DATABASE_ID.

Nạp schema và dữ liệu mẫu

bash
npm run db:remote

Kết nối GitHub

Trong Cloudflare Dashboard: Workers & Pages → Create → Worker → Connect to Git, chọn repo, đặt Root directoryapi.conan1.com, deploy command npx wrangler deploy.

Sau lần deploy đầu tiên, thêm custom domain api.conan1.com (đã khai báo sẵn trong wrangler.jsonc dưới dạng routes).

Cloudflare Access

Cả compass.conan1.comapi.conan1.com đều nằm sau Cloudflare Access.

  1. Zero Trust → Access → Applications → Add an application → Self-hosted.
  2. Tạo application cho compass.conan1.com và một application nữa cho api.conan1.com.
  3. Policy: Emails hoặc Email domain — danh sách người được vào.
  4. Bật Cookie settings → Same-site: None cho application của API nếu trình duyệt chặn cookie khi Compass gọi sang API (hai domain khác nhau nhưng cùng site conan1.com, thường không cần).
  5. Copy Application Audience (AUD) Tag của application API và đặt vào wrangler.jsoncvars.ACCESS_AUD, cùng với ACCESS_TEAM_DOMAIN (dạng <team>.cloudflareaccess.com).

WARNING

Nếu ACCESS_AUD để rỗng, Worker vẫn kiểm tra chữ ký và hạn của JWT nhưng không kiểm tra token đó được phát cho đúng application nào. Hãy điền giá trị này trước khi dùng thật.

Phát triển tại máy

bash
cd api.conan1.com
npm install
npm run db:local
npm run dev
bash
cd compass.conan1.com
npm install
npm run dev

Khi chạy local, Worker không có Cloudflare Access. File .dev.vars đặt DEV_BYPASS_EMAIL để giả lập danh tính người dùng. Không bao giờ đặt biến này trên production.