一个强大的Cloudflare多账号Workers批量管理系统,支持账号管理、批量操作、实时监控和Workers脚本管理。
- 主密码保护机制(首次使用需初始化)
- JWT Token认证
- 安全的密码哈希存储(bcrypt)
- 多Cloudflare账号管理
- 支持两种认证方式:
- API Token(推荐)
- Email + Global API Key(传统方式)
- 账号健康检查
- 自动获取账号subdomain信息
- 批量导入账号
- 6种任务类型:
create- 批量创建Workerupdate- 批量更新Worker脚本delete- 批量删除Workerquery- 批量查询Worker信息list- 列出账号的所有Workershealth_check- 批量账号健康检查
- 并发控制(默认3个并发,避免API限流)
- 实时任务进度监控(WebSocket)
- 任务失败自动重试
- 详细的错误日志
- 列出所有Workers(支持按账号筛选)
- 三种显示模式:全部/按账号分组/自定义筛选
- 同步Workers信息到本地缓存
- 获取Worker脚本源码
- 在线更新Worker脚本
- 删除Worker(需确认)
- 本地缓存机制(减少API调用)
- SQLite数据库(WAL模式,高并发)
- 自动数据库迁移
- 外键约束保证数据完整性
- 审计日志记录
- 完整的索引优化
- 后端框架: Express.js + TypeScript
- 数据库: SQLite (better-sqlite3)
- 实时通信: Socket.IO
- 认证: JWT + bcrypt
- 前端: React + TypeScript + TailwindCSS
- 部署: Docker + Docker Compose
使用docker-compose(处理了所有配置和数据持久化):
# 1. 首次启动:构建并启动容器
docker-compose up -d --build
# 2. 查看日志
docker-compose logs -f
# 3. 停止服务
docker-compose down
# 4. 停止并删除数据(谨慎使用!)
docker-compose down -v环境变量配置:
- 可选:复制
.env.example为.env并修改JWT_SECRET - docker-compose会自动使用 Named Volume 管理数据(无权限问题)
- 数据持久化在
cloudflare-datavolume 中
仅docker命令部署(不推荐,仅供参考):
# 1. 构建镜像
docker build -t cloudflare-manager:latest .
# 2. 创建Named Volume(持久化数据)
docker volume create cloudflare-data
# 3. 运行容器(使用Named Volume,避免权限问题)
docker run -d \
--name cloudflare-manager \
-p 3000:3000 \
-v cloudflare-data:/app/data \
-e JWT_SECRET=your-secret-key \
-e NODE_ENV=production \
-e DB_PATH=/app/data/data.db \
cloudflare-manager:latest- Windows/Mac下不要使用
-v $(pwd)/data:/app/databind mount(会导致权限错误) - 推荐使用 Named Volume 或 docker-compose
环境要求:
- Node.js >= 18
- npm >= 9
步骤:
- 安装依赖
npm install- 配置环境变量
cp .env.example .env
# 编辑.env文件- 启动开发服务器
npm run dev- 访问应用
http://localhost:3000
| 变量名 | 说明 | 默认值 | 必需 |
|---|---|---|---|
PORT |
HTTP服务器端口 | 3000 |
否 |
JWT_SECRET |
JWT签名密钥 | - | 是 |
DB_PATH |
SQLite数据库文件路径 | ./data.db |
否 |
NODE_ENV |
运行环境 | development |
否 |
DEBUG_CF_API |
调试Cloudflare API请求 | false |
否 |
生产环境建议:
NODE_ENV=production
JWT_SECRET=生成一个强随机字符串
DEBUG_CF_API=false- 引擎: SQLite 3
- 模式: WAL (Write-Ahead Logging)
- 外键: 启用
- 位置:
./data.db(可通过环境变量配置)
| 表名 | 说明 |
|---|---|
system_config |
系统配置(主密码hash) |
accounts |
Cloudflare账号信息 |
jobs |
批量任务记录 |
tasks |
任务详情(每个账号一条) |
workers |
Workers缓存信息 |
script_templates |
脚本模板(预留) |
audit_logs |
审计日志 |
Docker部署备份:
# 方式1: 导出整个Named Volume
docker run --rm \
-v cloudflare-data:/data \
-v $(pwd):/backup \
alpine tar czf /backup/cloudflare-data-backup.tar.gz -C /data .
# 方式2: 使用docker cp
docker cp cloudflare-manager:/app/data/data.db ./data.db.backup本地部署备份:
# 停止应用
docker-compose down
# 备份数据库文件(包含WAL文件)
cp data/data.db data/data.db.backup
cp data/data.db-wal data/data.db-wal.backup
cp data/data.db-shm data/data.db-shm.backup
# 或使用SQLite checkpoint
sqlite3 data/data.db "PRAGMA wal_checkpoint(TRUNCATE);"
cp data/data.db data/data.db.backup
# 重启应用
docker-compose up -d- 编译项目
npm run build- 使用PM2
npm install -g pm2
pm2 start dist/index.js \
--name cloudflare-manager \
--env NODE_ENV=production
pm2 save
pm2 startup- Nginx反向代理示例
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# WebSocket支持
location /socket.io/ {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
}backend/
├── src/
│ ├── db/
│ │ └── schema.ts # 数据库初始化和迁移
│ ├── middleware/
│ │ └── auth.ts # JWT认证中间件
│ ├── models/
│ │ └── types.ts # TypeScript类型定义
│ ├── routes/
│ │ ├── auth.ts # 认证路由
│ │ ├── accounts.ts # 账号管理路由
│ │ ├── jobs.ts # 任务管理路由
│ │ └── workers.ts # Workers管理路由
│ ├── services/
│ │ ├── CloudflareAPI.ts # Cloudflare API封装
│ │ ├── JobExecutor.ts # 任务执行引擎
│ │ └── WorkersService.ts # Workers服务
│ └── index.ts # 应用入口
├── public/ # 前端静态文件
├── data/ # 数据库文件目录
├── Dockerfile # Docker配置
├── docker-compose.yml # Docker Compose配置
└── package.json
-
新增API路由:
- 在
src/routes/创建新的路由文件 - 在
src/index.ts注册路由
- 在
-
新增数据库表:
- 在
src/db/schema.ts的initDatabase函数添加CREATE TABLESQL - 如果是改动现有表,添加自动迁移逻辑
- 在
-
新增Cloudflare API调用:
- 在
src/services/CloudflareAPI.ts添加新方法 - 遵循现有错误处理模式
- 在
启用Cloudflare API调试:
DEBUG_CF_API=true npm run dev输出示例:
[CF API] [5ddb2f59] GET https://api.cloudflare.com/client/v4/...
{
"headers": { "Authorization": "Bearer ***" }
}
[CF API] [5ddb2f59] ✓ 234ms
{
"success": true,
"result": { ... }
}
查看数据库内容:
sqlite3 data.db
.tables
SELECT * FROM accounts;错误: 429 Too Many Requests
解决方案:
- 降低并发数(修改
JobExecutor构造函数的并发参数) - 检查是否有其他程序在调用同一账号的API
- 等待一段时间后重试
MIT License