Giao diện
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ình | Giá trị |
|---|---|
| Root directory | compass.conan1.com |
| Build command | npm run build |
| Build output | dist |
| Node version | 22 |
| Biến môi trường | VITE_API_BASE=https://api.conan1.com |
| Custom domain | compass.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ình | Giá trị |
|---|---|
| Root directory | docs.conan1.com |
| Build command | npm run build |
| Build output | docs/.vitepress/dist |
| Node version | 22 |
| Custom domain | docs.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-compassLệ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:remoteKết nối GitHub
Trong Cloudflare Dashboard: Workers & Pages → Create → Worker → Connect to Git, chọn repo, đặt Root directory là api.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.com và api.conan1.com đều nằm sau Cloudflare Access.
- Zero Trust → Access → Applications → Add an application → Self-hosted.
- Tạo application cho
compass.conan1.comvà một application nữa choapi.conan1.com. - Policy:
EmailshoặcEmail domain— danh sách người được vào. - 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). - Copy Application Audience (AUD) Tag của application API và đặt vào
wrangler.jsonc→vars.ACCESS_AUD, cùng vớiACCESS_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 devbash
cd compass.conan1.com
npm install
npm run devKhi 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.