晨之博客
基于 Go + Vue3 构建的现代化博客系统,采用前后端分离架构设计。系统提供了完整的博客功能,包括文章管理、用户系统、评论互动、数据可视化、系统监控等模块。
晨之博客 (Chen-Blog)
📖 项目简介
晨之博客是一个基于 Go + Vue3 构建的现代化博客系统,采用前后端分离架构设计。系统提供了完整的博客功能,包括文章管理、用户系统、评论互动、数据可视化、系统监控、公告管理、站点设置等模块。
✨ 主要特性
- 🖊️ 富文本编辑 - 支持 Markdown 编辑,实时预览
- 📊 数据可视化 - 完整的统计分析和数据展示
- 🖥️ 系统监控 - 实时监控系统运行状态
- 🔐 JWT 认证 - 安全可靠的用户认证系统
- 💬 评论系统 - 支持嵌套回复和点赞
- ❤️ 点赞系统 - IP 限流的防刷点赞
- ⭐ 收藏功能 - 收藏喜欢的文章,支持收藏夹分类
- 🔔 通知系统 - 实时的站内通知,支持聚合和免打扰
- 🔍 全文搜索 - 高效的文章搜索,支持热词和建议
- 📱 响应式设计 - 完美适配各种设备
- 🌙 暗色模式 - 支持明暗主题切换
- 📢 公告系统 - 首页和个人中心公告展示
- 👥 在线人数 - 实时在线人数追踪
- ⚙️ 站点设置 - 全局站点配置管理
- 📋 操作日志 - 业务操作审计日志
- 📅 文章归档 - 按时间线归档文章
- 🔗 友链管理 - 博客交换友链申请和审核
- 📄 静态页面 - 自定义静态页面(关于、友链等)
- 🎨 媒体管理 - 图片上传和管理,支持分类
- 📈 访问统计 - PV/UV 统计,访客分析,访问日志记录
- 🔒 权限管理 - 多角色权限控制(普通用户/管理员/超级管理员)
- 🧵 SEO 优化 - 网站地图、RSS 订阅、爬虫协议
- 🛡️ 安全防护 - CORS 跨域、SQL 注入防护、XSS 防护
- 📝 草稿箱 - 自动保存文章草稿
- 🚫 举报系统 - 用户举报违规内容
- 👤 个人资料 - 完善的用户资料管理和登录日志
- 🔄 数据迁移 - 支持 SQLite ↔ MySQL 双向数据迁移
- 💾 数据备份 - MySQL 到 SQLite 自动备份工具
🛠️ 技术栈
后端技术
| 技术 | 说明 | 版本 | |------|------|------| | Go | 服务器语言 | 1.21+ | | Gin | HTTP Web 框架 | v1.9+ | | GORM | ORM 库 | v2 | | JWT | 身份认证 | go-jwt | | Viper | 配置管理 | v1.21+ | | Zap | 日志库 | v1.28+ | | Lumberjack | 日志轮转 | v2 | | SQLite | 开发数据库 | - | | MySQL | 生产数据库 | 8.0+ |
前端技术
| 技术 | 说明 | 版本 | |------|------|------| | Vue 3 | 前端框架 | 3.4+ | | TypeScript | 类型系统 | 5.4+ | | Vite | 构建工具 | 5.2+ | | Naive UI | UI 组件库 | 2.38+ | | ECharts | 数据可视化 | 6.0+ | | Vue Router | 路由管理 | 4.3+ | | Axios | HTTP 客户端 | 1.6+ | | md-editor-v3 | Markdown 编辑器 | 6.4+ |
📁 项目结构
chen-dynasty/
├── README.md # 项目说明文档(中文)
├── README.en.md # 项目说明文档(英文)
├── start.sh # 一键启动脚本
├── docker-compose.yml # Docker Compose 部署配置
├── .env.example # 环境变量示例
│
├── backend/ # 🌟 Go 后端服务
│ ├── main.go # 程序入口
│ ├── config.yaml # 配置文件
│ ├── go.mod # Go 模块依赖
│ ├── Dockerfile # 后端 Docker 构建文件
│ │
│ ├── config/ # 配置模块
│ │ └── config.go # 配置加载器(支持环境变量覆盖)
│ │
│ ├── database/ # 数据库模块
│ │ └── database.go # 数据库连接、连接池、自动迁移
│ │
│ ├── models/ # 📦 数据模型(30+ 模型)
│ │ └── models.go # 所有数据模型定义
│ │
│ ├── repositories/ # 💾 数据访问层(预留)
│ │
│ ├── services/ # 🧠 业务逻辑层(15+ 服务)
│ │ ├── article_service.go # 文章服务
│ │ ├── user_service.go # 用户服务
│ │ ├── category_service.go # 分类服务
│ │ ├── tag_service.go # 标签服务
│ │ ├── comment_service.go # 评论服务
│ │ ├── favorite_service.go # 收藏服务
│ │ ├── notification_service.go # 通知服务
│ │ ├── search_service.go # 搜索服务
│ │ ├── statistics_service.go # 统计服务
│ │ ├── monitor_service.go # 监控服务
│ │ ├── media_service.go # 媒体服务
│ │ ├── friendlink_service.go # 友链服务
│ │ ├── page_service.go # 页面服务
│ │ ├── seo_service.go # SEO 服务
│ │ ├── site_setting_service.go # 站点设置服务
│ │ └── announcement_service.go # 公告服务
│ │
│ ├── handlers/ # 🎮 控制器层(17+ 控制器)
│ │ ├── article_handler.go # 文章控制器
│ │ ├── user_handler.go # 用户控制器
│ │ ├── category_handler.go # 分类控制器
│ │ ├── tag_handler.go # 标签控制器
│ │ ├── comment_handler.go # 评论控制器
│ │ ├── favorite_handler.go # 收藏控制器
│ │ ├── notification_handler.go # 通知控制器
│ │ ├── search_handler.go # 搜索控制器
│ │ ├── statistics_handler.go # 统计控制器
│ │ ├── monitor_handler.go # 监控控制器
│ │ ├── media_handler.go # 媒体控制器
│ │ ├── friendlink_handler.go # 友链控制器
│ │ ├── page_handler.go # 页面控制器
│ │ ├── seo_handler.go # SEO 控制器
│ │ ├── site_setting_handler.go # 站点设置控制器
│ │ ├── announcement_handler.go # 公告控制器
│ │ ├── online_handler.go # 在线人数控制器
│ │ └── common.go # 通用响应处理
│ │
│ ├── router/ # 🛤️ 路由模块(17+ 路由文件)
│ │ ├── router.go # 路由总览和中间件配置
│ │ ├── article.go # 文章路由
│ │ ├── user.go # 用户路由
│ │ ├── category.go # 分类路由
│ │ ├── tag.go # 标签路由
│ │ ├── comment.go # 评论路由
│ │ ├── favorite.go # 收藏路由
│ │ ├── notification.go # 通知路由
│ │ ├── search.go # 搜索路由
│ │ ├── statistics.go # 统计路由
│ │ ├── monitor.go # 监控路由
│ │ ├── media.go # 媒体路由
│ │ ├── friendlink.go # 友链路由
│ │ ├── page.go # 页面路由
│ │ ├── seo.go # SEO 路由
│ │ ├── site_setting.go # 站点设置路由
│ │ ├── announcement.go # 公告路由
│ │ └── online.go # 在线人数路由
│ │
│ ├── middleware/ # 🔧 中间件
│ │ ├── auth.go # JWT 认证中间件
│ │ ├── logger.go # 请求日志中间件(JSON 结构化)
│ │ ├── operation_log.go # 业务操作日志中间件
│ │ ├── access_log.go # 访问日志中间件(自动记录访问数据)
│ │ └── online_tracker.go # 在线追踪中间件
│ │
│ ├── tools/ # 🛠️ 数据迁移工具
│ │ ├── migrate.go # SQLite → MySQL 迁移工具
│ │ └── README_MIGRATE.md # 迁移工具使用说明
│ │
│ ├── cmd/ # 🛠️ 命令行工具
│ │ ├── mysql_to_sqlite_backup.go # MySQL → SQLite 备份工具
│ │ └── README.md # 工具使用说明
│ │
│ ├── utils/ # 🧰 工具函数
│ │ ├── jwt.go # JWT 工具
│ │ ├── password.go # 密码加密(bcrypt)
│ │ ├── response.go # 统一响应封装
│ │ └── logger.go # 日志系统(Zap + Lumberjack)
│ │
│ ├── uploads/ # 📤 文件上传目录
│ ├── logs/ # 📝 日志目录
│ └── blog.db # SQLite 数据库文件
│
└── frontend/ # 🌟 Vue 前端应用
├── package.json # 项目依赖
├── vite.config.ts # Vite 配置(含代理)
├── tsconfig.json # TypeScript 配置
├── index.html # HTML 入口
├── Dockerfile # 前端 Docker 构建文件
├── nginx.conf # Nginx 部署配置
│
├── src/
│ ├── main.ts # Vue 入口文件
│ ├── App.vue # 根组件(含暗色模式)
│ ├── style.css # 全局样式
│ │
│ ├── api/ # 📡 API 接口层
│ │ ├── request.ts # Axios 封装和拦截器
│ │ ├── article.ts # 文章接口
│ │ ├── user.ts # 用户接口
│ │ ├── category.ts # 分类接口
│ │ ├── tag.ts # 标签接口
│ │ ├── media.ts # 媒体接口
│ │ └── site_setting.ts # 站点设置接口
│ │
│ ├── router/ # 🛤️ 路由配置
│ │ └── index.ts # 路由定义(14 个页面路由)
│ │
│ ├── views/ # 📄 页面组件(14 个页面)
│ │ ├── Home.vue # 首页
│ │ ├── Article.vue # 文章详情
│ │ ├── MyArticles.vue # 我的文章
│ │ ├── Categories.vue # 分类列表
│ │ ├── Category.vue # 分类文章
│ │ ├── Tags.vue # 标签列表
│ │ ├── Tag.vue # 标签文章
│ │ ├── Archive.vue # 文章归档
│ │ ├── Search.vue # 搜索结果
│ │ ├── Login.vue # 登录页
│ │ ├── Profile.vue # 个人中心
│ │ ├── Monitor.vue # 系统监控
│ │ ├── DataVisualization.vue # 数据可视化
│ │ └── About.vue # 关于页面
│ │
│ ├── components/ # 🧩 公共组件
│ │ ├── NavBar.vue # 导航栏组件
│ │ └── Footer.vue # 页脚组件
│ │
│ ├── plugins/ # 🔌 插件配置
│ │ └── naive-ui.ts # Naive UI 插件配置
│ │
│ ├── assets/ # 🖼️ 静态资源
│ │
│ ├── dist/ # 📦 构建输出
│ └── logs/ # 📝 前端日志
│
└── logs/ # 📝 前端日志目录
🚀 快速开始
环境要求
- Go: 1.21+
- Node.js: 18+
- npm 或 pnpm
一键启动(推荐)
# 克隆项目
git clone https://gitee.com/your-gitee/chen-dynasty.git
cd chen-dynasty
# 赋予脚本执行权限
chmod +x start.sh
# 启动所有服务
./start.sh start
# 查看服务状态
./start.sh status
# 查看日志
./start.sh logs
# 停止服务
./start.sh stop
手动启动
1. 启动后端
cd backend
# 安装依赖
go mod tidy
# 运行服务
go run main.go
# 或编译后运行
go build -o blog_server .
./blog_server
2. 启动前端
cd frontend
# 安装依赖
npm install
# 开发模式
npm run dev
# 生产构建
npm run build
访问地址
- 前端: http://localhost:5173
- 后端 API: http://localhost:9000
- 健康检查: http://localhost:9000/ping
⚙️ 配置说明
配置文件位于 backend/config.yaml,支持通过环境变量覆盖敏感配置:
# 应用配置
app:
name: "chen-blog" # 应用名称
port: "9000" # 服务端口
mode: "debug" # 运行模式:debug / release
env: "development" # 环境:development / production
# 数据库配置
database:
driver: "mysql" # 数据库驱动:sqlite / mysql
max_open_conns: 100 # 最大打开连接数
max_idle_conns: 10 # 最大空闲连接数
max_life_time: 3600 # 连接最大生命周期(秒)
sqlite:
path: "./blog.db" # SQLite 数据库路径
mysql:
host: "127.0.0.1"
port: 3306
user: "root"
password: "password"
database: "chen_blog"
charset: "utf8mb4"
# JWT 配置(生产环境请通过环境变量 JWT_SECRET 设置)
jwt:
secret: "" # JWT 密钥(留空则通过环境变量覆盖)
expire_hour: 24 # 过期时间(小时)
# 日志配置
log:
level: "info" # 日志级别:debug / info / warn / error
filename: "./logs/blog.log"
max_size: 100 # 单个日志文件大小(MB)
max_backups: 30 # 保留的旧日志文件数量
max_age: 30 # 保留旧日志最大天数
compress: true # 是否压缩旧日志
# CORS 跨域配置
cors:
allow_origins: # 允许的来源
- "*"
allow_methods: # 允许的 HTTP 方法
- "GET"
- "POST"
- "PUT"
- "DELETE"
- "OPTIONS"
allow_headers: # 允许的请求头
- "Origin"
- "Content-Type"
- "Authorization"
max_age: 86400 # 预检请求缓存时间(秒)
# 媒体/上传配置
media:
upload_path: "./uploads" # 上传目录
max_file_size: 10 # 单文件最大大小(MB)
allowed_exts: # 允许的文件扩展名
- ".jpg"
- ".jpeg"
- ".png"
- ".gif"
- ".webp"
- ".svg"
server_url: "http://localhost:9000/uploads" # 访问 URL 前缀
thumbnail: # 缩略图配置
enabled: false # 是否启用缩略图
max_width: 300
max_height: 300
quality: 80
format: "webp"
# 站点配置
site:
name: "晨之博客"
subtitle: "记录技术,分享生活"
description: "一个简洁优雅的博客系统"
keywords: "博客,Go,Vue,程序员,技术分享"
url: "http://localhost:9000"
admin_url: "http://localhost:5173"
logo: "/uploads/logo.png"
favicon: "/favicon.ico"
author:
name: "晨之"
email: "admin@example.com"
avatar: "/uploads/avatar.png"
seo:
title_separator: " - "
robots: "index,follow"
google_verification: ""
baidu_verification: ""
social:
github: ""
weibo: ""
zhihu: ""
twitter: ""
icp:
enabled: false
number: ""
link: "https://beian.miit.gov.cn"
copyright:
start_year: 2024
text: "© {year} {author}. All rights reserved."
# 分页配置
pagination:
default_page_size: 10
max_page_size: 100
# 文章配置
article:
summary_length: 200
draft_auto_save: true
📚 功能模块
1. 用户模块
| 功能 | 说明 | |------|------| | 用户注册 | 支持用户名、邮箱注册 | | 用户登录 | JWT Token 认证 | | 找回密码 | 通过邮箱验证 | | 个人资料 | 修改昵称、邮箱、头像、简介 | | 登录日志 | 查看登录历史记录 | | 操作日志 | 记录敏感操作(密码修改等) | | 权限管理 | 普通用户/管理员/超级管理员 |
2. 文章模块
| 功能 | 说明 | |------|------| | 文章发布 | Markdown 富文本编辑 | | 文章管理 | 列表、编辑、删除、恢复 | | 文章置顶 | 置顶重要文章 | | 点赞功能 | IP 限流防刷(每天每 IP 每篇文章一个赞) | | 文章举报 | 用户举报违规内容 | | 草稿箱 | 保存未发布的文章 | | 阅读统计 | 记录文章阅读量 | | 定时发布 | 支持定时发布文章 |
3. 评论模块
| 功能 | 说明 | |------|------| | 评论发布 | 支持 Markdown | | 评论回复 | 支持嵌套回复 | | 评论管理 | 审核、删除 | | 评论点赞 | 点赞评论 |
4. 分类与标签
| 功能 | 说明 | |------|------| | 分类管理 | 树形分类结构 | | 标签管理 | 彩色标签 | | 文章关联 | 文章分类/标签关联 |
5. 收藏模块
| 功能 | 说明 | |------|------| | 收藏文章 | 收藏喜欢的文章 | | 收藏列表 | 查看收藏的文章 | | 收藏管理 | 添加/移除收藏 | | 收藏夹 | 自定义收藏夹分类管理 |
6. 通知系统
| 功能 | 说明 | |------|------| | 通知列表 | 查看各类通知 | | 未读统计 | 未读消息数量 | | 标记已读 | 单条/全部标记已读 | | 通知设置 | 设置通知偏好(免打扰等) | | 通知聚合 | 同类通知自动聚合 |
7. 搜索系统
| 功能 | 说明 | |------|------| | 全文搜索 | 高效的搜索功能 | | 热门关键词 | 显示搜索热词 | | 搜索建议 | 智能提示 | | 搜索历史 | 管理搜索记录 |
8. 系统监控
| 功能 | 说明 | |------|------| | 实时数据 | CPU、内存、磁盘使用率 | | GC 统计 | 垃圾回收监控 | | 数据库统计 | 连接数、表数量 | | 网络统计 | TCP 连接数、请求统计 | | 告警系统 | 阈值告警 | | 响应时间 | 接口响应时间分布 |
9. 数据可视化
| 功能 | 说明 | |------|------| | 业务统计 | 文章、用户、评论概览 | | 趋势分析 | 近 30 天增长趋势 | | 分类分布 | 饼图展示分类占比 | | 发布时段 | 文章发布时间分布 | | 用户活跃 | 登录/活跃统计 | | 文章质量 | 互动数据 TOP 榜单 | | 热门标签 | 标签使用频率统计 | | 导出报表 | JSON 格式导出 |
10. SEO 优化
| 功能 | 说明 | |------|------| | 网站地图 | /sitemap.xml | | RSS 订阅 | /rss.xml | | 爬虫协议 | /robots.txt | | SEO 路由 | SEO 相关的动态路由处理 |
11. 友链管理
| 功能 | 说明 | |------|------| | 友链申请 | 博客交换友链申请 | | 友链审核 | 管理员审核友链申请 | | 友链展示 | 首页侧边栏展示友链 |
12. 站点设置
| 功能 | 说明 | |------|------| | 全局配置 | 网站名称、描述、关键字等 | | 服务器 URL | 资源访问地址配置 | | 动态管理 | 运行时动态更新配置 |
13. 公告系统
| 功能 | 说明 | |------|------| | 公告展示 | 首页和个人中心展示公告 | | 公告管理 | 管理员更新公告内容 | | 富文本支持 | 支持 Markdown 格式公告 |
14. 在线人数
| 功能 | 说明 | |------|------| | 实时统计 | 基于 Session 的在线人数统计 | | 自动清理 | 5 分钟超时自动清理过期会话 | | 公开接口 | 无需认证即可获取在线人数 |
15. 文章归档
| 功能 | 说明 | |------|------| | 时间线 | 按年月归档文章 | | 统计展示 | 显示每月文章数量 |
16. 媒体管理
| 功能 | 说明 | |------|------| | 文件上传 | 支持图片、视频、音频、文档 | | 媒体分类 | 自定义媒体分类管理 | | 缩略图 | 自动生成图片缩略图 | | 文件管理 | 查看、删除媒体文件 | | 关联文章 | 媒体与文章关联 |
17. 静态页面
| 功能 | 说明 | |------|------| | 页面管理 | 创建和管理静态页面 | | 模板系统 | 支持多种页面模板 | | 版本控制 | 页面历史版本记录 | | SEO优化 | 每个页面独立SEO设置 | | 自定义URL | 支持自定义页面别名 |
18. 访问统计 🆕
| 功能 | 说明 | |------|------| | PV/UV 统计 | 页面浏览量和独立访客统计 | | 访客分析 | 设备类型、浏览器、操作系统分析 | | 地域统计 | 国家、省份、城市分布 | | 来源分析 | 搜索引擎、社交媒体、直接访问 | | 实时统计 | 每小时访问数据统计 | | 趋势分析 | 日/周/月访问趋势 | | 访问日志 | 自动记录所有访问请求(IP、UA、Referer 等) | | 文章统计 | 每篇文章的访问量统计 |
19. 搜索增强
| 功能 | 说明 | |------|------| | 多类型搜索 | 文章、页面、评论、用户搜索 | | 搜索建议 | 智能关键词补全 | | 热词统计 | 热门搜索词排行榜 | | 搜索历史 | 个人搜索历史记录 | | 结果排序 | 按相关性、时间排序 |
20. 安全防护
| 功能 | 说明 | |------|------| | JWT认证 | Token过期自动刷新 | | CORS配置 | 可配置的跨域资源共享 | | SQL注入防护 | GORM参数化查询 | | XSS防护 | 输入内容转义处理 | | IP限流 | 点赞等操作IP限流 | | 密码加密 | bcrypt强加密算法 | | 操作审计 | 敏感操作日志记录 |
🌐 API 接口文档
详细接口文档请查看 API_DOC.md
认证方式
所有需要认证的接口需要在 Header 中携带 Token:
Authorization: Bearer <token>
Content-Type: application/json
响应格式
``json // 成功响应 { "code": 200, "message": "success", "data": {} }
// 错误响应 { "error": "错误信息" }
### 主要接口
| 方法 | 路径 | 说明 | 认证 |
|------|------|------|------|
| POST | `/api/v1/auth/register` | 用户注册 | 否 |
| POST | `/api/v1/auth/login` | 用户登录 | 否 |
| GET | `/api/v1/articles` | 文章列表 | 否 |
| GET | `/api/v1/articles/:id` | 文章详情 | 否 |
| POST | `/api/v1/articles` | 创建文章 | 是 |
| PUT | `/api/v1/articles/:id` | 更新文章 | 是 |
| DELETE | `/api/v1/articles/:id` | 删除文章 | 是 |
| POST | `/api/v1/articles/:id/like` | 点赞文章 | 否 |
| DELETE | `/api/v1/articles/:id/like` | 取消点赞 | 否 |
| GET | `/api/v1/categories` | 分类列表 | 否 |
| POST | `/api/v1/categories` | 创建分类 | 是 |
| GET | `/api/v1/tags` | 标签列表 | 否 |
| POST | `/api/v1/comments` | 发表评论 | 是 |
| GET | `/api/v1/monitor/system` | 系统监控数据 | 是 |
| GET | `/api/v1/stats/overview` | 统计概览 | 是 |
| GET | `/api/v1/announcement` | 获取公告 | 否 |
| PUT | `/api/v1/announcement` | 更新公告 | 是(管理员) |
| GET | `/api/v1/online` | 获取在线人数 | 否 |
| GET | `/api/v1/site-settings/public` | 获取公开站点设置 | 否 |
| GET | `/api/v1/search` | 全文搜索 | 否 |
| GET | `/api/v1/friendlinks` | 友链列表 | 否 |
| POST | `/api/v1/media/upload` | 上传文件 | 是 |
| GET | `/api/v1/media` | 媒体列表 | 是 |
| GET | `/api/v1/pages` | 页面列表 | 否 |
| GET | `/api/v1/pages/:slug` | 页面详情 | 否 |
| GET | `/api/v1/favorites` | 收藏列表 | 是 |
| POST | `/api/v1/favorites` | 添加收藏 | 是 |
| DELETE | `/api/v1/favorites/:id` | 取消收藏 | 是 |
| GET | `/api/v1/notifications` | 通知列表 | 是 |
| PUT | `/api/v1/notifications/read` | 标记已读 | 是 |
| GET | `/api/v1/users/me` | 获取当前用户 | 是 |
| PUT | `/api/v1/users/me` | 更新个人资料 | 是 |
| GET | `/api/v1/users/me/logs` | 登录日志 | 是 |
| GET | `/api/v1/stats/access` | 访问统计数据 | 是 |
| GET | `/api/v1/stats/trends` | 访问趋势数据 | 是 |
| GET | `/sitemap.xml` | 网站地图 | 否 |
| GET | `/rss.xml` | RSS 订阅 | 否 |
| GET | `/robots.txt` | 爬虫协议 | 否 |
---
## 🛠️ 数据迁移工具
项目提供了完整的数据迁移工具,支持 SQLite 和 MySQL 之间的双向数据迁移。
### SQLite → MySQL(开发→生产)
```bash
cd backend
go run tools/migrate.go
功能特性:
- 自动读取 config.yaml 配置
- 全量迁移所有表数据
- 实时显示迁移进度
- 迁移后数据验证
MySQL → SQLite(生产→开发)
cd backend
go run cmd/mysql_to_sqlite_backup.go
功能特性:
- 将 MySQL 数据备份到 SQLite
- 生成 blog_backup.db 备份文件
- 支持完整的数据结构迁移
详细使用说明请查看:
🎨 界面预览
首页
- 轮播图展示置顶文章
- 最新文章列表
- 热门文章排行
- 分类导航
- 标签云
- 公告展示
文章详情页
- Markdown 渲染
- 代码高亮
- 点赞/收藏功能
- 评论系统
- 相关推荐
管理后台
- 个人资料管理
- 文章编辑器(md-editor-v3)
- 数据可视化中心
- 系统监控面板
- 站点设置管理
📝 开发指南
添加新功能
-
后端
- 在
models/models.go添加数据模型 - 在
services/添加业务逻辑 - 在
handlers/添加控制器 - 在
router/注册路由 - 更新
middleware/auth.go添加权限控制(如需要)
- 在
-
前端
- 在
api/添加接口封装 - 在
views/添加页面组件 - 在
router/index.ts添加路由 - 添加相应的样式
- 在
数据库迁移
系统启动时会自动执行数据库迁移,创建必要的表结构。
如需手动迁移:
cd backend
go run main.go -migrate
🔧 部署指南
Docker 部署
使用 Docker Compose 一键部署:
# 复制环境变量配置
cp .env.example .env
# 编辑 .env 文件修改配置
vim .env
# 启动所有服务
docker compose up -d
# 查看日志
docker compose logs -f
# 停止服务
docker compose down
# docker-compose.yml 主要配置
services:
backend:
build: ./backend
ports:
- "${BACKEND_PORT:-9000}:9000"
environment:
DATABASE_MYSQL_HOST: host.docker.internal
DATABASE_MYSQL_USER: ${MYSQL_USER}
DATABASE_MYSQL_PASSWORD: ${MYSQL_PASSWORD}
JWT_SECRET: ${JWT_SECRET}
volumes:
- backend_uploads:/app/uploads
- backend_logs:/app/logs
frontend:
build: ./frontend
ports:
- "${FRONTEND_PORT:-8081}:80"
depends_on:
- backend
Nginx 配置
``nginx server { listen 80; server_name your-domain.com;
# 前端静态文件
location / {
root /var/www/chen-blog/frontend/dist;
try_files $uri $uri/ /index.html;
}
# API 代理
location /api/ {
proxy_pass http://localhost:9000/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 上传文件访问
location /uploads/ {
proxy_pass http://localhost:9000/uploads/;
proxy_set_header Host $host;
}
}
---
## 📄 许可证
本项目基于 [MIT License](./LICENSE) 开源,你可以自由使用、修改和分发。
---
## 🤝 贡献指南
欢迎提交 Issue 和 Pull Request!
1. Fork 本仓库
2. 创建分支 (`git checkout -b feature/AmazingFeature`)
3. 提交代码 (`git commit -m 'Add some AmazingFeature'`)
4. 推送分支 (`git push origin feature/AmazingFeature`)
5. 创建 Pull Request
---
## 📧 联系方式
- **作者**: 晨
- **邮箱**: 1542776628@qq.com
- **博客**: https://www.chenzhanxu.top/
---
## 🙏 致谢
本项目参考了以下开源项目:
- [Gin](https://github.com/gin-gonic/gin) - Go Web 框架
- [Naive UI](https://github.com/tusen-ai/naive-ui) - Vue 3 组件库
- [ECharts](https://github.com/ecomfe/echarts) - 数据可视化图表库
- [md-editor-v3](https://github.com/imzbf/md-editor-v3) - Markdown 编辑器
- [Zap](https://github.com/uber-go/zap) - 高性能日志库
---
<div align="center">
**如果这个项目对你有帮助,请 star ⭐ 支持一下!**
</div>