且听风吟

CFblog - 部署在Cloudflare上博客系统

· 分享
## 项目简介 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 ### 安装 1. **克隆项目** ```bash git clone cd cfblog ``` 2. **安装后端依赖** ```bash npm install ``` ### 配置 1. **配置 Wrangler** 编辑 `wrangler.toml` 文件: ```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" # 替换为安全的密钥 ``` 2. **创建 Cloudflare 资源** ```bash # 创建 D1 数据库 wrangler d1 create cfblog-db # 创建 R2 存储桶 wrangler r2 bucket create cfblog-media ``` 3. **初始化数据库** 使用整合后的 schema.sql 初始化数据库: ```bash wrangler d1 execute cfblog-db --file=./schema.sql --remote ``` **重要说明:** - `schema.sql` 已经包含了所有表结构、索引和默认数据 - 之前的迁移文件(migrations/ 目录)已整合到 schema.sql 中 - 对于新数据库,只需运行一次 schema.sql 即可 - 包含的内容: - 所有基础表(users, posts, categories, tags, comments, media, links 等) - site_settings 表(系统设置) - featured_media_id 和 featured_image_url 字段 - 所有索引 - 默认数据(分类、链接分类、系统设置) ### 开发 **启动后端开发服务器** ```bash 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://github.com/jkjoy/astro-paper-cfblog 演示地址: https://paper.zxd.im ## 许可证 MIT License ## 贡献 欢迎提交 Issue 和 Pull Request! ## 支持 如有问题,请提交 Issue 或联系维护者。