# 快速部署
# 环境要求
JDK >= 1.8 (推荐1.8版本)
Mysql >= 5.7.0 (推荐5.7版本)
Maven >= 3.6.2 (推荐3.6.2版本)
Redis >= 3.2(推荐3.2版本)
Node >= 10 (推荐12版本)
2
3
4
5
# 基础安装
Node
安装
此项目为前后端分离项目,前端运行依赖Node进行依赖包管理,因此需要安装Node依赖包管理工具,官网下载地址https://nodejs.org/en/ (opens new window),下载后直接双击安装即可;
yarn
安装
前端项目使用yarn
进行依赖管理,因为安装Node
之后需进行yarn安装,全局安装命令为:npm install -g yarn
;yarn安装之后需在前端项目跟目录进行依赖安装,安装命令为:yarn install
;
提示
安装需以 管理员权限
进行安装,否则会安装失败
VSCode
安装
前端UI开发工具推微软的开源工具VSCode
,官网下载地址https://code.visualstudio.com/ (opens new window),下载后自动双击安装即可;
# 项目部署
# 后端服务
# IDEA安装
以前大家比较熟悉使用Eclipse
开发工具做JAVA开发,随着科学技术的进步,目前市场上使用频率比较高的开发工具是IntelliJ IDEA
,这里我们也建议大家使用IntelliJ IDEA
,此工具体验非常友好,打开项目后会自动安装程序所需的依赖,使用非常便捷,如果需要的朋友可以直接《官网下载》 (opens new window),本网站提供一个原始版本的下载通道《ideaIU-2019.1.3》 (opens new window),下载后进行安装,如有不熟悉安装步骤的可以自行查询安装教程;
安装好IntelliJ IDEA
开发工具后,直接打开工具,呈现在眼前的如下下图所示:
# 工具使用
如果有JAVA开发经验的话就容易上手多了,安装好本地MYSQL服务
及数据库可视化工具(Navicat)
并导入数据库脚本文件,打开开发工具IntelliJ IDEA
直接导入项目,修改下数据库连接账号直接运行即可,下面我们分步骤详细的介绍下:
- 解压项目
解压项目框架包如JavaWeb_Cloud_Pro旗舰版v1.4.0.zip
,数据库脚本文件javaweb-cloud-pro.sql
在下图中的doc目录
下,解压后如下图所示:
脚本文件
导入脚本
- 安装本地
MYSQL
数据库服务请启动本地服务,平台下载通道《MYSQL服务》 (opens new window); - 安装MYSQL数据库安装可视化工具
Navicat
,平台下载通道《MYSQL可视化工具》 (opens new window); - 创建数据库
javaweb-cloud-pro
后导入项目解压包中的sql脚本javaweb-cloud-pro.sql
,如下图所示:
- 导入项目
以上我们详细的介绍了项目运行所需要的必备条件以及解决方案,一切准备就绪,下面就是最重要的一步了,使用工具导入项目并安装Maven依赖
,工具本身已经集成了Maven依赖,打开项目后工具会自动帮你下载项目所属的依赖,等待所有依赖都下载好之后便可运行项目(本地数据库配置信息需自行修改,配置文件application-dev.yml
);
- 打开工具
- 选择项目
- 导入项目
附录:
如果不想使用工具自带的依赖,也可以使用本地的Maven依赖管理
,平台下载通道《Maven依赖》 (opens new window),下载后解压,打开工具并配置本地Maven路径,如下图所示:
# 启动服务
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包
微服务项目的启动需要遵循一定的顺序,本框架基于SpringCloud框架,启动顺序依次为:注册中心、网关服务、认证中心、系统服务、会员服务、代码生成器服务;启动注册中心之后可以通过地址直接访问注册中心,可以详细的看到目前的服务启动情况,下面我们详细的介绍:
- 注册中心
注册中心的启动文件是 JWEurekaApplication
工具中打开注册中心模块并启动注册中心,如下图所示:
注册中心成功启动后可以访问注册中心地址 http://localhost:9001/
即可看到其他服务的运行情况,如下图所示:
特别说明
注册中心需要优先启动,以便其他服务可以正常的注册与实现动态管理
- 网关服务
Spring Cloud Gateway 是 Spring Cloud 新推出的网关框架,之前是 Netflix Zuul。网关通常在项目中为了简化前端的调用逻辑,同时也简化内部服务之间互相调用的复杂度;具体作用就是转发服务,接收并转发所有内外部的客户端调用;其他常见的功能还有权限认证,限流控制等等。
网关服务的启动文件是 JWGatewayApplication
工具中打开网关服务模块并启动网关服务,如下图所示:
网关服务成功启动后便可以在注册中心看到 网关服务
的运行情况,如下图所示:
- OAuth2认证服务
使用OAuth2实现微服统一认证授权。通过向oauth2认证服务器发送请求获取token,然后携带token访问其他微服务,此token在其他微服务是信任的(即是鉴权验证token是否可用)
- OAuth 历史
- OAuth2解决问题域和场景
1) 开放系统间授权(社交平台、开放API平台等)
2) 现代微服务安全(微服务之间的调用等)
3) 企业内部应用认证授权(IAM/SSO等)
2
3
- OAuth2 的定义和原理
1) 用户在请求获取资源时会向授权服务器获取Access Token (吃鸡游戏获取用户微信资源)
2) 授权服务器会询问资源拥有者允不允许访问(向微信用户弹窗是否同意授权)
3) 资源拥都同意访问
4) 授权服务器返回Access Token
2
3
4
OAuth2认证服务的启动文件是 JWAuthApplication
工具中打开 javaweb-auth
认证服务模块并启动认证服务,如下图所示:
OAuth2认证服务成功启动后便可以在注册中心看到 OAuth2认证服务
的运行情况,如下图所示:
- 系统服务
系统服务主要提供后端权限架构、人员管理、角色管理、菜单管理、职级管理、岗位管理及其他基础模块的管理功能,对整个微服务系统启动一个支撑性作用,下面我们启动系统管理服务,系统服务的启动文件是 JWSystemApplication
工具中打开系统服务模块并启动,如下图所示:
系统服务成功启动后便可以在注册中心看到 系统服务
的运行情况,如下图所示:
- 会员服务
会员服务可以理解为独立的会员中心的服务,整个系统架构的会员信息全部从会员中心进行拉取,以便更好的维护和升级会员体系,系统服务的启动文件是 JWMemberApplication
工具中打开会员服务模块并启动,如下图所示:
系统服务成功启动后便可以在注册中心看到 系统服务
的运行情况,如下图所示:
- 代码生成器服务
代码生成器服务主要对外提供的是 一键CURD
的功能,可以自动化生成整个后端JAVA文件和业务代码,同时也会自动化生成前端Vue代码,实现了单模块自动化生成的功能并自动化创建模块对应的菜单,生成后可以直接运行使用模块,极大的简化的项目开发,提高了研发效率;生成器服务
的启动文件是 JWGeneratorApplication
工具中打开生成器服务模块并启动,如下图所示:
生成器服务成功启动后便可以在注册中心看到 生成器服务
的运行情况,如下图所示:
# 前端服务
按照上述的操作步骤启动后端微服务后会整体的对外提供服务,配置好前端项目中的访问后端服务的 API请求地址
后启动前端项目服务即可访问前端服务,运行和发包命令如下:
- 运行命令为:
npm run dev
,服务启动成功后会显示可访问地址,将地址拷贝值浏览器即可实现在线浏览;
将浏览地址 http://localhost:8080/
直接拷贝到浏览器中进行预览,如上述一切成功就绪之后,实际运行效果如下:
特别说明
前端项目的配置文件在文件 config/setting.js
中,后端API访问参数为 baseURL
访问后端JAVA服务只需更改这个API地址即可
- 打包命令为:
npm run build
,如果项目实现线上部署,可以使用打包命令打包,成功打包后项目根目录会自动生成dist
目录文件夹,如果在线访问,配置nginx
、apache
指向dist目录下的index.html
入口文件即可;
# Nginx配置
项目开发完毕之后都会部署到服务器上,此时我们需要配置 Nginx
或者 Apache
进行项目部署,这里我们以Nginx为例讲述详细的Nginx参数配置
:
server
{
listen 80;
server_name manage.cloud.pro.javaweb.vip;
root /www/webroot/javaweb/javaweb_cloud_pro/javaweb_ui/dist;
location /{
try_files $uri $uri/ @router;
index index.html;
}
location @router{
rewrite ^.*$ /index.html last;
}
location /api {
proxy_pass http://localhost:9100/api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name images.cloud.pro.javaweb.vip;
root /www/webroot/javaweb/javaweb_cloud_pro/javaweb_vue/uploads;
index index.php;
charset utf-8;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp)$
{
expires 365d;
if ( !-e $request_filename ) {
rewrite ^/(.+)$ /cut.php?path=$1 last;
}
}
# deny access to .htaccess files, if Apache's document root
location ~ /\.ht {
deny all;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
如上述所示是配置了两个 Nginx
服务,一个是指向前端UI的 dist
目录,一个是图片域名指向附件目录
的配置,实际部署配置时以你们自己的相关 域名参数
和 实际项目路径
进行正确部署,上述参数作为参考;
# 常见问题
在项目部署还之后,个别用户反馈无法上传图片的问题或者上传的图片无法正确访问,这里主要有两个问题:
- 图片无法上传
- 无法上传的问题,前提需要保证JAVA后端的上传文件配置路径是否正确,相关的配置在
application-dev.yml
文件中,如下所示:
file:
#上传的服务器上的映射文件夹
accessPath: /uploads/
#静态资源对外暴露的访问路径
staticAccessPath: /**
#静态资源实际存储路径
uploadFolder: E:\JavaWeb_Cloud_Pro\uploads\
2
3
4
5
6
7
请将此处的上传附件路径改成你本地项目的正确附件目录;
2. 如果是Mac
或者Linux
服务器,请查看您的 uploads
附件目录权限是否足够,不够请赋予读写权限,如chmod -R 0777 uploads
;
- 图片无法不显示
图片正确上传却无法正常访问,并且附件中是可以看到所上传的图片,此时需检查您配置的图片域名是否正确,如果所配置的图片域名确实正确,请检查您的YML
配置文件中是否同时替换了正确的图片域名,如下所示:
# 端口配置
server:
port: 8085
# 图片域名
imageUrl: http://images.cloud.pro/
2
3
4
5
切记
请将参数 IMAGE_URL
中的参数替换成您服务器上所配置的那个图片域名,保持一直即可;