数据库读写分离 Nginx服务 Nginx配置 YApi Swagger项目部署

目录

1.今天所学内容摘要:

数据库读写分离

Nginx服务

Nginx配置

YApi

Swagger

项目部署

2.所遇到的问题描述:

3.扩展学习部分:

4.学习总结:

今天主要是结束了外卖项目的项目部署部分,总体来说还可以,但是也出现了问题;比如说在IDEA中可以运行的代码到了部署中无法正常运行,对于图片明明以及放置了但是却还是不显示等问题;目前还没结局,这一部分内容涉及到前端部署,暂时不了解前端内容,以及前端打包方式,需要搁浅一下,后续学会了会反过来修复;对于项目的部署主要就是先对代码进行缓存优化,然后将数据库实现主从分离,其次是部署Nginx服务器转移前端资源,最后才是部署后端的资源,启动部署项目测试;今天学习还行,但是对于错误的处理不太理想


1.今天所学内容摘要:

数据库读写分离

//Sharding-JDBC(用于数据库读写分离的框架)
//1.导入依赖
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.0.0-RC1</version>
//2.在配置文件中配置读写分离规则
    spring:
      shardingsphere:
        datasource:
          names:
            master,slave
          # 主数据源
          master:
            type: com.alibaba.druid.pool.DruidDataSource
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://192.168.56.100:3306/reggie?characterEncoding=utf-8
            username: root
            password: root001
          # 从数据源
          slave:
            type: com.alibaba.druid.pool.DruidDataSource
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://192.168.56.101:3306/reggie?characterEncoding=utf-8
            username: root
            password: root001
        masterslave:
          # 读写分离配置
          load-balance-algorithm-type: round_robin #轮询
          # 最终的数据源名称
          name: dataSource
          # 主库数据源名称
          master-data-source-name: master
          # 从库数据源名称列表,多个逗号分隔
          slave-data-source-names: slave
        props:
          sql:
            show: true #开启SQL显示,默认false
//3.在配置文件中配置允许bean定义覆盖配置项
    main:
      allow-bean-definition-overriding: true

注意:配置完这一部分内容后,还需要将两台服务器打开,同时要运行mysql服务,进行相应配置,当确保两个数据库之间有关联了之后,在运行服务器;

Nginx服务

//重点目录/文件
conf/nginx.conf                                             //nginxi配置文件:
html                                                       //存放静态文件(html、csS、Js等)】
logs                                                       //日志目录,存放日志文件
sbin/nginx                                                  //二进制文件,用于启动、停止Nginx服务
    
//在nginx的sbin目录中执行:
./nginx                                                     //启动Nginx服务
./nginx -s stop                                              //停止Nginx服务
//在nginx的conf目录中执行:
nginx -s reload                                              //重新加载配置文件

拓展:树状目录结构展示tree命令,安装 yum install tree;当在/etc/profile配置文件中配置了Nginx的环境变量后,在哪里都可以执行Nginx的相关语句;

Nginx配置

//Nginxi配置文件(conf/nginx.conf)整体分为三部分:
全局块                    //和Nginxi运行相关的全局配置
events块                 //和网络连接相关的配置
http块                   //代理、缓存、日志记录、虚拟主机配置
​
 
//负载均衡
upstream targetserver{                               //upstream指令可以定义一组服务器
    server 192.168.56.101:8080 负载均衡策略;            //默认策略是以轮询的方式访问两台服务器
    server 192.168.56.101:8081 负载均衡策略;
}
//反向代理配置
server{
listen 82;                                           //端口号
server name localhost;                                //服务器名称
location / {                                         //匹配客户端请求url
    proxy_pass http://192.168.138.101:8080;            //反向代理配置,将请求转发到指定服务
    //proxy_pass http://targetserver;                      负载均衡配置
    }
}

注意:

  1. http块中可以配置多个Server块,每个Server块中可以配置多个location块;

  2. 反向代理是指客户端与目标服务端之间有一个代理服务器,客户端以为自己访问的是目标服务端其实访问的是代理服务端,而代理服务端负责从目标服务端获取数据返回给客户端;(不知道有代理服务端存在)

  3. 正向代理是指客户端访问代理服务端,通过代理服务端到目标服务端获取数据;(知道代理服务端存在)

  4. 负载均衡其实是基于反向代理的原理实现的,负载均衡可以匹配多个服务器是由upstream指令设置完成的,然后将反向代理的单个IP换成一组服务器

YApi

源码地址:GitHub - YMFE/yapi: YApi 是一个可本地部署的、打通前后端及QA的、可视化的接口管理平台

注意:我这里使用Apifor代替了YApi的功能实现

Swagger

//操作步骤
//1、导入knife4j的maven坐标
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>3.0.2</version>
        
//2、导入knife4j相关配置类
    @EnableSwagger2 //加在webMvcConfig类的上方
    @EnableKnife4j  //加在webMvcConfig类的上方
        
    @Bean
    public Docket createRestApi() {
        // 文档类型
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.reggie.controller"))
                .paths(PathSelectors.any())
                .build();
    }
​
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("瑞吉外卖")
                .version("1.0")
                .description("瑞吉外卖接口文档")
                .build();
    }
​
//3、设置静态资源:否则接口文档页面无法访问
    registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
    registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
​
//4、在LoginCheckFilter中设置不需要处理的请求路径
    "/doc.html",
    "/webjars/**",
    "/swagger-resources",
    "/v2/api-docs"

注意:Swagger的使用还需要搭配上常用注解,作用是用于描述类、属性、方法等的说明,具体使用网上查阅即可;

项目部署

//部署环境说明
服务器:
192.168.56.100(服务器A)
    Nginx:部署前端项目,配置反向代理
    Mysql:主从复制结构中的主库
192.168.56.101(服务器B)
    jdk:运行java项目
    git:版本控制工具
    maven:项目构建工具
    jar:SpringBoot项目打成Jar包基于内置Tomcat运行
    Mysql:主从复制结构中的从库
127.0.0.1(服务器C)
    Redis:缓存中间件
//部署前端项目
1.在服务器A中安装Nginx,将课程资料中的dist目录(前端打包目录)上传到Nginx的html目录下
2.修改Nginx配置文件nginx.conf
    location / {
    root html/dist;
    index index.html;
    }
    //反向代理配置
    localtion ^~ /api/ {
        rewrite ^/api/(.*)$ /$1 break;
        proxy_pass http://192.168.56.101:8080;
    }
//部署后端项目
1.在服务器B中安装jdk、git、maven、mysql,使用git clone命令将git远程仓库的代码克隆下来
2.将资料中提供的reggieStart.sh文件上传到服务器B,通过chmod命令设置执行权限
3.执行reggieStart.sh脚本文件,自动部署项目

2.所遇到的问题描述:

报错:Access denied for user 'root'@'192.168.56.1' (using password: YES)

解决:修改slave从库的密码为root001

原因:从库密码输入错误,写成了权限用户的密码

3.扩展学习部分:

4.学习总结:

  • 今天主要是结束了外卖项目的项目部署部分,总体来说还可以,但是也出现了问题;比如说在IDEA中可以运行的代码到了部署中无法正常运行,对于图片明明以及放置了但是却还是不显示等问题;目前还没结局,这一部分内容涉及到前端部署,暂时不了解前端内容,以及前端打包方式,需要搁浅一下,后续学会了会反过来修复;对于项目的部署主要就是先对代码进行缓存优化,然后将数据库实现主从分离,其次是部署Nginx服务器转移前端资源,最后才是部署后端的资源,启动部署项目测试;今天学习还行,但是对于错误的处理不太理想
  • 34
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值