# 快速部署

# 环境要求

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版本)
1
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开发工具后,直接打开工具,呈现在眼前的如下下图所示:

mixureSecure

至此,说明您的开发工具已经成功安装并可以正常使用;

# 工具使用

如果有JAVA开发经验的话就容易上手多了,安装好本地MYSQL服务数据库可视化工具(Navicat)并导入数据库脚本文件,打开开发工具IntelliJ IDEA直接导入项目,修改下数据库连接账号直接运行即可,下面我们分步骤详细的介绍下:

  • 解压项目

解压项目框架包如JavaWeb_Cloud_Pro旗舰版v1.4.0.zip,数据库脚本文件javaweb-cloud-pro.sql在下图中的doc目录下,解压后如下图所示:

mixureSecure

  • 脚本文件

    mixureSecure

  • 导入脚本

  1. 安装本地MYSQL数据库服务请启动本地服务,平台下载通道《MYSQL服务》 (opens new window)
  2. 安装MYSQL数据库安装可视化工具Navicat,平台下载通道《MYSQL可视化工具》 (opens new window);
  3. 创建数据库javaweb-cloud-pro后导入项目解压包中的sql脚本javaweb-cloud-pro.sql,如下图所示:

    mixureSecure

  • 导入项目

以上我们详细的介绍了项目运行所需要的必备条件以及解决方案,一切准备就绪,下面就是最重要的一步了,使用工具导入项目并安装Maven依赖,工具本身已经集成了Maven依赖,打开项目后工具会自动帮你下载项目所属的依赖,等待所有依赖都下载好之后便可运行项目(本地数据库配置信息需自行修改,配置文件application-dev.yml);

  1. 打开工具

mixureSecure

  1. 选择项目

mixureSecure

  1. 导入项目

mixureSecure

附录:

如果不想使用工具自带的依赖,也可以使用本地的Maven依赖管理,平台下载通道《Maven依赖》 (opens new window),下载后解压,打开工具并配置本地Maven路径,如下图所示:

mixureSecure

# 启动服务

微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。

微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包

微服务项目的启动需要遵循一定的顺序,本框架基于SpringCloud框架,启动顺序依次为:注册中心、网关服务、认证中心、系统服务、会员服务、代码生成器服务;启动注册中心之后可以通过地址直接访问注册中心,可以详细的看到目前的服务启动情况,下面我们详细的介绍:

  • 注册中心

注册中心的启动文件是 JWEurekaApplication 工具中打开注册中心模块并启动注册中心,如下图所示:

mixureSecure

注册中心成功启动后可以访问注册中心地址 http://localhost:9001/ 即可看到其他服务的运行情况,如下图所示:

mixureSecure

特别说明

注册中心需要优先启动,以便其他服务可以正常的注册与实现动态管理

  • 网关服务

Spring Cloud Gateway 是 Spring Cloud 新推出的网关框架,之前是 Netflix Zuul。网关通常在项目中为了简化前端的调用逻辑,同时也简化内部服务之间互相调用的复杂度;具体作用就是转发服务,接收并转发所有内外部的客户端调用;其他常见的功能还有权限认证,限流控制等等。

网关服务的启动文件是 JWGatewayApplication 工具中打开网关服务模块并启动网关服务,如下图所示:

mixureSecure

网关服务成功启动后便可以在注册中心看到 网关服务 的运行情况,如下图所示:

mixureSecure

  • OAuth2认证服务

使用OAuth2实现微服统一认证授权。通过向oauth2认证服务器发送请求获取token,然后携带token访问其他微服务,此token在其他微服务是信任的(即是鉴权验证token是否可用)

  1. OAuth 历史

mixureSecure

  1. OAuth2解决问题域和场景
1) 开放系统间授权(社交平台、开放API平台等)
2) 现代微服务安全(微服务之间的调用等)
3) 企业内部应用认证授权(IAM/SSO等)
1
2
3
  1. OAuth2 的定义和原理

mixureSecure

1) 用户在请求获取资源时会向授权服务器获取Access Token (吃鸡游戏获取用户微信资源)
2) 授权服务器会询问资源拥有者允不允许访问(向微信用户弹窗是否同意授权)
3) 资源拥都同意访问
4) 授权服务器返回Access Token
1
2
3
4

OAuth2认证服务的启动文件是 JWAuthApplication 工具中打开 javaweb-auth 认证服务模块并启动认证服务,如下图所示:

mixureSecure

OAuth2认证服务成功启动后便可以在注册中心看到 OAuth2认证服务 的运行情况,如下图所示:

mixureSecure

  • 系统服务

系统服务主要提供后端权限架构、人员管理、角色管理、菜单管理、职级管理、岗位管理及其他基础模块的管理功能,对整个微服务系统启动一个支撑性作用,下面我们启动系统管理服务,系统服务的启动文件是 JWSystemApplication 工具中打开系统服务模块并启动,如下图所示:

mixureSecure

系统服务成功启动后便可以在注册中心看到 系统服务 的运行情况,如下图所示:

mixureSecure

  • 会员服务

会员服务可以理解为独立的会员中心的服务,整个系统架构的会员信息全部从会员中心进行拉取,以便更好的维护和升级会员体系,系统服务的启动文件是 JWMemberApplication 工具中打开会员服务模块并启动,如下图所示:

mixureSecure

系统服务成功启动后便可以在注册中心看到 系统服务 的运行情况,如下图所示:

mixureSecure

  • 代码生成器服务

代码生成器服务主要对外提供的是 一键CURD 的功能,可以自动化生成整个后端JAVA文件和业务代码,同时也会自动化生成前端Vue代码,实现了单模块自动化生成的功能并自动化创建模块对应的菜单,生成后可以直接运行使用模块,极大的简化的项目开发,提高了研发效率;生成器服务 的启动文件是 JWGeneratorApplication 工具中打开生成器服务模块并启动,如下图所示:

mixureSecure

生成器服务成功启动后便可以在注册中心看到 生成器服务 的运行情况,如下图所示:

mixureSecure

# 前端服务

按照上述的操作步骤启动后端微服务后会整体的对外提供服务,配置好前端项目中的访问后端服务的 API请求地址 后启动前端项目服务即可访问前端服务,运行和发包命令如下:

  1. 运行命令为:npm run dev,服务启动成功后会显示可访问地址,将地址拷贝值浏览器即可实现在线浏览;

mixureSecure

将浏览地址 http://localhost:8080/ 直接拷贝到浏览器中进行预览,如上述一切成功就绪之后,实际运行效果如下:

mixureSecure

mixureSecure

特别说明

前端项目的配置文件在文件 config/setting.js 中,后端API访问参数为 baseURL 访问后端JAVA服务只需更改这个API地址即可

  1. 打包命令为:npm run build,如果项目实现线上部署,可以使用打包命令打包,成功打包后项目根目录会自动生成dist目录文件夹,如果在线访问,配置nginxapache指向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;
    }
}
1
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 目录,一个是图片域名指向附件目录的配置,实际部署配置时以你们自己的相关 域名参数实际项目路径 进行正确部署,上述参数作为参考;

# 常见问题

在项目部署还之后,个别用户反馈无法上传图片的问题或者上传的图片无法正确访问,这里主要有两个问题:

  • 图片无法上传
  1. 无法上传的问题,前提需要保证JAVA后端的上传文件配置路径是否正确,相关的配置在 application-dev.yml 文件中,如下所示:
file:
  #上传的服务器上的映射文件夹
  accessPath: /uploads/
  #静态资源对外暴露的访问路径
  staticAccessPath: /**
  #静态资源实际存储路径
  uploadFolder: E:\JavaWeb_Cloud_Pro\uploads\
1
2
3
4
5
6
7

请将此处的上传附件路径改成你本地项目的正确附件目录; 2. 如果是Mac或者Linux服务器,请查看您的 uploads 附件目录权限是否足够,不够请赋予读写权限,如chmod -R 0777 uploads;

  • 图片无法不显示

图片正确上传却无法正常访问,并且附件中是可以看到所上传的图片,此时需检查您配置的图片域名是否正确,如果所配置的图片域名确实正确,请检查您的YML配置文件中是否同时替换了正确的图片域名,如下所示:

# 端口配置
server:
  port: 8085
  # 图片域名
  imageUrl: http://images.cloud.pro/
1
2
3
4
5

切记

请将参数 IMAGE_URL 中的参数替换成您服务器上所配置的那个图片域名,保持一直即可;