部署配置
# 部署配置

# 1.Api-gateway-admin前后端分离
# 后台vue3项目文件夹说明
- views:存放vue页面
- router:通过ts文件配置组件与路由绑定关系
- components:组件层(整个页面宏观整体角度),包括标题头,左侧菜单,标签显示,脚部
- api:统一维护一个index.ts,vue页面中的调用API接口统一管理,包括请求API接口
- public:存放模板与数据,比如api查询伪造的mock json数据
# Mybatis<where>标签
Mybatis的<where>标签结合<if>标签使用(替代1=1,优化过滤需要MySQL做,减轻压力):①子句开头为and或者or时,where标签会自动把它剔除。②至少一个if标签有内容才会插入where子句。
好处:sql语句复用,涵盖指定条件查询和全表查询(查所有)两种查询情况,repository层不需要做null判断。
<where>
<if test="data != null and data.systemId != ''">
and system_id = #{data.systemId}
</if>
<if test="data != null and data.interfaceId != ''">
and interface_id = #{data.interfaceId}
</if>
</where>
2
3
4
5
6
7
8
# 跨域与分页
跨域:直接在controller类上注解**@CrossOrigin**
分页:封装OperationRequest和OperationResult类型,接收前端的分页请求。同时后端增加行计数方法,总记录数返回给前端。
# 2.Nginx配置问题
- 数据库远程连接权限
问题:SpringBoot配置文件application.yml中连接数据库配置文件的路径改为本机的ip之后启动项目报错,连接不上数据库。
解决:登录连接MySQL后,输入以下两条命令,允许远程连接权限,并重启MySQL服务。
grant all privileges on *.* to 'root'@'%' identified by '1234' with grant option;
flush privileges;
2
- Nginx更改配置生效
问题:Nginx在Docker环境部署时,手动修改nginx.conf后,容器没有自动更新配置。
解决:需要docker restart重启使配置生效。或者exec进入容器内部reload重新加载配置。
- Nginx.conf异常退出
问题:Nginx.conf异常退出,导致出现两份配置文件产生备份的现象,下次再进行修改的时会提示错误。
解决:在conf文件内ls -a查看所有文件(交换文件是隐藏文件),并rm删除交换文件。
- Nginx配置上游服务器
问题:在Nginx.conf中配置upstream代理服务器没有生效,访问Nginx后没有正确代理到上游服务器返回404
解决:upstream每个server都需要以分号;结尾,因此center从数据库查询到网关地址后UpstreamVO的每个代理服务器server都需要在后面加上";"
- Linux和windos换行符
问题:Linux系统下的换行符直接\n,不需要再添加\r,否则在Linux内打开文件会出现^M乱码。
# 3.Docker部署配置
# ☀️api-gateway-engine
①Dockerfile文件配置EVN PARAMS指定springBoot运行环境(yml配置文件),JAVA_OPTS用于指定java运行环境,比如-Dport。EVN相当于在ENTRYPOINT的指令拼接外部所指定的运行环境,具体如下:
# 基础镜像
FROM openjdk:8-jdk-alpine
# 作者
MAINTAINER "panhai"
# 时区
ENV TZ=PRC
ENV PARAMS=""
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 添加应用
ADD api-gateway-engine.jar /api-gateway-engine.jar
# 执行镜像
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /api-gateway-engine.jar $PARAMS"]
2
3
4
5
6
7
8
9
10
11
12
②根据Dockerfile文件构建镜像:
docker build -f ./Dockerfile -t api-gateway-engine:1.0.0 .
③运行容器,通过-e指定Dockerfile配置的外部运行环境参数,最终拼接到Dockerfile的指令当中:
docker run -p 8003:8003 -p 7398:7398 \
-e PARAMS="
--sever.port=8003
--api-gateway.address=http://192.168.200.200:8080
--api-gateway.groupId=10001
--api-gateway.gatewayId=api-gateway-g4
--api-gateway.gatewayName=电商配送网关
--api-gateway.gatewayAddress=192.168.200.200:7398" \
--name api-gateway-engine2 -d api-gateway-engine:1.0.0
2
3
4
5
6
7
8
9
# ☀️api-gateway-center
①Dockerfile文件:
# 基础镜像
FROM openjdk:8-jdk-alpine
# 作者
MAINTAINER "panhai"
# 时区
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 添加应用
ADD api-gateway-center.jar /api-gateway-center.jar
# 执行镜像
ENTRYPOINT ["java","-jar","/api-gateway-center.jar"]
2
3
4
5
6
7
8
9
10
11
②根据Dockerfile文件构建镜像:
docker build -f ./Dockerfile -t api-gateway-center:1.0.5 .
③运行容器,并将容器内部SpringBoot程序的文件,挂载到Linux服务器外部的Nginx配置文件,同时添加监听器,具体如下:
docker run -p 8080:8080 -v /usr/local/nginx/conf:/nginx/conf -v /var/run/docker.sock:/var/run/docker.sock --name api-gateway-center -d api-gateway-center:1.0.5 CP4-LISTEN:8080,fork,reuseaddr UNIX-CONNECT:/var/run/docker.sock TCP4-LISTEN:8080,fork,reuseaddr UNIX-CONNECT:/var/run/docker.sock
# ☀️单机Zookeeper
①拉取zookeeper镜像:
docker pull docker.io/zookeeper:3.4.13
②在单机主机上建立挂载目录和zookeeper配置文件:
mkdir -p /usr/local/zookeeper/conf
mkdir -p /usr/local/zookeeper/data
cd /usr/local/zookeeper/conf
touch zoo.cfg
vi zoo.cfg
2
3
4
5
③zoo.cfg配置信息:
clientPort=2181
dataDir=/data
dataLogDir=/data/log
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
2
3
4
5
6
7
8
9
④单机启动zk容器,容器内的zkServer.sh默认会读取/conf/zoo.cfg下的配置,读取将数据目录和配置目录挂载到容器内的对应文件,并使用host网络模式--network host(用默认的bridge模式,会导致容器跨主机间通信失败),此时只能通过宿主机Linux的IP(192.168.200.200:2181)访问zk
docker run --privileged=true --network host -v /usr/local/zookeeper/data:/data -v /usr/local/zookeeper/conf:/conf --name zookeeper2181 -d docker.io/zookeeper:3.4.13
# ☀️Nginx配置
①拉取最新Nginx镜像:
docker pull nginx
②创建外部挂载的文件目录
mkdir -p /usr/local/nginx/conf
mkdir -p /usr/local/nginx/log
mkdir -p /usr/local/nginx/html
2
3
③先第一遍运行nginx容器,将容器的nginx.conf文件和conf.d文件夹复制到宿主机
docker run --name nginx -p 9001:80 -d nginx
docker cp nginx:/etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf
docker cp nginx:/etc/nginx/conf.d /usr/local/nginx/conf/conf.d
docker cp nginx:/usr/share/nginx/html /usr/local/nginx/
2
3
4
④删除容器
docker stop nginx
docker rm nginx
2
⑤真正运行Nginx容器,并挂载对应文件与文件夹
docker run \
-p 8090:80 \
--name nginx \
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /usr/local/nginx/log:/var/log/nginx \
-v /usr/local/nginx/html:/usr/share/nginx/html \
-d nginx:latest
2
3
4
5
6
7
8
⑥修改html内容或者conf配置文件后,需要重启容器才能生效
docker restart nginx