# xu
**Repository Path**: chenzhanxu/xu
## Basic Information
- **Project Name**: xu
- **Description**: 🖋️ 个人博客系统:Go + Gin 模块化后端(SQLite/MySQL 可切换)+ Vue3 PC 端 + Vant 手机端,支持文章/分类/标签/图库/链接分类/项目(含 Gitee README 导入)/评论审核/归档,Docker 一键部署
- **Primary Language**: Go
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-22
- **Last Updated**: 2026-09-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 🖋️ xu · 个人博客系统
**前后端分离 · 模块化设计 · 三端一体(PC 博客 / 手机端 / 管理后台)**
[](https://go.dev)
[](https://gin-gonic.com)
[](https://gorm.io)
[](https://cn.vuejs.org)
[](https://vitejs.dev)
[](https://element-plus.org)
[](https://vant-ui.github.io)
[](https://www.docker.com)
[](LICENSE)
---
## ✨ 功能特性
### 🏠 博客前台
| 模块 | 说明 |
|---|---|
| 📝 **文章系统** | Markdown 写作/渲染、代码高亮、多关键词搜索(标题/摘要/正文)、阅读时长/字数、阅读进度条 |
| ❤️ **点赞 / 收藏 / 分享** | 计数真实持久化、粒子爆裂动画、玻璃分享面板(复制 / 系统分享 / 微博 / QQ / 微信 / X)、点击外部关闭 |
| 💬 **评论系统** | 读者评论 → 后台审核 → 通过后展示 |
| 📂 **分类 / 🏷️ 标签** | 默认分类(技术文章 / 随笔记 / 生活圈),分类/标签带文章数统计 |
| 🗂️ **归档** | 按 年 → 月 归档 + 发布热力图 |
| 🖼️ **图库** | 图片分类管理、点击大图预览 |
| 🔗 **链接** | 分类化管理(AI / 视频 / 知识 / 图库 / 好友博客…),后台可自建分类 |
| 🚀 **项目合集** | 旗舰卡片展示、在线演示内嵌预览、**一键导入 Gitee 仓库 README 作为项目介绍** |
| 👤 **关于我** | 个人简介(头像 / 昵称 / 所在地)+ Markdown 主页 |
| 📡 **RSS / Sitemap** | 订阅源 + SEO 站点地图 |
| 📧 **邮箱订阅** | 页脚订阅表单,后台查看订阅增长 |
| ⏱️ **博客运行时间** | 持久化上线时间,跨重启累计 |
| 🔌 **插件渲染** | 已启用插件(如天气 / 名言卡片)动态渲染到侧边栏,独立插件仓库管理 |
### 🛠️ 管理后台
| 模块 | 说明 |
|---|---|
| 📊 **仪表盘** | 全站统计卡片 + 热门文章 / 最新文章 / 最新评论 + 访问趋势 |
| 📝 **文章管理** | 三态发布(草稿 / 已发布 / **未发布**,可取消发布/重新发布)、Markdown 编辑器 |
| 🗂️ **分类 / 标签** | 增删改查 + 文章数统计 |
| 🔗 **链接管理** | 链接与链接分类合并管理,分类筛选 |
| 🚀 **项目管理** | CRUD + Gitee README 导入 |
| 🖼️ **图库管理** | 图片分类 + 上传(自动生成 400px 缩略图) |
| 💬 **评论管理** | 审核 / 通过 / 拒绝,折叠列表 + 单行截断 |
| 🔌 **插件管理** | 插件列表 / 市场(扫描 Gitee 插件仓库,图标直链)/ 安装 / 卸载 / 启用 / 禁用 / 配置弹窗(schema 驱动) |
| 🔐 **安全设置** | 安全事件日志(分类/级别筛选)、IP 封禁/解封/白名单、风险评分、安全态势时间线、策略配置 |
| 📈 **访问管理** | PV / UV / IP / 实时在线 / 趋势曲线 |
| 🧭 **访问行为** | 来源渠道 / 搜索关键词 / 地域分布 / 设备浏览器 / 停留时长 / 跳出率 / **点击热图** |
| 🖥️ **系统监控** | 运行记录、操作审计、CPU / 内存 / 磁盘、月度流量、服务状态、日志监控(访问/错误) |
| 🌐 **SEO 管理** | 收录率 / 爬虫访问 / 关键词排名 / 外链 / 站内死链检测 |
| 🗃️ **数据管理** | 数据库状态 / 一键切换(SQLite·MySQL·PostgreSQL)/ 迁移 / 重启 / 连通性测试 |
| ⚡ **资源管理** | 页面静态资源加载监控(图片 / CSS / JS / 字体耗时与大小) |
| 👤 **个人中心 / 账户** | 账户安全评分(5 项加权)、设备管理(单会话/单踢/全踢)、登录历史(失败标红/新设备角标)、修改密码(强度校验+生成器+历史复用检测)、TOTP 两步验证 |
### 🛡️ 安全体系
| 能力 | 说明 |
|---|---|
| 🔑 **JWT 鉴权** | token 版本号 + jti 会话双重校验,改密/踢出即时失效 |
| 🚦 **复合登录限流** | IP 维度 + 账号维度(防代理池换 IP 绕过 X-Forwarded-For 伪造) |
| 🔐 **TOTP 两步验证** | AES-GCM 加密存储密钥(防 DB 泄露绕过)、绑定/启用/禁用 |
| 💻 **单会话策略** | 管理员仅一台设备在线,新登录自动顶掉其他设备 |
| 🕵️ **攻击检测中间件** | 目录遍历 / SQL 注入 / 漏洞扫描等恶意请求自动拦截并记录日志 |
| ⛔ **IP 封禁 / 白名单** | 手动封禁(可设时长)、封禁历史、白名单放行、风险评分自动封禁 |
| 📋 **安全审计** | 登录 / 扫描 / 垃圾评论 / 完整性 / 流量五类事件全量留痕 |
| 🔁 **密码策略** | 三类强度校验 + 近 5 次密码历史防复用 + 180 天更新提醒 |
| 🧹 **会话自动清理** | 启动 + 每 24h 清理过期/已撤销会话,防表膨胀 |
## 🧱 技术栈
| 端 | 技术 |
|---|---|
| **后端** | Go 1.27 + [Gin](https://gin-gonic.com) + [GORM](https://gorm.io) + JWT + bcrypt + goldmark |
| **数据库** | SQLite(零配置)· MySQL · PostgreSQL(改配置即切) |
| **PC 前端** | Vue 3 + Vite + TypeScript + Element Plus + Pinia |
| **手机端** | Vue 3 + Vite + Vant(独立项目,移动端专属布局) |
| **部署** | Docker Compose 一键启动(三容器 + 数据持久化) |
## 📁 目录结构
```
xu/
├── backend/ # 🐹 Go + Gin API 服务(按业务域模块化)
│ ├── main.go # 入口:配置 → 数据库 → 模块装配
│ ├── config/ # config.yaml(数据库/端口/JWT/上传/安全策略)
│ ├── pkg/ # 🧰 基础设施(database / jwt / middleware / ratelimit / response)
│ ├── modules/ # 🧩 18 个业务模块(model / dto / service / handler / router)
│ │ ├── modules.go # 模块装配中心(新模块登记一行即可挂载)
│ │ ├── auth/ # 🔐 登录/JWT/单会话/TOTP 加密/设备管理/安全评分
│ │ ├── post/ category/ tag/ # 📝 文章 / 📂 分类 / 🏷️ 标签
│ │ ├── links/ projects/ gallery/ comments/ # 🔗 🚀 🖼️ 💬
│ │ ├── site/ feed/ upload/ # 👤 站点信息 / 📡 RSS·Sitemap / 📤 上传(缩略图)
│ │ ├── engagement/ # ❤️ 点赞/收藏/分享(每日每 IP 去重)+ 📧 订阅
│ │ ├── dashboard/ # 📊 后台仪表盘统计
│ │ ├── monitor/ # 📈 访问统计/行为分析/热图 + 🖥️ 系统监控
│ │ ├── seo/ # 🌐 收录/关键词/外链/死链
│ │ ├── security/ # 🛡️ 攻击检测/封禁/白名单/安全日志
│ │ ├── plugin/ # 🔌 插件管理(submodule → plugin_-manager 仓库)
│ │ └── dbmanage/ # 🗃️ 数据库切换/迁移/重启
│ ├── run_supervisor.sh # 🔁 进程守护(异常退出自动拉起)
│ └── xu-blog-server # 编译产物
│
├── frontend/ # 💻 PC 端(app / shared / modules 三层)
│ └── src/
│ ├── app/ # 应用壳:入口、路由汇总、全局样式(玻璃拟态设计语言)
│ ├── shared/ # 共享:axios 封装、类型、Markdown/高亮工具、缩略图工具
│ └── modules/
│ ├── blog/ # 博客前台(11 个页面)
│ └── admin/ # 管理后台(仪表盘/内容/数据/安全/账户五大分区)
│
├── plugins/ # 🔌 运行时插件目录(gitignore,从 plugin_-manager 自动恢复)
├── mobile/ # 📱 手机端(独立 Vant 项目,12 个页面)
├── deploy/ # 🚀 部署:1Panel 编排 / CDN 接入指南
├── docs/ # 📚 开发文档(用户模块等)
├── docker-compose.yml # 🐳 一键部署编排
└── scripts/
├── backup.sh # 💾 数据备份(SQLite + 上传图片,默认保留 7 份)
└── smoke.sh # 🔥 端到端冒烟测试
```
## 🔌 API 约定
- `/api/*` —— 公开接口(文章、分类、评论、互动、RSS 等,挂**恶意请求检测中间件**)
- `/api/admin/*` —— 管理端接口(统一 **JWT + token 版本号 + 会话 jti** 鉴权)
```
公开:/api/posts /api/posts/:id /api/categories /api/tags /api/archive
/api/links /api/projects /api/gallery /api/comments
/api/auth/login /api/auth/totp /api/feed /api/sitemap.xml /api/about /api/uptime
/api/posts/:id/like|favorite|share /api/posts/:id/engagement /api/subscribe
/api/track /api/click /api/plugins/enabled /api/plugin-file//(访问/热图/插件)
管理:/api/admin/stats /api/admin/posts... /api/admin/monitor/* /api/admin/security/*
/api/admin/seo/* /api/admin/db/* /api/admin/plugins/* /api/admin/engagement/stats
/api/admin/sessions* /api/admin/account/security-overview /api/admin/totp* ...
```
## 🚀 快速开始
> 环境要求:Go 1.27+ · Node.js 20+
```bash
# 1️⃣ 启动后端(首次自动建库 + 创建默认管理员 + 种子数据)
cd backend && go run . # http://localhost:8080
# 2️⃣ 启动 PC 前端
cd frontend && npm install && npm run dev # http://localhost:5173
# 3️⃣ 启动手机端(可选)
cd mobile && npm install && npm run dev # http://localhost:5174
```
> 🔑 默认管理员:`admin / admin123`(登录后请立即在「账户设置」修改密码)
### 🗄️ 切换数据库
编辑 `backend/config/config.yaml`,基于 GORM 无需改动代码:
```yaml
database:
driver: mysql # sqlite | mysql | postgres
dsn: root:password@tcp(127.0.0.1:3306)/blog?charset=utf8mb4&parseTime=True&loc=Local
```
> 也可在后台「数据管理」页面可视化切换 / 迁移 / 重启,切换后自动保存配置。
## 🌐 前台站点导航
| 导航 | 路由 | 说明 |
|---|---|---|
| 🏠 首页 | `/` | 最新文章 + 分类/标签筛选 |
| 📖 文章 | `/articles` | 技术文章 / 随笔记 / 生活圈 |
| 📄 文章详情 | `/post/:id` | Markdown 渲染 + 阅读进度条 + 点赞/收藏/分享 + 评论 |
| 🖼️ 图库 | `/gallery` | 分类图片墙 |
| 🔗 链接 | `/links` | 分类化友链 |
| 🗂️ 归档 | `/archive` | 年/月归档 + 热力图 |
| 🚀 项目合集 | `/projects` | 项目展示 + 在线演示 + README |
| 👤 关于我 | `/about` | 个人档案 + 介绍 |
| 🔍 搜索 | `/search` | 多关键词高亮搜索 |
| 📡 RSS | `/feed` | 订阅源 |
## 🛠️ 管理后台导航(`/admin`)
| 分组 | 页面 |
|---|---|
| 概览 | 仪表盘 `/admin/dashboard` |
| 内容 | 文章 `/admin/posts` · 分类 · 标签 · 链接 · 项目 · 图库 · 评论 |
| 数据 | 访问管理 `/admin/traffic` · 访问行为 · 系统监控 `/admin/monitor` · SEO · 资源管理 |
| 安全 | 安全设置 `/admin/security` · 数据管理 `/admin/db` |
| 账户 | 个人中心 `/admin/profile` · 账户设置 `/admin/account` |
## 🐳 Docker 部署
```bash
docker compose up -d --build
```
| 服务 | 地址 |
|---|---|
| PC 博客 | http://localhost:3000 |
| 手机端 | http://localhost:3001 |
| 后端 API | http://localhost:8080 |
数据(SQLite + 上传图片)通过 volume 持久化,重建容器不丢数据。
### 🖥️ 1Panel 面板部署
内置 **1Panel 面板编排**(MySQL + 后端 + PC 前端 + 手机端 四容器,配置全变量化):
- 编排文件:`deploy/1panel/docker-compose.yml`
- 变量清单:`deploy/1panel/.env.example`
- 部署指南与容器信息:见 [`deploy/1panel/README.md`](deploy/1panel/README.md)
> 后端支持 `XU_` 前缀环境变量覆盖配置(端口/数据库/JWT/管理员等),容器化部署无需改代码。
### 🌐 HTTPS + 域名 + CDN
- **HTTPS 兼容已内置**:访客 cookie 自动加 `Secure`、真实 IP 信任反代 `X-Real-IP`、天气插件浏览器定位可用;部署步骤见 1Panel 指南「HTTPS + 域名部署」章节
- **CDN 接入**:静态资源 30 天缓存、图片 7 天缓存、gzip、CORS 头已就绪;接入指南见 [`deploy/cdn/README.md`](deploy/cdn/README.md)
## 🧪 测试与运维
```bash
cd backend && go test ./... # 单元测试(内存 SQLite,覆盖全部核心模块)
./scripts/smoke.sh # 端到端冒烟测试(核心接口全绿)
./scripts/backup.sh # 数据备份(默认保留 7 份)
```
## 📜 贡献者
- 🧑💻 陈占旭 · <1542776628@qq.com>
**Made with ❤️ by [陈占旭](https://gitee.com/chenzhanxu)**