# Domainflare 基于 **Cloudflare Workers** 的 **多账号 DNS 解析管理**:Web 面板 + **D1** 存储账号,HTTP **透传**官方 **API v4**(`/api/cf/*`),并提供与 `X-App-Token` / Bearer 一致的 **管理 API**,便于脚本与第三方工具集成。 ## 功能概览 | 类型 | 说明 | |------|------| | Web 面板 | **React + Vite**;多 Zone、DNS 筛选与分页、增删改、DNSSEC、导出 JSON;响应式布局(由 Workers Static Assets 下发,不进入 Worker 脚本包体) | | 存储 | **D1** 表 `cf_accounts` 持久化账号名称与 Cloudflare API Token | | HTTP API | `GET /api` 目录、`GET /api/health` 探活、`/api/accounts` CRUD、`/api/cf/*` → `https://api.cloudflare.com/client/v4/*` | 完整接口说明、curl 与安全约定见:**[domainflare API调用文档.md](./domainflare%20API调用文档.md)**。 ## 仓库结构(节选) ``` domainflare/ ├── src/ # Worker:模块化 Hono API(仅 /api) │ ├── index.ts │ ├── app.ts │ ├── routes/ # meta、accounts、cf 代理 │ ├── lib/ # 鉴权、HTTP 工具 │ └── types/ ├── frontend/ # React + Vite 面板(构建产物 → Workers Static Assets) │ ├── src/ │ └── dist/ # wrangler `[assets].directory`,由 `npm run build:frontend` 生成 ├── migrations/ # D1 SQL 迁移 ├── imports/ # Postman / OpenAPI / 环境模板 ├── wrangler.toml ├── domainflare API调用文档.md └── README.md ``` ## 环境要求 - **Node.js** 18+(建议 LTS) - **Wrangler** 4.x(见根目录 `package.json` devDependencies) - Cloudflare 账号(**Workers** + **D1**) ## 快速开始 ```bash git clone <仓库 URL> cd domainflare npm install npm --prefix frontend install npx wrangler login ``` ### 首次:创建 D1 并迁移 ```bash npx wrangler d1 create domainflare ``` 将命令输出中的 `database_id` 写入 `wrangler.toml` 的 `[[d1_databases]]` 对应项,然后: ```bash npm run db:migrate:remote # 远程 D1 npm run db:migrate:local # 本地 wrangler dev 使用的 SQLite ``` ### 本地开发 需要先同时跑 **Worker** 与 **Vite 开发服务器**(根目录脚本已用 `concurrently` 封装): ```bash npm install npm --prefix frontend install # 首次克隆后安装前端依赖 npm run dev ``` - **Worker** 默认:`http://127.0.0.1:8787`(`wrangler dev`) - **面板**:`http://127.0.0.1:5173`(Vite),已通过 `vite.config.ts` 将 `/api` 代理到 Worker 在浏览器打开 **5173** 端口即可。默认 **`APP_ACCESS_TOKEN`** 可在 `wrangler.toml` 的 `[vars]` 中查看;**勿在生产依赖默认示例值**。 ### 生产部署 一键先构建前端再上传 Worker + Static Assets: ```bash npm run deploy ``` 等价于 `npm run build:frontend && wrangler deploy`。仅更新 Worker 代码而不改前端时,仍可直接 `npx wrangler deploy`(需已存在 `frontend/dist`)。 生产环境推荐通过 **Secret** 配置面板口令,避免把 `APP_ACCESS_TOKEN` 写在配置文件中: ```bash npx wrangler secret put APP_ACCESS_TOKEN ``` 部署完成后,将 Worker 的**根 URL**(无末尾 `/`)作为 API 文档中的 **`BASE`**。 ## 配置说明 | 配置项 | 说明 | |--------|------| | `APP_ACCESS_TOKEN` | 保护管理接口与 `/api/cf/*` 中的面板身份;**不**应用于 `GET /api`、`GET /api/health` | | D1 `cf_accounts` | 由迁移创建;字段 `id`、`name`、`token`、`created_at` | ## API 与导入工具 - **环境变量约定**(与文档一致) - `BASE`:Worker 根 URL,无末尾 `/` - `PANEL_TOKEN`:即 `APP_ACCESS_TOKEN` - **Postman** 1. 导入 `imports/Domainflare.environment.postman.json` 并填写变量。 2. 导入 `imports/Domainflare.postman_collection.json`,选中该环境。 - **Apifox** 1. `导入` → `Postman` → `Domainflare.environment.postman.json`。 2. `导入` → `OpenAPI` → `Domainflare.apifox.openapi.json`;认证中 `PanelHeader` / `PanelBearer` 使用 `{{PANEL_TOKEN}}`,`CfBearer` 使用 `{{cfToken}}`。 **鉴权速记** - **管理类**(`/api/verify`、`/api/accounts`…):`X-App-Token: <口令>` **或** `Authorization: Bearer <口令>`。 - **透传** `/api/cf/*`:**必须** `X-App-Token` + `Authorization: Bearer `。 ## 安全提示 - 使用强随机 `APP_ACCESS_TOKEN`;生产用 Secret 管理;限制 Worker 暴露面(例如配合 **Cloudflare Access**)。 - `GET /api/accounts` 返回完整 CF Token,仅在内网或可信环境使用。 - Cloudflare Token 遵循**最小权限**(如仅 Zone DNS 编辑)。 ## 许可 仓库未包含 `LICENSE` 时,由维护者自行补充;使用本代码请遵守适用法律法规与 Cloudflare 服务条款。