Go 全栈博客实战项目 gin-vue-blog

news2024/9/23 1:38:14

Go 全栈博客 gin-vue-blog

    • 写在前面
    • 博客介绍
    • 在线预览
    • 项目介绍
      • 技术介绍
      • 目录结构
    • 环境介绍
      • 线上环境
      • 开发环境
      • VsCode 插件
    • 快速开始
      • 拉取项目前的准备 (Windows)
      • 方式一:Docker Compose 一键运行
      • 方式二:常规运行
      • 项目部署
    • 总结鸣谢
    • 后续计划

写在前面

这个项目其实已经写了有一段时间了,一直想发个博客宣传一下,不过由于懒,拖着拖着就拖到现在了。。。现在也懒得写别的了,下面拿该项目的 README.md 来充数了。

博客项目最近没有更新,因为现在在实习。等有空准备对该项目进行 v2 版本的重构。

实习期间接触到了一些 Go 框架的维护与开发,目前有了新的想法,等待实行。。

实习了一段时间还是觉得这个项目的结构 + 代码是十分清晰的,欢迎 Star。

博客介绍

阵、雨的个人博客

在线预览 | 项目介绍 | 技术介绍 | 目录结构 | 环境介绍 | 快速开始 | 总结&鸣谢 | 后续计划 | 更新日志

您的 Star 是我坚持的动力,感谢大家的支持,欢迎提交 Pr 共同改进项目。

Github 地址:https://github.com/szluyu99/gin-vue-blog

Gitee 地址:https://gitee.com/szluyu99/gin-vue-blog

在线预览

博客前台链接:hahacode.cn(已适配移动端)

博客后台链接:hahacode.cn/admin(暂未专门适配移动端)

博客域名已通过备案,且配置 SSL,通过 https 访问

测试账号:test@qq.com,密码:11111,前后台都可用这个账号登录

在线接口文档地址:doc.hahacode.cn

本项目在线接口文档由 Apifox 生成,由于项目架构调整,有些接口待完善和修改

由于一开始不会用,接口文档生成的信息不全(如返回响应、响应示例),后续完善

以下放几张简单的预览图,强烈建议点击上面的预览链接进去体验下:
在这里插入图片描述

前台首页文章列表

后台文章列表

项目介绍

Github 上有很多优秀的前后台框架,本项目也参考了许多开源项目,但是大多项目都比较重量级(并非坏处),如果从学习的角度来看对初学者并不是很友好。本项目在以博客这个业务为主的前提下,提供一个完整的全栈项目代码(前台前端 + 后台前端 + 后端),技术点基本都是最新 + 最火的技术,代码轻量级,注释完善,适合学习。

同时,本项目可用于一键搭建动态博客(参考 快速开始)。

前台:

  • 前台界面设计参考 Hexo 的 Butterfly 设计,美观简洁
  • 响应式布局,适配了移动端
  • 实现点赞,统计用户等功能 (Redis)
  • 评论 + 回复评论功能
  • 留言采用弹幕墙,效果炫酷
  • 文章详情页有文章目录、推荐文章等功能,优化用户体验

后台:

  • 鉴权使用 JWT
  • 权限管理使用 CASBIN,实现基于 RBAC 的权限管理
  • 支持动态权限修改,前端菜单由后端生成(动态路由)
  • 文章编辑使用 Markdown 编辑器
  • 常规后台功能齐全:侧边栏、面包屑、标签栏等
  • 实现记录操作日志功能(GET 不记录)
  • 实现监听在线用户、强制下线功能
  • 文件上传支持七牛云、本地(后续计划支持更多)
  • 对 CRUD 操作封装了通用 Hook

其他:

  • 采用 Restful 风格的 API
  • 前后端分离部署,前端使用 Nginx,后端使用 Docker
  • 代码整洁层次清晰,利于开发者学习
  • 技术点新颖,代码轻量级,适度封装
  • Docker Compose 一键运行,轻松搭建在线博客

技术介绍

这里只写一些主流的通用技术,详细第三方库:前端参考 package.json 文件,后端参考 go.mod 文件

前端技术栈: 使用 pnpm 包管理工具

  • 基于 TypeScript
  • Vue3
  • VueUse: 服务于 Vue Composition API 的工具集
  • Unocss: 原子化 CSS
  • Pinia
  • Vue Router
  • Axios
  • Naive UI

后端技术栈:

  • Golang
  • Docker
  • Gin
  • GORM
  • Viper: 支持 TOML (默认)、YAML 等常用格式作为配置文件
  • Casbin
  • Zap
  • MySQL
  • Redis
  • Nginx: 部署静态资源 + 反向代理

其他:

  • 腾讯云人机验证
  • 七牛云对象存储

目录结构

这里简单列出目录结构,具体可以查看源码

代码仓库目录:

gin-vue-blog
├── gin-blog-admin      -- 博客后台前端
├── gin-blog-front      -- 博客前台前端
├── gin-blog-server     -- 博客后端
├── deploy              -- 部署

项目运行参考:快速开始

后端目录:简略版

gin-blog-server
├── api             -- API
│   ├── front       -- 前台接口
│   └── v1          -- 后台接口
├── dao             -- 数据库操作模块
├── service         -- 服务模块
├── model           -- 数据模型
│   ├── req             -- 请求 VO 模型
│   ├── resp            -- 响应 VO 模型
│   ├── dto             -- 内部传输 DTO 模型
│   └── ...             -- 数据库模型对象 PO 模型
├── routes          -- 路由模块
│   └── middleware      -- 路由中间件
├── utils           -- 工具模块
│   ├── r               -- 响应封装
│   ├── upload          -- 文件上传
│   └── ...
├── routes          -- 路由模块
├── config          -- 配置文件
├── test            -- 测试模块
├── assets          -- 资源文件
├── log             -- 存放日志的目录
├── public          -- 外部访问的静态资源
│   └── uploaded    -- 本地文件上传目录
├── Dockerfile
└── main.go

前端目录:简略版

gin-vue-admin / gin-vue-front 通用目录结构
├── src              
│   ├── api             -- 接口
│   ├── assets          -- 静态资源
│   ├── styles          -- 样式
│   ├── components      -- 组件
│   ├── composables     -- 组合式函数
│   ├── router          -- 路由
│   ├── store           -- 状态管理
│   ├── utils           -- 工具方法
│   ├── views           -- 页面
│   ├── App.vue
│   └── main.ts
├── settings         -- 项目配置
├── build            -- 构建相关的配置
├── public           -- 公共资源, 在打包后会被加到 dist 根目录
├── package.json 
├── package-lock.json
├── index.html
├── tsconfig.json
├── unocss.config.ts -- unocss 配置
└── vite.config.ts   -- vite 配置
├── .env             -- 通用环境变量
├── .env.development -- 开发环境变量
├── .env.production  -- 线上环境变量
├── .gitignore
├── .editorconfig    -- 编辑器配置

部署目录:简略版

deploy
├── build      -- 镜像构建
│   ├── mysql  -- mysql 镜像构建
│   ├── server -- 后端镜像构建 (基于 gin-blog-server 目录)
│   └── web    -- 前端镜像构建 (基于前端项目打包的静态资源)
└── start
    ├── docker-compose.yml    -- 多容器管理
    └── .env                  -- 环境变量
    └── ...

环境介绍

线上环境

服务器:腾讯云 2核 4G Ubuntu 22.04 LTS

对象存储:七牛云

开发环境

开发工具说明
VscodeGolang 后端 + Vue 前端
NavicatMySQL 远程连接工具
Another Redis Desktop ManagerRedis 远程连接工具
MobaXtermLinux 远程工具
Apifox接口调试 + 文档生成
开发环境版本
Golang1.19
MySQL8.x
Redis7.x

VsCode 插件

目前推荐安装插件已经写到 .vscode/extensions.json 中,使用 VsCode 打开项目会推荐安装。

注意,一定要用 VsCode 打开 gin-blog-admin 和 gin-blog-front 这两个前端项目,而不是打开 gin-vue-blog 这个目录!

前端必备插件:

插件作用
VolarVue 官方插件
UnoCSSUnocss 官方插件
Iconify IntelliSenseIconify 提示插件

后端必备插件:

插件作用
GoGolang 官方插件

其他插件:(个人推荐,用于提升开发体验)

名称作用
Better Comments优化代码注释显示效果
TODO Highlight高亮 TODO
Highlight Matching Tag高亮匹配的标签

快速开始

建议下载本项目后,先一键运行起来,查看本项目在本地的运行效果。

需要修改源码的话,参考常规运行,前后端分开运行。

拉取项目前的准备 (Windows)

如果是 Windows 系统,需要先执行以下指令,否则 Docker 构建过程会出 BUG。

或者直接下载 ZIP 而不是通过 git clone 克隆项目。

Linux 和 Mac 不需要进行该操作。

原因是该项目开发时基于 Linux,本项目规范使用 lf 换行符。而 Windows 的 git 在自动拉取项目时会将项目文件中换行符转换为 crlf,经过测试,构建过程会产生 BUG。

# 防止 git 自动将换行符转换为 crlf
git config --global core.autocrlf false

方式一:Docker Compose 一键运行

需要有 Docker 和 Docker Compose 的环境

详细运行文档(包含环境搭建)参考:deploy/README.md

# 拉取项目, 进入根目录
git clone https://github.com/szluyu99/gin-vue-blog 
cd gin-vue-blog

# 进入 docker-compose 目录
cd deploy/start

# 一键运行
docker-compose up -d

本地前台访问 localhost

本地后台访问 localhost/admin

默认用户:

  • 管理员 admin 123456
  • 普通用户 user 123456
  • 测试用户 test 123456

如果运行遇到问题,请查看详细文章 deploy/README.md

方式二:常规运行

自行安装 Golang、Node、MySQL、Redis 环境:

Golang 安装参考 官方文档
Node 安装建议使用 Nvm
MySQL、Redis 建议使用 Docker 运行

需要先运行后端服务,再运行前端项目,因为很多前端配置由后端动态加载(如菜单等)。

拉取项目到本地:

git clone https://github.com/szluyu99/gin-vue-blog.git

后端项目运行:

# 1、进入后端项目根目录 
cd gin-blog-server

# 2、修改项目运行的配置文件,默认加载位于 config/config.toml 

# 3、MySQL 导入 gvb.sql

# 4、启动 Redis 

# 5、运行项目
go mod tidy
go run main.go

数据库中的默认用户:

  • 管理员 admin 123456
  • 普通用户 user 123456
  • 测试用户 test 123456

前端项目运行: 本项目使用 pnpm 进行包管理,建议全局安装 pnpm

npm install -g pnpm

前台前端:

# 1、进入前台前端项目根目录
cd gin-blog-front

# 2、安装依赖
pnpm install

# 3、运行项目
pnpm dev

后台前端:

# 1、进入后台前端项目根目录
cd gin-blog-admin

# 2、安装依赖
pnpm install

# 3、运行项目
pnpm dev

项目部署

很快就来。保证简单。

总结鸣谢

这个项目不管是前端,还是后端,都是花了比较大心血去架构的,并且从技术选型上,都是选择了目前最火 + 最新的技术栈。当然,这也是个人的学习之作,很多知识点都是边学边开发的(例如 Casbin),这个过程中也参考了很多优秀的开源项目,感谢大家的开源让程序员的世界更加美好,这也是开源本项目的目的之一。本项目中仍有很多不足,后续会继续更新。

最后,项目整体代码风格很优秀,注释完善,适合 Golang 后端开发者、前端开发者学习。

鸣谢项目:

  • https://butterfly.js.org/
  • https://github.com/flipped-aurora/gin-vue-admin
  • https://github.com/qifengzhang007/GinSkeleton
  • https://github.com/X1192176811/blog
  • https://github.com/zclzone/vue-naive-admin
  • https://github.com/antfu/vitesse

需要感谢的绝不止以上这些开源项目,但是一时难以全部列出,后面会慢慢补上。

后续计划

高优先级:

  • 完善图片上传功能, 目前文件上传还没怎么处理 🆗
  • 后台首页重新设计(目前没放什么内容)
  • 前台首页搜索文章(目前使用数据库模糊搜索) 🆗
  • 博客文章导入导出 (.md 文件) 🆗
  • 权限管理中菜单编辑时选择图标(现在只能输入图标字符串) 🆗
  • 后端日志切割
  • 后台修改背景图片,博客配置等 🆗
  • 后端的 IP 地址检测 BUG 待修复 🆗
  • 博客前台适配移动端 🆗
  • 文章详情, 目录锚点跟随 🆗
  • 邮箱注册 + 邮件发送验证码 🆗

后续有空安排上:

  • 黑夜模式
  • 前台收缩侧边信息功能
  • 说说
  • 相册
  • 音乐播放器
  • 鼠标左击特效
  • 看板娘
  • 第三方登录: QQ、微信、Github …
  • 评论时支持选择表情,参考 Valine
  • 单独部署:前后端 + 环境
  • 重写单元测试,目前的单元测试是早期版本,项目架构更改后,无法跑通
  • 前台首页搜索集成 ElasticSearch
  • 国际化?

其他:

  • 写一份好的文档
  • 补全 README.md
  • 完善 Apifox 生成的接口文档
  • 一键部署:使用 docker compose 单机一键部署整个项目(前后端 + 环境) 🆗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/341402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dubbo和Zookeeper集成

分布式理论 什么是分布式系统? 在《分布式系统原理与范型》一书中有如下定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”; 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调…

分享111个助理类简历模板,总有一款适合您

分享111个助理类简历模板,总有一款适合您 111个助理类简历模板下载链接:https://pan.baidu.com/s/1JafYuLPQMmq37K4V0wiqWA?pwd8y54 提取码:8y54 Python采集代码下载链接:https://wwgn.lanzoul.com/iKGwb0kye3wj 设计师助理…

浅析SCSI协议(1)基本介绍

概述 SCSI即小型计算机接口(Small Computer System Interface),指的是一个庞大协议体系,到目前为止经历了SCSI-1/SCSI-2/SCSI-3变迁。SCSI协议定义了一套不同设备(磁盘、磁带、处理器、光设备、网络设备等&#xff09…

C/C++工业数据分析与文件信息管理系统[2023-02-12]

C/C工业数据分析与文件信息管理系统[2023-02-12] 程序设计基础A课程设计 工业数据分析与文件信息管理系统 题目背景 智能制造是以工业生产数据分析、自动化技术为基础,具有信息深度自感知、智慧优化自决策、精准控制自执行等功能,使制造活动达到安全…

[golang gin框架] 2.Gin HTML模板渲染以及模板语法,自定义模板函数,静态文件服务

一.Gin HTML 模板渲染全部模板放在一个目录里面的配置方法首先在项目根目录新建 templates 文件夹&#xff0c;然后在文件夹中新建 对应的index.html<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http…

图像处理-边缘检测-文献阅读笔记

[1]李华琛. 基于opencv图像边缘检测技术[J]. 数字技术与应用, 2016(11):2. 高斯滤波有效抑制噪声&#xff1b;原理&#xff1a;识别图像中亮度改变较为明显的点&#xff0c;本质是采用不同的算子进行边缘检测并进行修整。算子&#xff1a;Laplacian 算子、Scharr 算子、Canny 算…

Kerberos简单介绍及使用

Kerberos作用 简单来说安全相关一般涉及以下方面&#xff1a;用户认证&#xff08;Kerberos的作用&#xff09;、用户授权、用户管理.。而Kerberos功能是用户认证&#xff0c;通俗来说解决了证明A是A 的问题。 认证过程&#xff08;时序图&#xff09; 核心角色/概念 KDC&…

电子学会2022年12月青少年软件编程(图形化)等级考试试卷(四级)答案解析

目录 一、单选题(共15题&#xff0c;共30分) 二、判断题(共10题&#xff0c;共20分) 三、编程题(共3题&#xff0c;共50分) 青少年软件编程&#xff08;图形化&#xff09;等级考试试卷&#xff08;四级&#xff09; 一、单选题(共15题&#xff0c;共30分) 1. 运行下列程序…

day39【代码随想录】动态规划之不同路径、不同路径||、最小路径和

文章目录前言一、不同路径&#xff08;力扣62&#xff09;二、不同路径||&#xff08;力扣63&#xff09;三、最小路径和&#xff08;力扣64&#xff09;前言 1、不同路径 2、不同路径|| 3、最小路径和 一、不同路径&#xff08;力扣62&#xff09; 一个机器人位于一个 m x n…

Spark09: Spark之checkpoint

一、checkpoint概述 checkpoint&#xff0c;是Spark提供的一个比较高级的功能。有时候&#xff0c;我们的Spark任务&#xff0c;比较复杂&#xff0c;从初始化RDD开始&#xff0c;到最后整个任务完成&#xff0c;有比较多的步骤&#xff0c;比如超过10个transformation算子。而…

使用Python,Opencv检测图像,视频中的猫

使用Python&#xff0c;Opencv检测图像&#xff0c;视频中的猫&#x1f431; 这篇博客将介绍如何使用Python&#xff0c;OpenCV库附带的默认Haar级联检测器来检测图像中的猫。同样的技术也可以应用于视频流。这些哈尔级联由约瑟夫豪斯&#xff08;Joseph Howse&#xff09;训练…

Ubuntu最新版本(Ubuntu22.04LTS)安装Tftp服务及其使用教程

目录 一、概述 二、在Ubuntu安装Tftp服务器  &#x1f356;2.1 安装tftp服务端&#xff08;tftpd-hpa&#xff09;  &#x1f356;2.2 配置&#xff0c;修改/etc/default/tftpd-hpa  &#x1f356;2.3 创建tftp服务的下载目录  &#x1f356;2.4 重启tftp服务器 三、在Ubun…

C++高级篇学习笔记

文章目录 前言 本文记录C一些面试难点问题剖析。 1. 左右值和右值引用的作用 左值&#xff1a;可以在左边&#xff0c;表达式结束后依然存在的持久对象&#xff0c;一般有名字&#xff0c;可以取地址。 提示&#xff1a; 前置自加/自减 可以做左值&#xff1b; 右值在右边&a…

java08-面向对象3

一&#xff1a;static 关键字&#xff1a;静态的 1.可以用来修饰的结构:主要用来修饰类的内部结构 属性、方法、代码块、内部类 2. static 修饰属性&#xff1a;静态变量&#xff08;或类变量&#xff09; 2.1 属性&#xff0c;是否使用static修饰&#xff0c;又分为静态属…

应对新的挑战!ChatGPT将如何改变多域作战?

​公众号博主推送内容&#xff0c;未经许可&#xff0c;不得转载或者引用。 原文&#xff1a;Exploring the Possibilities of ChatGPT in Rugged Military AI Applications 《ChatGPT&#xff1a;利用最先进的技术支撑多域作战》 ChatGPT是一款基于GPT-3大型自然语言模型的…

Spring Security in Action 第六章 一个小型的安全网络应用程序

本专栏将从基础开始&#xff0c;循序渐进&#xff0c;以实战为线索&#xff0c;逐步深入SpringSecurity相关知识相关知识&#xff0c;打造完整的SpringSecurity学习步骤&#xff0c;提升工程化编码能力和思维能力&#xff0c;写出高质量代码。希望大家都能够从中有所收获&#…

Leetcode.1138 字母板上的路径

题目链接 Leetcode.1138 字母板上的路径 Rating &#xff1a; 1411 题目描述 我们从一块字母板上的位置 (0, 0)出发&#xff0c;该坐标对应的字符为 board[0][0]。 在本题里&#xff0c;字母板为board ["abcde", "fghij", "klmno", "pqr…

day01查询 排序 数据处理函数 分组

文章目录1、什么是数据库&#xff1f;什么是数据库管理系统&#xff1f;什么是SQL&#xff1f;他们之间的关系是什么&#xff1f;2、安装MySQL数据库管理系统。3、MySQL数据库的完美卸载&#xff01;4、看一下计算机上的服务&#xff0c;找一找MySQL的服务在哪里&#xff1f;5、…

autox.js在vscode(win7)与雷神模拟器上的开发环境配置

目录 下载autox.js 安装autox.js&#xff1f; 在电脑上搭建autox.js开发环境 安装vscode 安装autox.js插件 雷神模拟器连接vscode 设置雷神模拟器IP 设置autox.js应用IP地址等 下载autox.js 大体来说&#xff0c;就是一个运行在Android平台上的JavaScript 运行环境 和…

计算机软考好不好考?

软考看你备考哪一科&#xff1f;对软考证书的需求量怎么样&#xff1f;对自己工作就业是否有帮助&#xff1f;从而来体现软考的意义~ 软考是什么&#xff1f; 软考全称是计算机技术与软件专业技术资格考试&#xff0c;通俗来说就是职称考试&#xff0c;也可以说是技术水平认定…