一个基于 Cloudflare Workers + Pages + D1 + R2 的论坛,支持帖子、评论、图片上传、2FA 等。
💡 性能优化:采用 Pages + Worker 混合部署,静态资源免费无限请求,节省 ~90% Worker 成本!
用户访问:forum.adysec.com
↓
Cloudflare Pages(Edge 网络)
↓
┌─ Pages Functions 判断路由
│
├─ /api/* ?
│ ├─ YES → 转发给 Worker(处理业务逻辑 + 数据库)
│ │ 返回 JSON
│ │
│ └─ NO → 返回静态文件或 index.html
│ 前端 React Router 接管
│
└─ 用户看到页面
- ✅ 帖子管理 - 发布、编辑、删除、置顶、分类
- ✅ 评论系统 - 多级评论、支持回复
- ✅ 用户认证 - 注册、登录、邮件验证、2FA
- ✅ 图片上传 - 图片直接上传到 R2,支持 Markdown 预览
- ✅ 用户资料 - 头像上传、个人资料、邮件通知设置
- ✅ 管理后台 - 用户管理、分类管理、设置管理
- ✅ 访问统计 - 浏览量统计(post view count)
- ✅ 点赞系统 - 灵活的点赞/取消点赞
- ✅ 验证码 - 集成 Cloudflare Turnstile
- ✅ 邮件服务 - SMTP 配置、验证邮件、重置密码
在 Cloudflare 仪表盘中为 Worker 添加一个至少 32 字符的
JWT_SECRET密钥。 前端提醒:如果 Worker 运行时未检测到有效JWT_SECRET,页面顶部将显示黄色通知并建议一个随机密钥,你可以复制并粘贴到 Secrets 中。
项目已内置 .github/workflows/deploy.yml,每次推送到 main 分支或手动触发时自动构建并部署到 Cloudflare。
- 登录 Cloudflare Dashboard
- 进入 My Profile > API Tokens
- 点击 Create Token
- 配置自定义权限:
- Account > Workers Scripts - Edit
- Account > D1 - Edit
- Account > R2 - Edit
- Account > Pages - Edit
- 选择你的账户,点击 Continue to summary
- 创建后复制 Token(只会显示一次)
- 在 Cloudflare Dashboard 首页,选择任意域名
- 右侧栏可以看到 Account ID,复制它
在你的 GitHub 仓库中:
- 进入 Settings > Secrets and variables > Actions
- 点击 New repository secret,添加以下密钥:
| Secret 名称 | 值 | 描述 | 是否必需 |
|---|---|---|---|
CF_API_TOKEN |
Cloudflare API Token | 创建CF_API_TOKEN | 必需 |
CF_ACCOUNT_ID |
你的 Cloudflare Account ID | 查看CF_ACCOUNT_ID | 必需 |
JWT_SECRET |
随机字符串 | head -c 32 /dev/urandom | base64 |
必需 |
SMTP_HOST |
SMTP 服务器地址 | 邮件发送用,例如:smtp.exmail.qq.com | 非必需,未配置则无法注册 |
SMTP_PORT |
SMTP 端口 | 例如:465 | 非必需,未配置则无法注册 |
SMTP_USER |
SMTP 用户名 | 邮箱地址 | 非必需,未配置则无法注册 |
SMTP_PASS |
SMTP 密码 | 应用专用密码(非主密码) | 非必需,未配置则无法注册 |
SMTP_FROM |
发送者邮箱 | 例如:noreply@example.com(未设置则使用 SMTP_USER) | 非必需,未配置则无法注册 |
SMTP_FROM_NAME |
发件人显示名称 | 例如:CForum(未设置则使用"论坛管理员") | 非必需,未配置则无法注册 |
BASE_URL |
站点 URL | 例如:https://forum.adysec.com(未设置则自动使用当前请求域名) |
非必需,未配置则邮件异常 |
TURNSTILE_SITE_KEY |
Cloudflare Turnstile Site Key | Cloudflare Turnstile | 非必需,未配置则使用Turnstile |
TURNSTILE_SECRET_KEY |
Cloudflare Turnstile Secret | Cloudflare Turnstile | 非必需,未配置则使用Turnstile |
在 GitHub 仓库的 Actions 页面:
- 选择 Deploy to Cloudflare workflow
- 点击 Run workflow
- 选择
main分支并确认
CForum 采用 Pages + Worker 混合架构,通过 Pages Functions 统一接入:
用户访问:https://forum.adysec.com
↓
Cloudflare Pages CDN (智能路由)
├─ /api/* → Pages Functions 代理 → Worker (D1/R2)
└─ 其他 → 返回静态文件 (index.html → 前端路由)
优点:
- ✅ 用户只需一个域名
- ✅ 完全自动化,无需手动配置 Worker 域名
- ✅ Pages 托管静态资源(免费)
- ✅ Worker 隐身在后面(免费额度 10w/d)
- 进入 Cloudflare Dashboard → Pages
- 选择 cforum 项目 → Settings → Custom domains
- 点击 Add custom domain,输入你的域名(如
forum.adysec.com) - 完成验证 ✅
默认管理员账号(首次登录后请立即修改!):
- 邮箱:
admin@adysec.com/ 密码:Admin@123
MIT License - 详见 LICENSE
- 💬 欢迎提交 Issue 和 Pull Request
- 🌟 如果有帮助,请 Star 本项目!