domain-check部署教程:域名到期监控仪表盘,基于Cloudflare Workers搭建

前言

domain-check 是一个基于 Cloudflare Worker + Worker KV 构建的域名到期监控仪表盘,支持自动 WHOIS 查询(含 RDAP 回退)、分组管理、到期提醒、Telegram 通知等功能。它可以帮助网站管理员轻松监控大量域名的到期时间,避免因忘记续费而丢失域名。


功能特点

功能 说明
🔐 双模式访问 / 公开页面(只读、域名脱敏)和 /admin 管理页面(需密码、完整操作)
🌐 域名管理 支持一级和二级域名的添加、编辑、删除、克隆
批量操作 复选框多选、全选、批量删除
🔍 WHOIS 自动查询 一级域名自动获取注册和到期信息(主源 ip.sb + 备用 RDAP)
📊 可视化仪表盘 域名状态概览、进度条、分组展示
🔒 密码保护 Cookie 鉴权,7 天有效期,退出登录不删除 Cookie
💾 KV 存储 每个域名独立 key 存储,无并发竞态
📦 数据备份 支持数据的导出和导入
📱 Telegram 通知 定时检查并推送即将到期提醒
📐 响应式设计 支持移动端和桌面端访问
🖼️ 精美模态框 替换浏览器原生 alert/confirm,毛玻璃效果
💎 续期功能 域名卡片支持年/月续费,自动更新到期时间并记录续费周期

路由架构

路径 权限 说明
/ 🔓 公开 域名/账号脱敏展示,不可操作
/admin 🔒 需密码 完整管理页面,所有操作按钮
/login 🔓 公开 登录页,成功后跳转 /admin
/logout 🔓 公开 跳转回首页,不删除 Cookie
/api/domains 🔒 全部需鉴权 域名 CRUD API
/api/whois/<domain> 🔓 公开 WHOIS 查询
/api/config 🔓 公开 前端配置(非敏感字段)
/cron 🔓 公开 手动触发到期检查

技术栈

类别 技术
运行平台 Cloudflare Workers
数据存储 Cloudflare KV
前端样式 CSS(毛玻璃效果)
开发语言 JavaScript
构建工具 Node.js

准备工作

在开始部署之前,需要准备以下内容:

  1. Cloudflare 账号 — 注册 Cloudflare 并绑定一个域名
  2. GitHub 账号 — 用于 Fork 仓库
  3. API Token — 需要具有 Worker 和 KV 权限的 API Token

部署步骤

1. 创建 KV 空间

  1. 登录 Cloudflare Dashboard
  2. 进入 Workers 和 PagesKV创建命名空间
  3. 输入名称,例如 DOMAIN_KV,点击创建
  4. 创建后在 KV 名称右侧会显示一串字符,这就是 KV ID,请保存下来备用

2. 获取 API Token

  1. 进入 Cloudflare Dashboard → 个人资料我的个人资料API 令牌
  2. 点击 创建令牌,选择 编辑 Cloudflare Workers 模板
  3. API 令牌 设置中,确保包含以下权限:
    • Account → Workers → Edit
    • Account → KV Storage → Edit
  4. 创建后复制 API Token 保存备用

⚠️ API Token 需要具有 Worker 和 KV 的读写权限,否则部署会失败。

3. Fork 项目仓库

访问 domain-check 项目,先给项目点个 ⭐,然后点击右上角 Fork,将仓库克隆到你的 GitHub 账号下。

4. 配置 GitHub Secrets

在 Fork 的仓库中,按以下步骤设置:

  1. 进入仓库 SettingsSecrets and variablesActions
  2. 点击 New repository secret,依次添加以下 secrets:
Secret 名称 说明 必填
CF_API_TOKEN Cloudflare API Token(需要 Worker 和 KV 权限)
CF_KV_ID 步骤 1 中创建的 KV 空间 ID
PASSWORD 访问管理页的密码(默认 123123,建议修改)
TGID Telegram 机器人 ID,用于发送通知
TGTOKEN Telegram 机器人 Token,用于发送通知

5. 配置 GitHub Variables

Secrets and variablesActionsVariables 选项卡中,添加以下变量:

变量名 说明 默认值/示例 必填
CF_ACCOUNT_ID Cloudflare 账户 ID(不是邮箱) 见下方说明
CF_CRONS 定时检查域名到期的 cron 表达式 见下方说明

如何获取 CF_ACCOUNT_ID:
登录 Cloudflare Dashboard,在右上角头像下拉菜单中可以看到你的账户 ID,或者从 URL 中提取:https://dash.cloudflare.com/ACCOUNT_ID/...

CF_CRONS 示例:

1
0 8 * * *   # 每天上午 8 点检查

6. 运行 GitHub Actions 部署

  1. 进入仓库 ActionsAll workflows
  2. 点击 自动部署到 CF worker
  3. 点击 Run workflowRun workflow
  4. 等待 Actions 运行完成,查看运行日志

[!TIP]
本项目部署方式采用 GitHub Actions,而非 Cloudflare 网页后台直接链接仓库部署。
这是因为 CF Worker 链接仓库部署存在 bug:KV 空间绑定和定时触发器的设置完全依赖于 wrangler.toml,如果 wrangler.toml 没有进行配置,项目在重新部署后会丢失参数,导致 KV 空间绑定以及定时器丢失。使用 GitHub Actions 可以确保相关参数配置持久化。

7. 绑定自定义域名

部署成功后:

  1. 点击 Actions 输出的 worker 管理后台 链接,进入 Cloudflare Workers 管理页面
  2. 在项目页面找到 自定义域添加自定义域
  3. 输入你的域名(例如 domain-check.你的域名),点击 部署
  4. 到 Cloudflare DNS 设置中添加相应的 DNS 记录,指向 your-worker-name.your-subdomain.workers.dev

配置环境变量(可选)

在 Worker 的环境变量中,还可设置以下可选变量:

变量名 说明 默认值/示例值 必填
DAYS 到期提醒天数 30
SITENAME 网站名称 域名到期监控
ICON 网站图标 https://example.com/icon.png
BGIMG 背景图片 https://example.com/bg.png
GITHUB_URL GitHub 链接 https://github.com/yutian81/domain-check
BLOG_URL 博客链接 https://blog.notett.com
BLOG_NAME 博客名称 QingYun Blog

使用指南

访问管理页

  1. 访问 https://你的域名/adminhttps://你的域名/login
  2. 输入你在 Secrets 中设置的密码登录
  3. 登录成功后 Cookie 有效期为 7 天,下次访问无需重新登录

添加域名

  1. 在管理页点击 添加域名 按钮
  2. 填写域名信息:
    • 域名:支持一级和二级域名
    • 分组:自定义分组标签
    • 注册商:域名注册商名称
    • 注册商地址:注册商网站链接
    • 注册账号:注册商登录账号
  3. 点击 保存,系统会自动通过 WHOIS 查询获取注册和到期信息

批量操作

  • 域名卡片右上角有 复选框,支持多选
  • 点击 全选 按钮切换勾选/取消当前页所有卡片
  • 点击 删除 删除所有勾选的域名
  • 点击 克隆 按钮:以该卡片信息预填充添加表单(域名留空),快速添加同注册商域名

数据导入/导出

  • 点击 导出 按钮导出所有域名数据为 JSON 文件
  • 点击 导入 按钮上传 JSON 文件恢复数据

续期功能

域名卡片上有一个 续期 按钮,支持年/月续费,会自动更新到期时间并记录续费周期。

手动触发检查

访问 https://你的域名/cron 可手动触发一次到期检查。


更新日志

2025-07-04

  • 新增续期功能:域名卡片新增「续期」按钮,支持年/月续费,自动更新到期时间并记录续费周期
  • 💎 全面毛玻璃化:所有模态框(编辑弹窗、续费弹窗、消息弹窗)统一半透明毛玻璃效果,降低透明度
  • 🏷️ 分组标签系统:域名卡片分组显示为彩色标签;编辑弹窗分组改为标签选择器(下拉选择+自定义输入+空格添加+标签删除)
  • 🔽 智能下拉选择:注册商名称、注册商地址、注册账号 增加基于已有数据的自动补全下拉选择器
  • 🔧 其他 UI 细节优化:卡片间距、标签间距、续费弹窗布局等

常见问题

部署后访问 500 错误?

确认 KV 空间 ID 和 API Token 正确,且 API Token 具有 Worker 和 KV 的读写权限。

无法登录管理页?

确认 PASSWORD Secret 已正确设置,密码与登录时输入的一致。

定时检查没有推送 Telegram 通知?

  1. 确认 TGIDTGTOKEN Secrets 已正确设置
  2. 确认 CF_CRONS Variables 已正确配置
  3. 确认 Telegram 机器人已正确创建并授权

如何修改部署参数?

修改 GitHub Secrets 或 Variables 后,重新运行 自动部署到 CF worker Workflow 即可。

如何绑定自定义域名?

在 Workers 管理后台 → 自定义域添加自定义域,然后到 Cloudflare DNS 设置中添加相应的 DNS 记录。


参考资料