1762 字
9 分钟
CF-Cron - Cloudflare Worker 定时任务管理系统
CF-Cron - Cloudflare Worker 定时任务管理系统
📝 项目概述
CF-Cron 是一款基于 Cloudflare Workers 和 D1 数据库构建的定时任务管理系统,灵感来源于 gocron 的设计思路。该系统专注于 HTTP 请求类型的定时任务管理,并提供了功能完整的 Web 管理界面,方便用户直观地操作和监控定时任务。
✨ 核心功能
- 完整的任务生命周期管理:支持创建、编辑、删除、启用/禁用定时任务
- 灵活的 HTTP 请求支持:兼容 GET、POST 等多种请求方法
- 高度自定义配置:允许设置自定义请求头和请求体
- 详细的日志记录系统:完整记录任务执行日志和系统登录日志
- 精细的角色权限控制:区分管理员和普通用户权限
- 现代化响应式界面:基于 Ant Design 构建的美观用户界面
- 性能优化机制:实现任务缓存,减少数据库查询压力
- 智能 Token 管理:Token 过期后自动跳转到登录页面
- 资源使用监控:优化任务执行过程中的资源消耗
🛠️ 技术架构
前端技术栈
- React + TypeScript:构建现代化、类型安全的前端应用
- Vite:快速的前端构建工具
- Ant Design:提供丰富的 UI 组件
- React Router:管理前端路由
- Fetch API:处理 HTTP 客户端请求
后端技术栈
- Cloudflare Workers:无服务器计算平台
- Hono Web 框架:轻量高效的 API 框架
- Cloudflare D1 数据库:SQLite 兼容的边缘数据库
- JWT 认证:安全的用户身份验证
- Cron 表达式解析:精确调度定时任务
📁 项目结构
cf-cron/├── client/ # 前端应用│ ├── public/ # 静态资源文件│ ├── src/ # 前端源代码│ │ ├── components/ # 可复用组件│ │ ├── pages/ # 页面组件│ │ ├── App.tsx # 应用主入口│ │ └── main.tsx # 渲染入口│ ├── package.json # 前端依赖配置│ └── vite.config.ts # Vite 构建配置├── server/ # 后端服务│ ├── routes/ # API 路由定义│ ├── services/ # 业务逻辑层│ ├── sql/ # 数据库相关文件│ ├── index.ts # 后端应用入口│ ├── package.json # 后端依赖配置│ └── wrangler.toml # Cloudflare Workers 配置├── .gitignore # Git 忽略规则└── README.md # 项目文档🚀 部署指南
1. 环境准备
- Node.js 20+ 运行环境
- npm 或 yarn 包管理工具
- Cloudflare 账户
- Wrangler CLI 工具(
npm install -g wrangler)
2. 依赖安装
前端依赖
cd clientnpm install后端依赖
cd servernpm install3. 本地开发
启动后端服务
cd servernpm run dev -- --test-scheduled服务将运行在 http://localhost:8787
启动前端开发服务器
cd clientnpm run dev前端将运行在 http://localhost:5173
4. Cloudflare 部署
准备工作
- 登录 Cloudflare 账户
- 创建新的 Worker 项目
- 配置 D1 数据库(命名为
cf-cron-db)
配置 Wrangler
编辑 server/wrangler.toml 文件:
name = "cf-cron"main = "index.ts"compatibility_date = "2025-12-08"
d1_databases = [ { binding = "DB", database_name = "cf-cron-db", database_id = "" # 填写 Cloudflare 控制台中的数据库 ID }]
[vars]JWT_SECRET = "" # 配置安全的 JWT 密钥
[triggers]crons = ["* * * * *"] # 每分钟检查一次任务数据库初始化
cd servernpm run db:migrate部署后端
cd servernpm run deploy配置前端 API 地址
在 client/.env 文件中添加:
VITE_SERVER_URL=https://YOUR_WORKER_NAME.YOUR_ACCOUNT.workers.dev/api构建前端
cd clientnpm run build部署前端
将 client/dist 目录部署到 Cloudflare Pages。
📊 数据模型
用户表 (users)
id: 用户唯一标识username: 用户名(唯一)password: 密码哈希值salt: 密码加密盐值email: 邮箱地址(唯一)is_admin: 是否为管理员status: 用户状态(启用/禁用)created: 创建时间updated: 更新时间
任务表 (tasks)
id: 任务唯一标识name: 任务名称level: 任务优先级spec: Cron 表达式protocol: 执行协议(1=HTTP)command: 请求 URLhttp_method: HTTP 请求方法timeout: 超时时间(秒)retry_times: 失败重试次数retry_interval: 重试间隔(秒)status: 任务状态(启用/禁用)request_headers: HTTP 请求头(JSON 格式)request_body: HTTP 请求体created: 创建时间deleted: 删除时间
🔐 系统默认账户
系统初始化后自动创建默认管理员账户:
- 用户名:
admin - 密码:
123456
⚠️ 安全提示:首次登录后请立即修改默认密码!
📖 使用教程
1. 登录系统
访问部署后的前端页面,使用默认账户登录。
2. 任务管理
创建新任务
- 导航至「任务管理」→「新建任务」
- 填写任务基本信息:名称、Cron 表达式
- 配置 HTTP 请求:方法、URL、请求头、请求体
- 设置高级选项:超时时间、重试策略
- 确认任务状态并保存
执行任务
在任务列表中找到目标任务,点击「执行」按钮立即运行任务。
监控任务
通过「任务日志」查看所有任务的执行历史和结果。
3. 用户管理(管理员功能)
- 查看系统用户列表
- 创建新用户并分配权限
- 编辑现有用户信息
- 禁用或启用用户账户
⏰ Cron 表达式语法
系统采用标准 5 位 Cron 表达式格式:
┌───────────── 分钟 (0-59)│ ┌───────────── 小时 (0-23)│ │ ┌───────────── 日 (1-31)│ │ │ ┌───────────── 月 (1-12)│ │ │ │ ┌───────────── 星期 (0-6) (0 表示星期日)│ │ │ │ │* * * * *常用表达式示例
* * * * *- 每分钟执行0 * * * *- 每小时执行0 0 * * *- 每天午夜执行0 0 * * 0- 每周日午夜执行0 0 1 * *- 每月1日午夜执行
🔍 故障排查
任务执行失败
- 检查任务是否已启用
- 验证 Cron 表达式是否正确
- 确认目标 URL 是否可访问
- 查看任务日志获取详细错误信息
登录问题
- 确认用户名和密码是否正确
- 检查后端服务是否正常运行
- 查看浏览器控制台的错误信息
部署问题
- 确认 Wrangler 配置文件中的
crons触发器已设置 - 检查 Cloudflare Worker 的运行状态
- 验证数据库连接配置是否正确
🛡️ 安全最佳实践
- 修改默认凭证:首次部署后立即更改管理员密码
- 启用 HTTPS:确保所有通信通过加密通道传输
- 访问控制:使用 Cloudflare Access 限制管理界面访问
- 定期备份:建立 D1 数据库的定期备份机制
- 强密码策略:为所有用户账户设置复杂密码
- 最小权限原则:仅为必要用户分配管理员权限
🤝 参与贡献
欢迎通过 GitHub Issues 和 Pull Request 参与项目改进,共同构建更完善的定时任务管理系统!
📄 开源许可
本项目采用 MIT License 开源协议。
📞 支持与反馈
如有任何问题或建议,欢迎通过 GitHub Issues 提交反馈。
免责声明:本系统主要面向学习和内部使用场景,生产环境部署请确保实施充分的安全措施。
CF-Cron - Cloudflare Worker 定时任务管理系统
https://fuwari.vercel.app/posts/cloudflare/cf-cron/