一个基于 GitHub Issues 的简洁博客系统,使用 Next.js 构建,支持 SSG(静态站点生成)。
- 📝 基于 GitHub Issues 的内容管理
- 🚀 SSG(静态站点生成)提供极快的加载速度
- 📱 响应式设计,支持各种设备
- 🎨 使用 Tailwind CSS 的简洁美观界面
- 📄 支持 Markdown 格式的文章内容
- 🔄 构建时自动获取最新文章
git clone https://github.com/sedationh/blog.git
cd blog
pnpm install
- 访问 GitHub Settings > Personal access tokens
- 点击 "Generate new token"
- 选择权限:
- 对于公共仓库:选择
public_repo
- 对于私有仓库:选择
repo
- 对于公共仓库:选择
- 复制生成的 token
复制环境变量示例文件:
cp env.example .env.local
编辑 .env.local
文件,填入你的 GitHub token:
GITHUB_TOKEN=your_github_personal_access_token_here
GITHUB_OWNER=<your-github-username>
GITHUB_REPO=<your-repo-name>
编辑 src/lib/github.ts
文件,将以下占位符替换为你的实际仓库信息:
const GITHUB_CONFIG = {
owner: process.env.GITHUB_OWNER || 'sedationh', // 替换为你的 GitHub 用户名
repo: process.env.GITHUB_REPO || 'blog', // 替换为你的仓库名
token: process.env.GITHUB_TOKEN || '<your-github-token>',
}
pnpm dev
访问 http://localhost:3000 查看博客。
pnpm build
pnpm start
- 在你配置的 GitHub 仓库中创建新的 Issue
- Issue 标题将作为文章标题
- Issue 内容支持 Markdown 格式
- 重新构建网站以获取最新文章
- 编辑文章:直接编辑对应的 GitHub Issue
- 删除文章:关闭对应的 GitHub Issue
- 文章排序:按照 Issue 创建时间倒序排列
- 首页 (
/
):显示所有文章列表 -src/app/page.tsx
- 文章详情 (
/detail/[id]
):显示单篇文章内容,其中id
是 GitHub Issue 的编号 -src/app/detail/[id]/page.tsx
- 404页面 (
/not-found
):处理不存在的页面 -src/app/not-found.tsx
blog/
├── src/
│ ├── app/ # App Router 页面目录
│ │ ├── page.tsx # 首页 - 文章列表
│ │ ├── detail/[id]/ # 文章详情页(动态路由)
│ │ │ └── page.tsx
│ │ ├── layout.tsx # 根布局
│ │ ├── not-found.tsx # 404 页面
│ │ └── globals.css # 全局样式
│ └── lib/
│ └── github.ts # GitHub API 工具函数
├── public/ # 静态资源
├── env.example # 环境变量示例
└── README.md # 项目说明
- 框架:Next.js 15 (App Router)
- 样式:Tailwind CSS 4
- Markdown 渲染:react-markdown
- TypeScript:完整类型支持
- 渲染模式:SSG(静态站点生成)
- 数据获取:直接在组件中使用 async/await
项目使用 Tailwind CSS,你可以:
- 修改
src/app/page.tsx
和src/app/detail/[id]/page.tsx
中的样式类 - 在
src/app/globals.css
中添加自定义 CSS - 配置
tailwind.config.js
(如需要)
- 分页:修改
getAllIssues
函数添加分页支持 - 标签系统:使用 GitHub Issue 标签进行分类
- 搜索功能:添加客户端搜索或使用 GitHub API 搜索
- 评论系统:利用 GitHub Issue 评论功能
- 将代码推送到 GitHub
- 在 Vercel 中导入项目
- 在 Vercel 环境变量中配置
GITHUB_TOKEN
- 部署完成
- 构建命令:
pnpm build
- 发布目录:
out
- 在环境变量中配置
GITHUB_TOKEN
确保支持 Node.js 和静态文件托管即可。
A: 使用 Personal Access Token 可以获得每小时 5000 次的请求限制,对于大多数博客来说足够了。
A: 在创建 GitHub Token 时选择 repo
权限而不是 public_repo
。
A: 由于使用 SSG,需要重新构建网站才能获取最新内容。可以设置 webhook 自动触发构建。
A: 修改 src/app/detail/[id]/page.tsx
中 ReactMarkdown 的 components
配置。
欢迎提交 Issue 和 Pull Request!
MIT License