项目简介
CFBlog 是一个兼容 WordPress REST API的无头博客系统,使用 Cloudflare 生态系统构建,具有高性能、低成本、全球分发的特点。
技术栈
后端 (API)- Cloudflare Workers - 无服务器计算平台
- Hono - 快速轻量的 Web 框架
- D1 - Cloudflare 的 SQLite 数据库
- R2 - Cloudflare 对象存储
- TypeScript - 类型安全的开发体验
- bcryptjs - 密码加密
- jose - JWT 认证
功能特性
内容管理
- ✅ 文章管理(创建、编辑、删除、发布)
- ✅ 分类和标签系统
- ✅ Markdown 编辑器支持
- ✅ 文章摘要和置顶功能
- ✅ 特色图片支持(URL 或媒体库)
- ✅ 文章状态管理(草稿、发布、待审核、私密、回收站)
- ✅ 页面和文章类型支持
- ✅ 评论系统
- ✅ 浏览计数
- ✅ 使用Cloudflare AI自动生成文章的slug
- ✅ 使用Cloudflare AI自动生成文章的摘要
媒体管理
- ✅ 图片上传到 R2 存储
- ✅ 媒体库管理
- ✅ 图片元数据(标题、描述、替代文本)
- ✅ 支持多种文件格式
用户系统
- ✅ 用户注册和登录
- ✅ JWT 认证
- ✅ 角色权限系统(管理员、编辑、作者、投稿者、订阅者)
- ✅ 用户资料管理
- ✅ 头像和个人简介
友情链接
- ✅ 链接分类管理
- ✅ 友情链接管理
- ✅ 链接排序和可见性控制
- ✅ 头像支持
系统设置
- ✅ 站点基础设置(标题、描述、关键词)
- ✅ SEO 配置
- ✅ 自定义页脚文本
- ✅ ICP 备案信息
- ✅ webhook url 填写Vercel 或者 Cloudflare Pages的部署钩子,选择触发的事件,会在事件发生时触发部署任务
项目结构
cfblog/
├── src/ # 后端源码
│ ├── index.ts # Workers 入口文件
├── schema.sql # 完整数据库架构(已整合所有迁移)
├── wrangler.toml # Cloudflare Workers 配置
├── package.json
└── README.md
快速开始
前置要求
- Node.js 20.19.0+ 或 22.12.0+
- npm 或 yarn
- Cloudflare 账号
- Wrangler CLI
安装
- 克隆项目
git clone <repository-url>
cd cfblog
- 安装后端依赖
npm install
配置
- 配置 Wrangler
编辑 wrangler.toml 文件:
name = "cfblog"
main = "src/index.ts"
compatibility_date = "2024-01-01"
[[d1_databases]]
binding = "DB"
database_name = "cfblog-db"
database_id = "your-database-id-here" # 替换为你的 D1 数据库 ID
[[r2_buckets]]
binding = "MEDIA"
bucket_name = "cfblog-media" # 替换为你的 R2 存储桶名称
Workers AI binding
[ai]
binding = "AI"
[vars]
JWT_SECRET = "your-jwt-secret-here" # 替换为安全的密钥
- 创建 Cloudflare 资源
# 创建 D1 数据库
wrangler d1 create cfblog-db
创建 R2 存储桶
wrangler r2 bucket create cfblog-media
- 初始化数据库
使用整合后的 schema.sql 初始化数据库:
wrangler d1 execute cfblog-db --file=./schema.sql --remote
重要说明:
schema.sql已经包含了所有表结构、索引和默认数据- 之前的迁移文件(migrations/ 目录)已整合到 schema.sql 中
- 对于新数据库,只需运行一次 schema.sql 即可
- 包含的内容:
- 默认数据(分类、链接分类、系统设置)
开发
启动后端开发服务器npm run dev
后端 API 将运行在 http://127.0.0.1:8787
API 文档
认证相关
POST /api/auth/register- 用户注册POST /api/auth/login- 用户登录
文章管理
GET /api/posts- 获取文章列表GET /api/posts/:id- 获取文章详情POST /api/posts- 创建文章(需要认证)PUT /api/posts/:id- 更新文章(需要认证)DELETE /api/posts/:id- 删除文章(需要认证)
分类管理
GET /api/categories- 获取分类列表GET /api/categories/:id- 获取分类详情POST /api/categories- 创建分类(需要认证)PUT /api/categories/:id- 更新分类(需要认证)DELETE /api/categories/:id- 删除分类(需要认证)
标签管理
GET /api/tags- 获取标签列表GET /api/tags/:id- 获取标签详情
媒体管理
GET /api/media- 获取媒体列表POST /api/media/upload- 上传媒体文件(需要认证)DELETE /api/media/:id- 删除媒体文件(需要认证)
评论管理
GET /api/comments- 获取评论列表POST /api/comments- 发表评论PUT /api/comments/:id- 更新评论(需要认证)DELETE /api/comments/:id- 删除评论(需要认证)
友情链接
GET /api/links- 获取链接列表GET /api/link-categories- 获取链接分类
系统设置
GET /api/settings- 获取系统设置PUT /api/settings- 更新系统设置(需要认证)
前端项目
AKINA主题:
使用vue3 + vite + pinia + vue-router + markdown-it + highlight.js等技术栈构建的现代化前端界面。
项目地址 https://github.com/jkjoy/cfblog-theme-akina演示地址: https://akina.zxd.im
Paper主题:
使用Astro + Tailwind CSS等技术栈构建的简洁前端界面。
演示地址: https://paper.zxd.im
许可证
MIT License
贡献
欢迎提交 Issue 和 Pull Request!