Fool Blog博客项目部署

一个简洁优雅的个人博客系统
一个轻量级、功能完整的博客系统,基于 Go 构建,支持 SQLite/MySQL 双数据库,开箱即用。

功能特性
前台功能
- 文章展示 - 置顶文章(定时过期/锁定/隐藏/置底)、分页列表、Markdown 渲染、目录导航、阅读进度条、相关文章推荐
- 互动功能 - 浏览量统计、点赞、嵌套评论(支持回复)、代码块一键复制、代码语言标签
- 内容发现 - 全文搜索(标题/摘要/正文/标签)、标签分类、按年月归档
- AI 点评 - 接入 LLM 自动生成文章点评、打字机效果展示
- 个性化 - 随机壁纸、站点配置、暗黑模式(可自定义颜色)、图片点击放大预览
- 订阅通知 - 邮件订阅新文章通知
后台管理
- 数据仪表盘 - 文章/用户/评论统计概览
- 文章管理 - 新建/编辑/删除/置顶(含高级置顶设置)/发布/草稿、Markdown 导入导出(单篇/批量 ZIP)
- 内容管理 - 标签管理、评论管理(含批量操作)
- 用户管理 - 角色分配、状态控制、禁用/删除
- 站点设置 - 名称/副标题/公告/壁纸/备案号/建站时间/关于页面/Font Awesome CDN
- 订阅管理 - 查看/取消邮件订阅用户
- 操作日志 - 全操作审计记录
用户系统
- 注册(邮箱验证码验证)
- 登录/登出
- 个人中心(修改资料/随机头像)
- 忘记密码 / 重置密码
技术栈
| 组件 | 技术 |
|---|---|
| 后端框架 | Gin |
| ORM | GORM |
| 数据库 | SQLite / MySQL |
| 模板引擎 | Go html/template |
| Markdown | Goldmark |
| 代码高亮 | Chroma |
| AI 集成 | 兼容 OpenAI API 的 LLM 服务 |
快速开始
环境要求
- Go 1.25+
安装
git clone https://github.com/your-username/fool-blog.git
cd fool-blog
go mod tidy
配置
复制并编辑配置文件:
cp config.yaml config.yaml
编辑 config.yaml:
app:
addr: 0.0.0.0:9200
name: My Blog
database:
driver: sqlite # sqlite 或 mysql
path: data/blog.db # SQLite 路径
# MySQL 配置(driver 为 mysql 时启用)
# host: 127.0.0.1
# port: "3306"
# name: blog
# user: root
# password: ""
security:
session_key: your-random-session-key-here
password_salt: your-password-salt
admin:
default_username: admin
default_password: admin123
# 可选:AI 文章点评
ai:
base_url: https://api.openai.com/v1
api_key: sk-your-api-key
model: gpt-4o-mini
运行
go run main.go
访问 http://localhost:9200 查看博客,http://localhost:9200/admin 进入后台。
默认管理员账号:admin / admin123
编译
# Linux/macOS
go build -o fool_blog
# Windows
go build -o fool_blog.exe
目录结构
fool-blog/
├── main.go # 应用入口
├── config.yaml # 配置文件
├── go.mod # Go 依赖
├── internal/
│ ├── ai/ # AI 点评集成
│ ├── config/ # 配置加载
│ ├── database/ # 数据库初始化
│ ├── email/ # 邮件服务
│ ├── handler/ # HTTP 路由处理
│ │ ├── admin_handler.go
│ │ ├── ai_handler.go
│ │ ├── article_handler.go
│ │ ├── auth_handler.go
│ │ ├── front_handler.go
│ │ ├── profile_handler.go
│ │ └── upload_handler.go
│ ├── middleware/ # 中间件(认证/日志/访客追踪/频率限制)
│ ├── model/ # 数据模型
│ ├── service/ # 业务逻辑
│ └── util/ # 工具函数
├── templates/ # HTML 模板
│ ├── admin/ # 后台模板
│ ├── 404.html
│ ├── about.html
│ ├── archive.html
│ ├── article.html
│ ├── forgot.html
│ ├── index.html
│ ├── login.html
│ ├── partials.html
│ ├── register.html
│ ├── reset.html
│ ├── search.html
│ └── tag.html
├── static/ # 静态资源(CSS/JS)
├── uploads/ # 上传文件
│ ├── avatar/
│ ├── cover/
│ └── article/
├── data/ # SQLite 数据库文件
└── exports/ # Markdown 导出文件
API 路由
前台
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | / |
首页 |
| GET | /article/:slug |
文章详情 |
| GET | /search?q= |
搜索 |
| GET | /tags |
标签列表 |
| GET | /tag/:id |
标签详情 |
| GET | /archive |
归档 |
| GET | /about |
关于页面 |
| POST | /article/:id/like |
点赞 |
| POST | /article/:id/comment |
评论 |
| GET | /api/ai-review/:id |
AI 点评 |
| POST | /subscribe |
订阅新文章通知 |
| POST | /unsubscribe |
取消订阅 |
用户
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /login |
登录页 |
| POST | /login |
登录 |
| GET | /register |
注册页 |
| POST | /register |
注册 |
| POST | /register/send-code |
发送验证码 |
| POST | /logout |
登出 |
| GET | /me |
个人中心 |
| POST | /me |
更新资料 |
| POST | /me/avatar |
上传头像 |
| GET | /forgot |
忘记密码页 |
| POST | /forgot |
发送重置邮件 |
| GET | /reset |
重置密码页 |
| POST | /reset |
执行重置密码 |
后台
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /admin |
仪表盘 |
| GET | /admin/articles |
文章列表 |
| POST | /admin/articles |
创建文章 |
| POST | /admin/articles/:id |
更新文章 |
| POST | /admin/articles/:id/delete |
删除文章 |
| POST | /admin/articles/import |
导入 Markdown |
| GET | /admin/articles/:id/export |
导出 Markdown |
| POST | /admin/articles/:id/notify |
发送文章通知 |
| GET | /admin/tags |
标签管理 |
| GET | /admin/comments |
评论管理 |
| POST | /admin/comments/:id/delete |
删除评论 |
| GET | /admin/users |
用户管理 |
| POST | /admin/users/:id/toggle |
切换用户状态 |
| POST | /admin/users/:id/delete |
删除用户 |
| GET | /admin/site |
站点设置 |
| POST | /admin/site |
更新站点设置 |
| POST | /admin/upload |
上传文件 |
| GET | /admin/logs |
操作日志 |
| GET | /admin/subscriptions |
订阅管理 |
| POST | /admin/subscriptions/:id/delete |
删除订阅 |
配置说明
| 配置项 | 说明 |
|---|---|
app.addr |
监听地址 |
database.driver |
数据库类型:sqlite 或 mysql |
security.session_key |
Session 加密密钥(请修改) |
security.password_salt |
密码盐值(请修改) |
upload.max_size_mb |
上传文件大小限制(MB) |
wallpaper.enabled |
是否启用随机壁纸 |
ai.* |
AI 点评配置(可选) |
部署
Docker(推荐)
FROM golang:1.25-alpine AS builder
WORKDIR /app
COPY . .
RUN go mod download && go build -o fool_blog .
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/fool_blog .
COPY --from=builder /app/config.yaml .
COPY --from=builder /app/templates ./templates
COPY --from=builder /app/static ./static
EXPOSE 9200
CMD ["./fool_blog"]
docker build -t fool-blog .
docker run -p 9200:9200 -v ./data:/app/data fool-blog
Systemd
[Unit]
Description=Fool Blog
After=network.target
[Service]
Type=simple
User=www
WorkingDirectory=/opt/fool-blog
ExecStart=/opt/fool-blog/fool_blog
Restart=always
[Install]
WantedBy=multi-user.target
项目预览

最后更新时间:2026-09-19 20:23
评论(6) 最新 热门
登录 后才能评论。