Skip to content

Latest commit

 

History

86 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

✍️ Gin Blog — 博客系统

Stars Forks Issues CI License Language PRs Welcome

🌐 在线体验:blog.fcyan.xyz  ·  🚀 Go + Gin + GORM + Vue 3 现代化博客系统

前后端分离 · 双前端架构 · 每日一问 · 评论系统 · CI/CD 自动发布


📌 项目简介

一个个人博客系统:Go 后端 + Vue 3 双前端(前台展示 / 后台管理),Docker 编排部署,GitHub Actions 多分支 CI/CD 自动发布。支持文章管理、每日一问、评论互动、全文搜索、RSS 订阅等完整博客能力,并具备从 CSDN 等平台批量迁移历史文章的实用工具链。

本项目是个人技术博客的工程化实践,沉淀了从架构设计、分层实现到自动化部署的全栈经验,欢迎 Star、Fork 与 PR。


✨ 功能特性

📝 内容管理

  • 文章:Markdown 写作、草稿/定时发布、分类/标签、SEO 字段、阅读时长与浏览量统计
  • CSDN 迁移工具链:HTML → Markdown 转换、图片批量本地化、保留原始发布时间与标签
  • 每日一问:日历排期、未来日期预排、答案渐变遮罩、浏览计数

💬 互动体系

  • 评论系统:游客 / 登录用户 / 博主三级身份,多级回复、热度排序、点赞防刷
  • 智能头像:QQ 邮箱 → Gravatar → 首字母 SVG 三级兜底
  • 博主标识:强制使用服务端配置值,前端不可伪造

🔐 安全与可观测

  • 认证:JWT 令牌 + bcrypt 密码加密
  • 审计:全量操作审计日志,请求体敏感字段自动脱敏
  • 防护:评论点赞 IP 唯一约束防刷、UA 解析

🛠️ 工程化

  • 架构:Controller → Service → Repository 三层分层
  • CI/CD:push main 自动构建 → 发布 GHCR 镜像 → 生产环境人工审批部署 → 失败自动回滚
  • 可观测:Zap 结构化日志、请求追踪

📡 其他

  • 全文搜索(正文命中高亮)、时间归档、RSS + Sitemap
  • 深浅色主题、响应式布局(桌面 / 平板 / 手机)
  • 站点运行时长、访问统计

🏗️ 技术栈

后端

Go Gin GORM MySQL Redis JWT Zap Viper

前台前端 (blog-web)

Vue Vite Pinia Vue Router TailwindCSS Axios

后台前端 (blog-admin)

Vue Element Plus Markdown Editor Pinia


🖼️ 界面预览

前台首页 文章详情
每日一问 + 文章卡片列表,支持深浅色主题 Markdown 渲染 + 评论互动
后台管理 文章编辑
数据看板 + 全模块管理 Markdown 写作 + 分类标签

💡 更多细节可直接访问线上示例:https://blog.fcyan.xyz


📁 项目结构

.
├── 📦 blog-web/               # 前台展示前端 (Vue 3 + TailwindCSS)
├── 📦 blog-admin/             # 后台管理前端 (Vue 3 + Element Plus)
├── ⚙️ internal/               # Go 后端核心代码
│   ├── api/v1/             # API 控制器 & 路由(按模块划分)
│   ├── middleware/         # 中间件(认证/审计/日志/恢复)
│   ├── model/              # 数据模型(Entity / DTO)
│   ├── repository/         # 数据访问层
│   ├── service/            # 业务逻辑层
│   └── router/             # 路由注册
├── 📦 pkg/                   # 公共工具包 (JWT / 日志 / 加密 / 头像)
├── 🐳 docker/                # Docker 构建配置(nginx 等)
├── 🐳 docker-compose.yml     # Docker 编排(MySQL+Redis+后端+网关)
├── ⚙️ deploy/                # 生产部署脚本(含健康检查与回滚)
├── 🔧 .github/workflows/     # CI/CD 流水线
├── 🧪 test/                  # 测试(unit / integration / e2e)
├── 📖 docs/                  # 文档(API / 设计 / 规范)
└── 🔧 .env.example           # 环境变量示例

💡 后端采用经典的 Controller → Service → Repository 三层架构,模块边界清晰,便于扩展与测试。


🚀 快速开始

方式一:Docker 一键部署 ⭐(推荐)

# 1. 克隆项目
git clone https://github.com/fcy222fcy/myblog.git
cd myblog

# 2. 配置环境变量
cp .env.example .env
# 编辑 .env,修改数据库密码与 JWT_SECRET(生产环境务必修改)

# 3. 一键启动全部服务
docker-compose up -d

启动完成后访问:

入口 地址
🌐 前台 http://localhost
🔧 后台 http://localhost:8081
⚙️ API http://localhost:9090

默认网关端口由 GATEWAY_PORT 控制(默认 80),API 端口由 SERVER_PORT 控制(默认 9090)。

方式二:本地开发

前置要求

启动后端

# 1. 配置 .env 中的数据库连接
cp .env.example .env

# 2. 安装依赖
go mod download

# 3. 启动服务(首次启动自动迁移数据库表)
go run ./internal/app
# 默认监听 :9090

启动前台

cd blog-web
npm install
npm run dev    # http://localhost:5173

启动后台

cd blog-admin
npm install
npm run dev    # http://localhost:5174

⚙️ 配置说明

核心环境变量参考 .env.example

变量 说明
DB_* MySQL 数据库连接信息
REDIS_* Redis 连接配置
JWT_SECRET JWT 签名密钥(生产环境务必修改
JWT_EXPIRE_HOURS Token 过期时间,默认 7 天
EMAIL_* SMTP 邮件配置(评论通知)
CORS_ORIGINS 允许跨域的域名,逗号分隔
GATEWAY_PORT / SERVER_PORT 网关 / API 端口
LOG_* 日志文件配置(路径/大小/备份/保留)

🔐 博主身份:通过 blogger.user_id 服务端配置标识,前端不可伪造,杜绝冒充评论。


🔄 CI/CD 流水线

项目内置完整的 GitHub Actions 发布流水线:

push main ──► CI 校验 ──► 构建镜像 ──► 发布 GHCR ──► 生产审批 ──► 部署服务器
                │            │                          │             │
              gofmt/vet    backend     ghcr.io/       Review       健康检查
              测试+覆盖率  双前端      blog-*         approvals    失败自动回滚

流水线组成

工作流 触发时机 内容
ci.yml push main / PR 后端(gofmt、go vet、测试、覆盖率)+ 双前端构建 + 部署配置校验 + 镜像构建
release-deploy.yml CI 成功 发布不可变 tag 镜像(sha-<commit>)→ SSH 部署到服务器 → 健康检查 → 失败自动回滚

关键设计

  • 不可变发布:每个提交对应唯一镜像 tag(sha-<commit>),支持精准回滚到任意历史版本
  • 人工审批:生产环境部署需在 GitHub 上批准,防止误发布
  • 自动回滚:部署后健康检查失败自动恢复上一个成功版本

🧪 测试

# 运行全部测试
go test ./...

# 按层次分类
go test ./internal/service/...    # 业务逻辑测试
go test ./internal/repository/... # 数据访问测试
go test ./test/unit/...           # 单元测试
go test ./test/integration/...    # 集成测试
go test ./test/e2e/...            # 端到端测试

# 生成覆盖率报告
go test ./... -coverprofile=coverage.out
go tool cover -html=coverage.out

CI 流水线会自动执行测试并上传覆盖率报告(backend-coverage artifact)。


📖 文档


🤝 参与贡献

任何形式的贡献都非常欢迎!👏

  1. Fork 本仓库
  2. 创建特性分支:git checkout -b feature/your-feature
  3. 提交改动:git commit -m 'feat: add some feature'
  4. 推送到分支:git push origin feature/your-feature
  5. 提交 Pull Request

💡 提交信息建议遵循 Conventional Commits 规范;代码请通过 gofmtgo vet 检查。


🗺️ Roadmap

  • 核心博客能力(文章/分类/标签/评论)
  • 每日一问 + 日历排期
  • Docker 部署 + CI/CD 自动发布
  • 从 CSDN 批量迁移历史文章
  • 站内短链接 / 代码片段分享
  • 文章数据统计报表增强
  • 基于 AI 的摘要与标签推荐

📄 许可证

MIT © fcy222fcy


如果这个项目对你有帮助的话,不妨点个 ⭐ Star 支持一下~

About

个人技术博客仓库,用于记录 Go 后端、AI Agent、RAG、工程实践与学习总结。

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages