在github/gitee上面有很多别人写好的开源框架,选择适合的可以很大的减少开发人员的工作,我的网站用的是gitee上面的明星项目mogu博客,这里是项目地址:https://gitee.com/moxi159753/mogu_blog_v2.git
大家可以自己拉下来,按照教程部署。
这篇博客主要记录我的部署过程
首先把项目拉到本地
使用maven安装好所有的依赖,这里细节就不再赘述。
本项目使用的技术栈:
后端技术
技术 说明 官网
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
可以从项目里看到项目的配置文件都不在本地,项目使用的是Nacos管理项目的配置文件和实现项目服务的注册与发现
接下来在window部署框架的环境,包括redis缓存数据库,rabbtmq消息队列,slor搜索服务,mysql数据库连接,zipkin链路追踪,nacos配置文件,Sentinel流量控制
配置JDK
略
配置Maven
maven安装成功后,记得添加阿里源,不然有些东西下载会非常慢的
配置nginx
nginx的下载直接到nginx官网下载即可
下载完成后,我们需要修改nginx.conf配置文件,加入下面的内容
#蘑菇博客图片资源
server {
listen 8600;
server_name localhost;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods *;
add_header Access-Control-Allow-Headers *;
if ($request_method = 'OPTIONS') {
return 204;
}
location / {
root D:\mogu_blog\data;
index index.html index.htm;
}
}
就是将8600端口的请求映射到 D:\mogu_blog\data的目录下,如果没有这个目录的,可以提前创建好,当然不一定在D盘,可以在任意位置,其它位置修改成对应的即可。
不过如果需要修改的话,需要到mogu_picture项目的yml文件里也一起修改对应的配置文件,如下图的 file.upload.path 修改成自定义的即可 【如果是nacos分支,需要在nacos中进行修改】
#Data image url
file:
upload:
path: D:/mogu_blog/data
配置redis
去redis官网,进行下载:https://redis.io/
然后双击启动即可
注意,如果使用docker的方法安装的蘑菇博客镜像,里面设置了默认的密码mogu2018,如果直接复制的本地配置,还需要修改一下默认密码
配置RabbitMq
RabbitMQ是一款比较优秀的消息中间件,在这里主要用于同步solr索引,redis缓存更新,以及邮件和验证码发送等功能。
关于配置,参考这篇博客:蘑菇博客配置RabbitMQ
配置搜索模块【非必须】
目前蘑菇博客支持三种搜索模式的配置,分别是Solr、ElasticSearch和SQL,小伙伴可以按照自己的服务器配置进行相应的部署
参考:蘑菇博客切换搜索模式 ,进行三种模式的切换(三种方式选择一种,默认是SQL搜索,可以配置ElasticSearch或者Solr作为全文检索 )
配置Solr【非必须】
关于window下配置蘑菇博客的solr,其实和我之前写的一篇博客大同小异,在这里我就不多叙述了,详情参考:CentOS下Solr的安装和部署
注意:需要修改schema.xml文件
最近很多小伙伴说solr不好配置,所以我特意把solr的上传到蓝奏云和百度云了,小伙伴只需要下载后,放到tomcat的webapps目录下,然后修改一下solrhome的配置即可
蓝奏云:
https://wws.lanzous.com/i3drtj8l8ja
百度云:
链接:https://pan.baidu.com/s/1gpKs7oixT8RBn8zuDSiEGQ
提取码:ditj
下载完成后,解压
然后找到 web.xml文件
修改里面的地址,把路径改成你的目录即可
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>E:\Software\xampp\tomcat\webapps\solr\solr_home</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
然后查看solr admin页面:http://localhost:8080/solr/#/
如果能正常显示,说明已经安装成功
配置ElasticSearch【非必须】
关于ElasticSearch的配置和相关介绍,可以参考这篇博客:Elasticsearch介绍和安装
window也可自行百度进行安装,或者直接下载我上传的压缩包
百度网盘:
链接:https://pan.baidu.com/s/1X1z47Osm_MBjwSBckhUmTQ
提取码:pnfp
备用地址:
http://picture.moguit.cn/blog/resource/java/ElasticSearch.zip
下载完后,解压能看到这个目录
我们首先进入elasticsearch下的config目录,修改elasticsearch.yml文件,把下面两个路径,改成你对应的目录即可
然后启动ElasticSearch:
启动Kibana:
启动完成后:我们输入网址
http://localhost:5601/
如果能出现下面的页面,说明已经成功安装了 ElasticSearch 和 Kibana,在这里kibana只是作为ElasticSearch的图形化显示工具,相当于原来的SolrAdmin页面一样,在生产环境中,可以不部署也行
配置Mysql
使用命令把项目clone下来
git clone https://gitee.com/moxi159753/mogu_blog_v2.git
然后找到目录下的doc文件夹,里面有个数据库脚本,打开后,我们能够看到下面的文件
mogu_blog.sql:代表mogu_blog数据库的文件
mogu_blog_update.sql:代表mogu_blog在后续开发时候更新的字段(首次无需导入)
mogu_picture.sql:代表mogu_picture数据库文件
mogu_picture_update.sql:代表mogu_picture在后续开发时候更新的字段(首次不需要导入)
nacos_config.sql:代表nacos的配置信息,用来存放每个模块的配置信息【nacos分支需要导入】
我们需要提前创建好 mogu_blog 、mogu_picture 、nacos_config 这三个数据库,然后把备份脚本导入即可。
注意:首次导入的时候,我们只需要执行mogu_blog.sql 、 mogu_picture.sql、nacos_config文件即可,如果你在之前已经部署了本项目,那么你需要在对应的update.sql文件中,打开后,从中找到没有的字段,复制上执行即可
里面每个字段的添加,都会有对应的日期提示,如果有些字段是你clone项目后添加的,那么你就需要执行它们一遍即可
同时设置数据库访问账户和密码为: root root
当然不设置也没关系,就是后面修改yml文件里面的配置即可【Nacos分支,配置文件存储在Nacos中】
配置zipkin链路追踪【非必须】
Zipkin是一个开源的分布式的链路追踪系统,每个微服务都会向zipkin报告计时数据,聚合各业务系统调用延迟数据,达到链路调用监控跟踪。
参考博客:使用Zipkin搭建蘑菇博客链路追踪
链路追踪服务可以选择安装,不过如果没有安装的话,在启动的时候会出现这样一个错误,不过该错误不会影响正常使用,可以忽略
I/O error on POSt request for “http://localhost:9411/api/v2/span” :connect timeout
配置Nacos
Nacos服务注册和配置中心,如果使用的使用的是Eureka作为服务注册中心,那么直接跳过Nacos和Sentinel的安装过程。
参考 【SpringCloud】使用Nacos实现服务注册发现和配置中心等功能,了解Nacos的使用
参考 蘑菇博客Nacos部署指南,完成蘑菇博客中Nacos的安装和配置
配置Sentinel流量控制【非必须】
Sentinel存在于Nacos分支下,如果你的注册中心是Eureka,那么不需要配置
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
参考【SpringCloud】使用Sentinel实现熔断和限流 ,了解Sentinel以及使用
参考 蘑菇博客Sentinel安装指南,完成蘑菇博客中Sentinel的配置
启动后端项目
首先进入项目根目录文件夹,执行下面命令
#下载依赖
mvn clean install
如果下面都是success,那就说明依赖下载成功了
下面就把项目导入到IDEA中
关于项目的介绍
MoguBlog 是一款基于最新技术开发的多人在线、简洁的博客系统。
mogu_admin: 提供admin端API接口服务;
mogu_web:提供web端API接口服务;
mogu_eureka: 服务发现和注册
mogu_picture: 图片服务,用于图片上传和下载;
mogu_sms:消息服务,用于更新ElasticSearch、Solr索引、邮件和短信发送
mogu_monitor:监控服务,集成SpringBootAdmin用于管理和监控SpringBoot应用程序
mogu_spider:爬虫服务(目前还未完善)
mogu_spider:网关服务(目前还未完善)
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搜索引擎优化(目前还未完善)
下面进行项目启动
Eureka版本: 需要启动 mogu_eureka -> mogu_picture -> mogu_sms -> mogu_admin -> mogu_web
如果是Nacos版本:需要启动 :mogu_gateway -> mogu_picture -> mogu_sms -> mogu_admin -> mogu_web 【新加入了网关】
其它一些模块可以根据自己配置进行启动:如 mogu_monitor、mogu_search、Zipkin等 【下图是Eureka版本】
启动成功后,我们应该能够查看到对应的Swagger接口文档
tip:需要注意,swagger-ui在nacos版本和eureka版本使用的不一致
eureka版本:swagger-ui使用的是2.X,访问的页面是 http://localhost:8601/swagger-ui.html
nacos版本:swagger-ui使用的是3.X,访问的页面是 http://localhost:8601/swagger-ui/index.html
############ admin端swagger ##################
# Eureka分支
http://localhost:8601/swagger-ui.html
# Nacos分支
http://localhost:8601/swagger-ui/index.html
############ picture端swagger ##################
# Eureka分支
http://localhost:8602/swagger-ui.html
# Nacos分支
http://localhost:8602/swagger-ui/index.html
############ web端swagger ##################
# Eureka分支
http://localhost:8603/swagger-ui.html
# Nacos分支
http://localhost:8603/swagger-ui/index.html
Admin端接口文档:
Picture端接口文档
web端接口文档
因为Nacos分支引入了 mogu_gateway作为 微服务的网关入口,以后部署项目后,很多内部的服务端口可能就不会暴露出来了,因此以后测试,就需要我们通过 mogu_gateway提供的Knife4j 接口聚合
http://localhost:8607/doc.html
我们可以通过左上角的下拉框选择我们的微服务接口,使用方法和swagger一致
启动前端项目
前端项目使用的是Vue编写的,所以在这之前,需要下载好nodejs,因为nodejs里的npm模块是用于管理vue项目中的依赖,就类似于maven一样
node官网:https://nodejs.org/en/
在安装的时候,记得选择好加入到环境变量中,这样我们就能在任何使用了。
查看是否安装成功: npm -v
- 安装 vue_mogu_admin 项目的依赖
进入vue_mogu_admin 文件夹内,使用下面命令进行安装
# 使用淘宝镜像源进行依赖安装,解决国内下载缓慢的问题(出现警告可以忽略)
npm install --registry=https://registry.npm.taobao.org
# 启动项目
npm run dev
#打包项目(在部署的时候才需要使用)
npm run build
强烈建议不要用直接使用 cnpm 安装,会有各种诡异的 bug,可以通过重新指定 registry 来解决 npm 安装速度慢的问题。若还是不行,可使用 yarn 替代 npm。
Windows 用户若安装不成功,很大概率是node-sass安装失败,解决方案。
这里可以看我的前一篇博客基于蘑菇博客建设个人SNS网站(一),有详细的部署过程
# 指定node-sass的国内镜像源
npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass
# 重新安装
npm install --registry=https://registry.npm.taobao.org
2) 安装 vue_mogu_web 项目的依赖,
这个步骤其实和admin端的安装时一致的,这里就不做过多的叙述
# 使用淘宝镜像源进行依赖安装,解决国内下载缓慢的问题(出现警告可以忽略)
npm install --registry=https://registry.npm.taobao.org
# 启动项目
npm run dev
#打包项目(在部署的时候才需要使用)
npm run build
tip:特别注意!!!!!如果图片无法显示,那是因为本地没有对应的图片,需要做的事是查看nginx是否启动,然后就是在后台添加图片进行上传
然后进行图片上传
上传完毕后,再到博客管理页面,修改博客标题图,然后保存即可