蘑菇博客
蘑菇博客,一个基于微服务架构的前后端分离博客系统
前言
项目已有较详细的 项目搭建文档 ,同时包括了 Windows、Linux 以及 Docker 环境下蘑菇博客的搭建。在使用过程中遇到问题时,首先认真阅读项目搭建文档 ,同时 FAQ文档 还收集了小伙伴咨询的问题,可以提前阅读~
【提问前】可以先 百度 或者 Google 进行解决,有的问题通过搜索引擎很快就能得到解决
【提问前】可以首先看看 issue 或者 FAQ文档,可能你的问题别人也遇到过
【提问前】可以提前阅读 如何向开源社区提问题
【提问】推荐使用 Gitee issue 进行提问,因为issue解决后能够保留解决记录,帮助其它小伙伴避坑。其次可以使用 蘑菇社区, QQ群 或者 微信群 进行提问。群里提问注意提问的时间,把遇到问题的详细过程都描述清楚,最好配上图文信息,这样能有利于更高效的解决问题。
项目介绍
蘑菇博客( MoguBlog ),一个基于微服务架构的前后端分离博客系统。Web 端使用 Vue + ElementUi , 移动端使用 uniapp 和 ColorUI。后端使用 SpringCloud + SpringBoot + Mybatis-plus进行开发,使用 Jwt + SpringSecurity 做登录验证和权限校验,使用 ElasticSearch 和 Solr 作为全文检索服务,使用 Github Actions完成博客的持续集成,使用 ElasticStack 收集博客日志,文件支持上传本地、七牛云 和 Minio.
-
蘑菇博客大部分功能是我个人进行开发的,因能力有限,其中很多技术都是一边学习一边使用的,可以说蘑菇博客也是一个我用来熟悉技术的项目,所以很多地方可能考虑不周,故有能改正的地方,还请各位老哥能够指出~
- 现在挺多是SSM或者SSH的博客管理系统,想用 SpringBoot + SpringCloud + Vue 的微服务架构进行尝试项目的构建,里面很多功能可能只是为了满足自己的学习需求而引入的,大家可以根据自己服务器配置来选择启动的服务,因此本博客也是一个非常好的 SpringBoot、SpringCloud以及 Vue 技术的入门学习项目。
- 原来做过 Vue + ElementUi 做过管理系统,所以现在打算做一套自己的、基于当前最新技术栈、前后端分离的微服务博客系统。
- 蘑菇博客中的一些文章,很多都来自我平时的学习笔记,目前托管在另一个仓库:LearningNotes,里面涵盖了 JVM、JUC、Java,Spring,SpringCloud,计算机网络,操作系统,数据结构,Vue、Linux 等 ,感兴趣的小伙伴可以跳转该仓库 Star支持 一下
运行配置
蘑菇博客使用了一些监控的 SpringCloud 组件,但是并不一定都需要部署,必须启动的服务包含
nacos
,nginx
,rabbitmq
, redis
,mysql
,mogu-gateway
,mogu-sms
,mogu-picture
, mogu-web
, mogu-admin
其它的服务都可以不启动,也不影正常使用,可以根据自身服务器配置来启动
最低配置:1核2G 【需开启虚拟内存】【容易宕机】
推荐配置:2核4G 【狂欢特惠】【博主目前配置】
最近,腾讯云和阿里云的优惠力度非常大,如果有需求的小伙伴,可以了解一下~
【阿里云】云服务器狂欢特惠,2核2G5M 轻量级应用服务器 60 元/年 点我传送
【腾讯云】云产品限时秒杀,爆款 2核4G8M 云服务器,首年 74元/年、222/3年【博主强烈推荐】点我传送
站点演示
首先特别感谢群里小伙伴 @泪梦红尘 对蘑菇博客提供服务器支持。所以就刚好以此用来做蘑菇博客的演示站点,同时我也在搭建的时候,顺便录制了一套视频:20分钟部署一个微服务架构的博客系统 ,感兴趣的小伙伴可以参考视频一起完成部署~
【社区演示前端】:http://43.248.128.235:39527/
【社区演示后端】:http://43.248.128.235:39528/
【演示账号】:点击获取
【小程序】蘑菇博客的移动端版本,可以扫码体验。参考 蘑菇博客小程序部署 文档,以及Bilibili上 20分钟部署博客小程序视频 完成小程序的搭建。【下面是社区版的小程序演示】
后期维护
项目后台目前有 Eureka 版本和 Nacos 版本,其中 Eureka 版本使用的是 SpringCloud 一些组件,Nacos 版本使用的是 SpringCloudAlibaba 的一些组件,例如 Nacos、Sentinel 等
- Eureka 版本请切换至 Eureka 分支(已停止维护,将不再进行新功能的开发)
- Nacos 版本请切换至 Nacos 分支(作为以后长期维护的分支)
- master 分支为主分支,是基于 Nacos 分支的稳定版本
蘑菇博客社区版
蘑菇博客的定位是个人博客系统,而蘑菇博客社区版定位是多人博客系统。蘑菇社区版在原有蘑菇博客的基础上加入了更多的社区玩法,如:支持用户投稿、个人主页、用户签到、关注/取关、收藏/点赞、积分模块、VIP特权功能、用户动态(蘑菇圈)、面经模块、课程模块、消息通知、公众号登录/管理、私信/群聊模块、SEO优化、图片敏感审核、任务模块、成就模块、勋章模块、支付模块、提现模块、消息触达、资源模块、抽奖模块等。。
关于蘑菇社区功能模块的介绍,可查看:蘑菇社区功能模块介绍
关于蘑菇社区版的学习/商用授权,以及查看版本对比,可以查看:点我跳转
社区版演示环境如下,目前 蘑菇官网 使用的是蘑菇博客社区版代码。
【社区演示前端】:http://43.248.128.235:29527/
【社区演示后端】:http://43.248.128.235:29528/
【演示账号】:点击获取
目前,蘑菇社区版源码暂未开源,可通过 赞助蘑菇 的方式获取源码授权,详情可添加陌溪微信了解:coder_moxi (备注:蘑菇社区)
蘑菇博客Go版本
mogu_blog_go 是根据蘑菇博客改编的一个 Golang 简化版分支,实现了蘑菇博客后台原有的大部分基础功能,同时前端代码和数据库基本没有变化,因此可以直接使用蘑菇博客原有的前端页面。
mogu_blog_go 目前采用的技术有:beego、gorm、mysql、redis 和 nginx。相比于蘑菇博客微服务版,Golang版蘑菇能够做到 1C2G 的服务器轻松运行,再也不怕网站第二天起来就宕机了~。
参考蘑菇博客Golang版安装指南,快速在 Windows 平台搭建蘑菇博客Go版开发环境
项目中初始用户和密码
- 后台登录:用户:admin,密码:mogu2018
- 前台登录:用户:mogu2018,密码:mogu2018
- Mysql:用户:root,密码:mogu2018
- Redis:密码:mogu2018
- 远程SSH初始密码:用户:root,密码:mogu2018
- RabbitMQ管理页面: 用户:admin,密码:mogu2018
- Nacos管理页面: 用户:nacos,密码:nacos
- Sentinel管理页面: 用户:sentinel,密码:sentinel
- 蘑菇博客监控页面:用户:user,密码:password123
- Druid初始密码: 用户:admin,密码:123456
项目特点
- 友好的代码结构及注释,便于阅读及二次开发
- 实现前后端分离,通过 Json 进行数据交互,前端再也不用关注后端技术
- 页面交互使用 Vue2.x,极大的提高了开发效率。
- 引入Swagger 文档支持,方便编写 API 接口文档。
- 引入RabbitMQ 消息队列,用于邮件发送、更新 Redis 和 Solr
- 引入JustAuth 第三方登录开源库,支持 Gitee、Github 账号登录。
- 引入ElasticSearch 和 Solr 作为全文检索服务,并支持可插拔配置
- 引入Github Actions 工作流,完成蘑菇博客的持续集成、持续部署。
- 引入七牛云对象存储,同时支持本地文件存储
- 引入 RBAC 权限管理设计,灵活的权限控制,按钮级别的细粒度权限控制,满足绝大部分的权限需求
- 引入 Zipkin 链路追踪,聚合各业务系统调用延迟数据,可以一眼看出延迟高的服务
- 采用自定义参数校验注解,轻松实现后端参数校验
- 采用 AOP + 自定义注解 + Redis 实现限制IP接口访问次数
- 采用自研的评论模块,实现评论邮件通知
- 采用 Nacos 作为服务发现和配置中心,轻松完成项目的配置的维护
- 采用 Sentinel 流量控制框架,通过配置再也不怕网站被爆破
- 采用uniapp 和ColorUi 完成蘑菇博客的移动端门户页面搭建
- 支持多种文本编辑器,Markdown 编辑器(Vditor)和富文本编辑器(CKEditor)随心切换
- 采用 ElasticStack【ElasticSearch + Beats + Kibana + Logstash】搭建蘑菇博客日志收集
- 采用 Docker Compose 完成容器编排,Portainer 实现容器可视化,支持一键部署线上环境
项目文档
文档地址:http://docs.moguit.cn
项目地址
目前项目托管在 Gitee 和 Github 平台上中,欢迎大家 Star 和 Fork 支持~
- Gitee地址:https://gitee.com/moxi159753/mogu_blog_v2
- Github地址:https://github.com/moxi624/mogu_blog_v2
项目目录
- MoguBlog 是一款基于最新技术开发的多人在线、简洁的博客系统。
- mogu_admin: 提供admin端API接口服务;
- mogu_web:提供web端API接口服务;
- mogu_eureka: 服务发现和注册【注: Nacos分支没有该目录,用Nacos作为服务发现组件】
- mogu_picture: 图片服务,用于图片上传和下载;
- mogu_sms:消息服务,用于更新ElasticSearch、Solr索引、邮件和短信发送
- mogu_monitor:监控服务,集成SpringBootAdmin用于管理和监控SpringBoot应用程序
- mogu_spider:爬虫服务
(目前还未完善)
- mogu_gateway:网关服务
(目前还未完善)
- mogu_zipkin:链路追踪服务,
目前使用java -jar的方式启动
- mogu_search:搜索服务,ElasticSearch和Solr作为全文检索工具,支持可插拔配置,默认使用SQL搜索
- mogu_commons:公共模块,主要用于存放Entity实体类、Feign远程调用接口、以及公共config配置
- mogu_utils: 是常用工具类;
- mogu_xo: 是存放 VO、Service,Dao层的
- mogu_base: 是一些Base基类
- doc: 是蘑菇博客的一些文档和数据库文件
- vue_mogu_admin:VUE的后台管理页面
- vue_mogu_web:VUE的门户网站
- uniapp_mogu_web:基于uniapp 和 colorUi 的蘑菇博客移动端门户页面(Nacos分支)
- nuxt_mogu_web:Nuxt的门户网站,主要用于支持SEO搜索引擎优化
(目前还未完善)
技术选型
系统架构图
蘑菇博客系统架构图,使用 Processon 在线绘制
后端技术
技术 | 说明 | 官网 |
---|---|---|
SpringBoot | MVC框架 | https://spring.io/projects/spring-boot |
SpringCloud | 微服务框架 | https://spring.io/projects/spring-cloud/ |
SpringSecurity | 认证和授权框架 | https://spring.io/projects/spring-security |
MyBatis-Plus | ORM框架 | https://mp.baomidou.com/ |
Swagger-UI | 文档生产工具 | https://github.com/swagger-api/swagger-ui |
Kibana | 分析和可视化平台 | https://www.elastic.co/cn/kibana |
Elasticsearch | 搜索引擎 | https://github.com/elastic/elasticsearch |
Beats | 轻量型数据采集器 | https://www.elastic.co/cn/beats/ |
Logstash | 用于接收Beats的数据并处理 | https://www.elastic.co/cn/logstash |
Solr | 搜索引擎 | http://lucene.apache.org/solr/ |
RabbitMQ | 消息队列 | https://www.rabbitmq.com/ |
Redis | 分布式缓存 | https://redis.io/ |
Docker | 容器化部署 | https://www.docker.com |
Druid | 数据库连接池 | https://github.com/alibaba/druid |
七牛云 | 七牛云 - 对象储存 | https://developer.qiniu.com/sdk#official-sdk |
JWT | JWT登录支持 | https://github.com/jwtk/jjwt |
SLF4J | 日志框架 | http://www.slf4j.org/ |
Lombok | 简化对象封装工具 | https://github.com/rzwitserloot/lombok |
Nginx | HTTP和反向代理web服务器 | http://nginx.org/ |
JustAuth | 第三方登录的工具 | https://github.com/justauth/JustAuth |
Hutool | Java工具包类库 | https://hutool.cn/docs/#/ |
阿里大于 | 短信发送平台 | https://doc.alidayu.com/doc2/index.htm |
Github Actions | 自动化部署 | https://help.github.com/en/actions |
Zipkin | 链路追踪 | https://github.com/openzipkin/zipkin |
Flexmark-java | Markdown转换Html | https://github.com/vsch/flexmark-java |
Ip2region | 离线IP地址定位库 | https://github.com/lionsoul2014/ip2region |
Minio | 本地对象存储服务 | https://min.io/ |
Docker Compose | Docker容器编排 | https://docs.docker.com/compose/ |
Portainer | Docker可视化管理 | https://github.com/portainer/portainer |
前端技术
技术 | 说明 | 官网 |
---|---|---|
Vue.js | 前端框架 | https://vuejs.org/ |
Vue-router | 路由框架 | https://router.vuejs.org/ |
Vuex | 全局状态管理框架 | https://vuex.vuejs.org/ |
Nuxt.js | 创建服务端渲染 (SSR) 应用 | https://zh.nuxtjs.org/ |
Element | 前端ui框架 | https://element.eleme.io |
Axios | 前端HTTP框架 | https://github.com/axios/axios |
Echarts | 图表框架 | www.echartsjs.com |
CKEditor | 富文本编辑器 | https://ckeditor.com/ |
Highlight.js | 代码语法高亮插件 | https://github.com/highlightjs/highlight.js |
Vditor | Markdown编辑器 | https://github.com/Vanessa219/vditor |
vue-cropper | 图片裁剪组件 | https://github.com/xyxiao001/vue-cropper |
vue-image-crop-upload | vue图片剪裁上传组件 | https://github.com/dai-siki/vue-image-crop-upload |
vue-emoji-comment | Vue Emoji表情评论组件 | https://github.com/pppercyWang/vue-emoji-comment |
clipboard.js | 现代化的拷贝文字 | http://www.clipboardjs.cn/ |
js-beautify | 美化JavaScript代码 | https://github.com/beautify-web/js-beautify |
FileSaver.js | 保存文件在客户端 | https://github.com/eligrey/FileSaver.js |
SortableJS | 功能强大的JavaScript 拖拽库 | http://www.sortablejs.com/ |
vue-side-catalog | 目录导航栏 | https://github.com/yaowei9363/vue-side-catalog |
uniapp | 移动端跨平台语言 | https://uniapp.dcloud.io/ |
colorUi | 专注视觉的小程序组件库 | https://github.com/weilanwl/ColorUI |
showdown | 用Javascript编写的Markdown 到Html转换器 | https://github.com/showdownjs/showdown |
turndown | 用JavaScript编写的HTML到Markdown转换器 | https://github.com/domchristie/turndown |
快速开始
【推荐】一条命令部署蘑菇博客
参考 如何使用一条命令完成蘑菇博客部署, 在云服务器上执行下面命令,完成一键部署蘑菇博客
wget http://43.248.128.235:18600/script/moguInit.sh && chmod +x moguInit.sh && sh moguInit.sh
Bilibili一键部署视频:20分钟部署一个微服务架构的博客系统
[推荐] Windows+VMware一键搭建蘑菇博客本地开发环境
参考 Windows+VMware一键搭建蘑菇博客本地开发环境,快速在 Windows 平台搭建蘑菇博客开发环境,将中间件安装在 VMware 中。
Windows环境下搭建蘑菇博客
参考 window环境下配置蘑菇博客环境,能够在 Windows下搭建蘑菇博客的开发环境,同时将所有组件安装在Windows 环境中
[推荐] DockerCompose一键部署蘑菇博客(Nacos版)
参考 DockerCompose一键部署蘑菇博客(Nacos版) ,在 Linux 服务器中,一键完成蘑菇博客项目的部署
Docker搭建蘑菇博客
参考 使用Docker快速搭建蘑菇博客(Eureka分支),快速在Linux服务器中搭建好博客运行环境,通过发布 Jar 包的方式完成部署
参考 使用Docker快速搭建蘑菇博客(Nacos分支),快速在Linux服务器中搭建好博客运行环境,通过发布 Jar 包的方式完成部署
蘑菇博客部署到云服务器
【推荐】参考IDEA发布蘑菇博客Docker镜像到云服务器(适用于DockerCompose部署),在你修改Nacos分支博客源码后,将重新制作镜像部署到云服务器,然后通过DockerCompose进行启动。
参考蘑菇博客如何部署到阿里云服务器(Eureka分支),在你修改Eureka分支博客源码后将项目打包部署到云服务器
参考蘑菇博客如何部署到阿里云服务器(Nacos分支),在你修改Nacos分支博客源码后将项目打包部署到云服务器
使用Github Actions完成蘑菇博客持续集成
参考 使用Github Action完成蘑菇博客持续集成 ,在你提交一个 push 请求后,通过 Github Actions 能够完成蘑菇博客自动化 编译、打包、部署等操作。
切换搜索模式
参考蘑菇博客切换搜索模式,完成蘑菇博客的搜索引擎切换,目前支持 Solr、ElasticSearch、SQL 的方式
配置七牛云对象存储
参考蘑菇博客切换七牛云存储,配置文件的七牛云对象存储,及本地文件存储
使用Zipkin搭建蘑菇博客链路追踪
参考使用Zipkin搭建蘑菇博客链路追踪,通过聚合各业务系统调用延迟数据,达到链路调用监控跟踪,快速定位其中延迟高的服务
使用Nacos搭建蘑菇博客服务注册和配置中心
参考蘑菇博客Nacos部署指南,搭建蘑菇博客的服务注册和配置中心
使用Sentinel搭建蘑菇博客流量控制
参考蘑菇博客Sentinel安装指南,Sentinel 被称为分布式系统的流量防卫兵,相当于Hystrix
蘑菇博客QQ小程序发布
参考蘑菇博客QQ小程序发布指南,完成蘑菇博客 uniapp 移动端的启动和发布
【推荐】蘑菇博客微信小程序发布
参考蘑菇博客微信小程序部署指南,完成蘑菇博客 uniapp 移动端的启动和发布
蘑菇博客扩展新的功能和页面
参考蘑菇博客如何扩展新的功能和页面,在蘑菇博客现有架构基础上,开发自己需要的页面。
使用ELK搭建蘑菇博客日志收集
参考搭建蘑菇博客日志收集,使用 Docker 快速搭建 ELK 环境用于蘑菇博客日志收集
搭建网站免费CDN加速访问
参考 网站打开花了20秒,我决定自建蘑菇CDN ,免费搭建自己的CDN加速
环境搭建
开发工具
工具 | 说明 | 官网 |
---|---|---|
IDEA | Java开发IDE | https://www.jetbrains.com/idea/download |
WebStorm | 前端开发IDE | https://www.jetbrains.com/webstorm/ |
RedisDesktop | Redis可视化工具 | https://redisdesktop.com/download |
SwitchHosts | 本地Host管理 | https://oldj.github.io/SwitchHosts/ |
X-shell | Linux远程连接工具 | https://xshell.en.softonic.com/ |
X-ftp | Linux文件传输工具 | https://www.netsarang.com/zh/all-downloads/ |
SQLyog | 数据库连接工具 | https://sqlyog.en.softonic.com/ |
ScreenToGif | Gif录制工具 | https://www.screentogif.com/ |
开发环境
工具 | 版本号 | 下载 |
---|---|---|
JDK | 1.8 | https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html |
Maven | 3.3.0+ | http://maven.apache.org/ |
Elasticsearch | 6.3.0 | https://www.elastic.co/downloads |
Solr | 7.0 | http://lucene.apache.org/solr/ |
MySQL | 5.6 | https://www.mysql.com/ |
Erlang | 20.3 | https://www.erlang.org/ |
RabbitMQ | 3.7.4 | http://www.rabbitmq.com/download.html |
Nginx | 1.10 | http://nginx.org/en/download.html |
Redis | 3.3.0 | https://redis.io/download |
Zipkin | 2.12.5 | https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec |
Nacos | 1.3.2 | https://github.com/alibaba/nacos/releases |
Sentinel | 1.7.2 | https://github.com/alibaba/Sentinel/releases |
致谢
蘑菇博客起初参考了很多开源项目的解决方案,开源不易,感谢分享
-
感谢 七牛云 提供的 免费云存储 和 CDN 服务
-
感谢 jetbrains 提供的开源 License
- 感谢 杨青小姐姐 的博客模板:http://www.yangqq.com/
- 感谢PanJiaChen的Vue后台管理模板:vue-element-admin
- Vue 项目搭建参考这篇博客:https://segmentfault.com/a/1190000009506097
- 感谢 苞米豆 提供的 Mybatis-plus框架:http://mp.baomidou.com/
- 感谢 yadong.zhang 提供的第三方登录开源库:https://gitee.com/yadong.zhang/JustAuth
- 感谢 bihell 的 Dice 博客项目:https://github.com/bihell/Dice
- 感谢 pppercyWang 提供的Emoji表情评论组件:vue-emoji-comment
- 感谢 若依 提供的 RuoYi 项目:https://gitee.com/y_project/RuoYi
- 感谢 yaowei9363 提供的 Vue侧目录组件: vue-side-catalog
- 感谢 奇文社区 提供的 奇文网盘 项目:https://gitee.com/qiwen-cloud/qiwen-file
- 感谢 weilanwl 提供的 ColorUI:https://github.com/weilanwl/ColorUI
关注&交流
为了方便小伙伴们沟通交流,我创建了QQ群 (加群备注:蘑菇博客
) 和 微信群(备注:加群),目前项目还存在很多不足之处,欢迎各位老哥进群进行技术交流,为了防止广告进入,希望加群的时候能添加备注,谢谢~
微信群【备注:加群】 | 蘑菇博客 )【群满】 |
QQ群(备注:蘑菇博客 )【推荐】 |
---|---|---|
未来计划
- 集成Github Actions,完成蘑菇博客持续集成服务
- 门户网站增加登录页面
- 支持第三方登录
- 集成ElasticSearch和Solr
- 将图片存储在七牛云中
- 写一个评论模块,用于替换搜狐畅言
- 按钮级别的细粒度权限控制
- 增加评论表情
- 增加数据字典管理
- 前端增加用户个人中心
- 增加一个FAQ常见问题文档
- 集成表单构建页面,来源于RuoYi
- 增加博客详情页目录导航,来源于vue-side-catalog
- 资源管理页面集成网盘管理
- 新建Nacos分支,用于替换Eureka作为服务发现组件和配置中心
- 使用Sentinel做服务限流和熔断
- 增加蘑菇博客小程序项目 uniapp_mogu_web,基于ColorUI 和 Uniapp
- 富文本编辑器和Markdown编辑器任意切换
- 使用ELK搭建蘑菇博客日志收集功能
- 使用Minio 搭建对象存储服务
- 使用DockerCompose完成 博客一键部署
- 使用Portainer对Docker镜像可视化管理
- 适配门户页面的移动端布局
- 完善网盘管理
- 增加更新记录
- 完善爬虫模块
- 完善网关模块
- 增加K8S部署蘑菇博客教程
- 增加大屏数据展示页面
- 增加定时任务模块
- 使用Freemark页面静态化技术对博客详情页静态化
- 解决Nuxt_mogu_web中存在的问题,使博客能被搜索引擎收录
- 让原创文章能够同步到多平台,如:CSDN,掘金,博客园等
- 增加博客迁移功能,让其它平台的博客,如:CSDN、博客园,WordPress能够同步到蘑菇博客中
贡献代码
开源项目离不开大家的支持,如果您有好的想法,遇到一些 BUG 并修复了,以及 蘑菇博客文档 上有错误的地方订正过来了,欢迎小伙伴们提交 Pull Request 参与开源贡献
- fork 本项目到自己的 repo
- 把 fork 过去的项目也就是你仓库中的项目 clone 到你的本地
- 修改代码
- commit 后 push 到自己的库
- 发起PR( pull request) 请求,提交到 Nacos 分支
- 等待作者合并
开源协议
参考资料
https://github.com/saysky/ForestBlog/blob/master/README.md