# reggie **Repository Path**: frsf/reggie ## Basic Information - **Project Name**: reggie - **Description**: 瑞吉外卖,附加注释与一些配置问题 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-01-09 - **Last Updated**: 2023-02-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # reggie ### 介绍 大三寒假复习Spring框架,跟着黑马老师视频一起做的[基于spring boot的瑞吉外卖项目](https://www.bilibili.com/video/BV13a411q753/?spm_id_from=333.337.search-card.all.click&vd_source=dc4fb36fb0caac9672f9bbbb04194206 "b站视频链接"),趁着时间还算充裕,将说明文档尽量写详细一点,方便有需要的同学预览。

JDK-11 Springboot MySQL8.0 Redis7.0

### 使用技术 - SpringBoot SpringCache - MybatisPlus - Redis - MySQL(主从复制 + 读写分离) ### 软件部署架构 - ### 运行展示 ###### 后台 - - - ###### 移动端 ### 安装方式 1. 使用工具进行基本的Linux环境安装 2. 使用docker(有时间更新) ### 部分功能说明 / 错误避免 1. 移动端登录 我在登录时候,配置了两种登录方式,前端会启用正则进行判断登录方式: ①阿里云SMS短信验证 在utils包下的SendSms类中,代码完全按照阿里云示例代码进行配置。需要说明的是,个人申请短信服务比较繁琐,需要多个证明材料。其实可以直接使用阿里云的测试短信验证,只需要保证阿里云账户余额大于0(发送一条测试短信0.04¥),即可使用测试短信,无需申请证明材料。**若使用阿里短信请修改SendSms内自己的密钥信息**。 ②Springboot-mail **坑:当使用QQ邮箱作发送验证码方时,默认使用port 25发送邮件,本地测试并无问题,但上线阿里云服务器时候,你会发现即使开放25端口,仍然会报25端口错误,这是因为25端口默认是被服务器厂商禁用的,需要提交申请才能使用,所以建议修改端口到465,协议改为smtps,如下** ```yaml # Mail spring: mail: host: smtp.qq.com # 发送邮箱的服务器地址 smtp.qq.com username: xxxx@qq.com # 发送邮箱的账号 password: xxxx # 开启IMAP/SMTP服务获得的授权码 default-encoding: UTF-8 # 字符编码 port: 465 protocol: smtps properties: # 设置邮件超时时间防止服务器阻塞 timeout: 5000 connection-timeout: 5000 write-timeout: 5000 ``` --- 2. 配置远程Redis ①远程配置文件设置密码,并且取消只能本机访问 ②使用高版本Redis时,**坑:yml配置文件里面的Redis密码一定要使用单引号,不使用便会报错**,目前还不知道什么原因造成的 ③redis参考配置文件在/data/redis文件夹内,修改密码在 requirepass 后 ```yaml # Redis spring: redis: host: xxxx port: 6379 # 使用单引号,连接远程Redis不会报错 password: 'password' database: 0 cache: redis: # 30min cache time time-to-live: 1800000 ``` --- 3. MySQL8.0 主从复制 ​ 推荐直接使用docker拉取MySQL8的镜像进行配置。sql脚本文件,MySQL主数据库和从数据库的my.ini文件均在项目根目录的/data/MySQL文件夹内,需要的可以自取。 > 在使用提供的主库my.ini后,下列为主库的主从复制配置 ```yaml //mysql8授权用户需要先创建,创建和授权同一条语句的话会报错 create user 'slave'@'%' identified by '123456'; //再授权 GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%'WITH GRANT OPTION; //刷新 flush privileges; // 查看主库状态,此后不要操作主库 show master status; ``` ![在这里插入图片描述](src/main/resources/readme/master.png) > 在使用提供的从库my.ini后,下列为从库的主从复制配置 ```yaml //执行前先停下slave stop slave; //这是从库和主库连接的关键一步,host是主库的ip,user是前面创建的slave用户,file和pos是主库show master status的信息 change master to master_host='192.168.81.100',master_user='slave',master_password='123456', master_log_file='mysql-bin.000001',master_log_pos=157; //执行后启动slave start slave; // 查看从库状态 show slave status\G; ``` 说明:当下列两个状态均为Yes即为配置成功,如果显示Connection则可能正在连接,可以等待会查看。 ![image-20230216223047779](src/main/resources/readme/slave.png) --- 4. Nginx配置 ​ ①项目后期对于外卖后台进行前后端分离开发,外卖后台打包后的工程在/data/Nginx/dist文件夹内,在配置完成nginx后,放在html文件夹内即可。 ​ ②nginx配置文件default.conf在/data/Nginx下,参照修改配置即可 ```yaml # 前端工程位置配置 location / { root /usr/share/nginx/html/dist; index index.html index.htm; } # 反向代理配置 location ^~ /api/ { rewrite ^/api/(.*)$ /$1 break; proxy_pass http://8.142.102.66:8080; } ``` --- 5. 已有菜品的原始图片位于/data/Img,存储位置在配置文件下列位置 ```yaml # 用户自定义参数,linux图片存储位置 reggie: path: /home/java_env/pic/ ``` --- 6. Knife4j配置类WebMvcConfig.java 文档位置:/data/Knife4j/default_OpenAPI.json ![image-20230216223047779](src/main/resources/readme/knife4j.png)