4.8 KiB
4.8 KiB
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/
├── 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.jsondevDependencies) - Cloudflare 账号(Workers + D1)
快速开始
git clone <仓库 URL>
cd domainflare
npm install
npm --prefix frontend install
npx wrangler login
首次:创建 D1 并迁移
npx wrangler d1 create domainflare
将命令输出中的 database_id 写入 wrangler.toml 的 [[d1_databases]] 对应项,然后:
npm run db:migrate:remote # 远程 D1
npm run db:migrate:local # 本地 wrangler dev 使用的 SQLite
本地开发
需要先同时跑 Worker 与 Vite 开发服务器(根目录脚本已用 concurrently 封装):
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:
npm run deploy
等价于 npm run build:frontend && wrangler deploy。仅更新 Worker 代码而不改前端时,仍可直接 npx wrangler deploy(需已存在 frontend/dist)。
生产环境推荐通过 Secret 配置面板口令,避免把 APP_ACCESS_TOKEN 写在配置文件中:
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
- 导入
imports/Domainflare.environment.postman.json并填写变量。 - 导入
imports/Domainflare.postman_collection.json,选中该环境。
- 导入
-
Apifox
导入→Postman→Domainflare.environment.postman.json。导入→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 <Cloudflare API Token>。
安全提示
- 使用强随机
APP_ACCESS_TOKEN;生产用 Secret 管理;限制 Worker 暴露面(例如配合 Cloudflare Access)。 GET /api/accounts返回完整 CF Token,仅在内网或可信环境使用。- Cloudflare Token 遵循最小权限(如仅 Zone DNS 编辑)。
许可
仓库未包含 LICENSE 时,由维护者自行补充;使用本代码请遵守适用法律法规与 Cloudflare 服务条款。