Files
domainflare/README.md
2026-06-24 22:10:24 +08:00

132 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 <Cloudflare API Token>`
## 安全提示
- 使用强随机 `APP_ACCESS_TOKEN`;生产用 Secret 管理;限制 Worker 暴露面(例如配合 **Cloudflare Access**)。
- `GET /api/accounts` 返回完整 CF Token仅在内网或可信环境使用。
- Cloudflare Token 遵循**最小权限**(如仅 Zone DNS 编辑)。
## 许可
仓库未包含 `LICENSE` 时,由维护者自行补充;使用本代码请遵守适用法律法规与 Cloudflare 服务条款。