Appearance
Deploy
Hai project Cloudflare Pages từ cùng một repo GitHub.
| Project | Root directory | Build command | Output | Domain gợi ý |
|---|---|---|---|---|
nemo-planner | / | (không build) | public | planner… |
docs-nemoplanner | / | npm run docs:build | docs/.vitepress/dist | docs.nemoplanner… |
1 · Tạo D1 và nạp dữ liệu
bash
npm install
npx wrangler login
npm run db:create # copy database_id vào wrangler.toml
npm run db:schema:remote
npm run db:seed:remote # chỉ chạy một lần, vì nó xoá dữ liệu cũ2 · Planner (Pages + Functions)
- Đẩy repo lên GitHub.
- Cloudflare Dashboard → Workers & Pages → Create → Pages → Connect to Git.
- Build output directory:
public. Bỏ trống build command. - Settings → Functions → D1 database bindings: biến
DB→ databasenemo-planner.
3 · Docs
Tạo project thứ hai cùng repo, build command npm run docs:build, output docs/.vitepress/dist.
4 · Giới hạn truy cập (nên làm trước khi chia sẻ link)
Planner cho phép ghi dữ liệu, nên chỉ mentor được vào. Dùng Cloudflare Access (Zero Trust → Access → Applications → Self-hosted), thêm chính sách Allow theo email mentor, áp dụng cho cả planner và docs. Không cần viết code đăng nhập.
5 · Tự động đồng bộ D1 → git
Workflow sync-seed.yml cần 3 secret trong GitHub (Settings → Secrets → Actions):
| Secret | Giá trị |
|---|---|
PLANNER_URL | URL của Planner, vd https://nemo-planner.pages.dev |
CF_ACCESS_CLIENT_ID | Từ service token |
CF_ACCESS_CLIENT_SECRET | Từ service token |
Tạo service token: Zero Trust → Access → Service Auth → Create Service Token. Rồi thêm vào policy của application Planner một rule Service Auth (action Service Auth, include Service Token vừa tạo). Nếu bỏ qua, Action sẽ bị Access chặn và báo lỗi, không ghi gì vào repo.
Chạy local
bash
npm run db:schema:local && npm run db:seed:local
npm run dev # Planner tại http://localhost:8788
npm run docs:dev # Docs