官網地址:http://www.jeecg.com/
開發文檔地址:http://doc.jeecg.com/2043873
GitHub地址:https://github.com/zhangdaiscott/jeecg-boot
大致步驟如下:
1.創建MySQL,redis等輔助組件
2.創建jeecg-boot后端應用
3.創建jeecg-vue前端應用
0.說明
1.從GitHub上下載項目的zip壓縮包后,解壓縮可以看到,ant-design-vue-jeecg是前端模塊,jeecg-boot是后端模塊
2.按照開發文檔上的先在本地配置好前后端所需要的環境。
3.在k8s中創建一個jeecg-boot的名稱空間,若無特別說明,以下所有服務都是在該空間創建的
4.部署流程大致是這樣的,先在本地把前后端都跑通,然后再創建Dockerfile和.gitlab-ci文件,往gitlab提交代碼(事先配置好gitlab-runner),創建鏡像,推送到倉庫,自動發布更新到k8s上(首次需要用yaml文件創建有關pod,service等)
5.我這里采用了倆git倉庫,前端一個,后端一個
1.創建MySQL,redis等輔助組件
說白了也就是創建好MySQL服務,redis服務,后端項目中連接需要使用。
我這里采用的是在k8s中創建的,當然也可以創建普通的那種應用。
以下說的都是在k8s中創建舉例的
MySQL和Redis服務,均創建了服務類型是nodeport的service,然后使用宿主機上的軟件連接進行測試。等整個項目跑起來運行后再換成service是clusterip的服務類型


MySQL創建創建好后,需要導入相應的sql文件。
sql文件名稱:jeecg-boot\db\jeecgboot-mysql-5.7.sql
但是等后端項目運行后會碰到一個問題,有些數據表明是需要大寫的,主要是qrtz開頭的數據表名

導入sql文件后,把所有qrtz開頭的數據表名全部換成大寫的數據表名,避免后端項目啟動后連接數據庫提示有些表不存在
最后啟動MySQL和Redis服務。
2.后端項目
0.項目結構
├─jeecg-boot-parent(父POM: 項目依賴、modules組織)
│ ├─jeecg-boot-base(共通模塊: 工具類、config、權限、查詢過濾器、注解、接口等)
│ ├─jeecg-boot-module-demo 示例代碼
│ ├─jeecg-boot-module-system (系統管理權限等功能) -- 默認作為啟動項目
│ ├─jeecg-boot-starter(微服務starter模塊,不需要微服務可以刪掉) (我這邊操作的時候給刪除了)
│ ├─jeecg-cloud-module(微服務生態模塊,不需要微服務可以刪掉)(我這邊操作的時候給刪除了)
1.修改項目配置文件(數據庫配置、redis配置)
配置文件: jeecg-boot-module-system/src/main/resources/application-dev.yml


2.啟動項目&訪問
本地啟動:jeecg-boot-module-system/src/main/java/org/jeecg/JeecgSystemApplication.java,右鍵執行啟動。
通過 http://localhost:8080/jeecg-boot/doc.html 訪問后台,默認進入swagger文檔首頁
本地運行

本地啟動后的日志顯示

3.創建Dockerfile文件
需要說明的是需要的項目只有jeecg-boot-module-system,所以把Dockerfile文件創建在jeecg-boot-module-system根目錄下

Dockerfile文件具體文件內容如下:
FROM jdd.io/jre:1.8.275
MAINTAINER 1103324414@qq.com
ADD target/jeecg-boot-module-system-2.4.3.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar app.jar" ]
說明:開頭第一行是使用的基礎鏡像,創建方式詳看地址:https://www.cnblogs.com/sanduzxcvbnm/p/13220054.html
基礎鏡像中只有jdk環境,其他的都沒有了。
4.創建.gitlab-ci文件
這個文件創建在整個項目的根目錄下
需要注意的是gitlab-runner使用的構建鏡像環境,需要包含開發文檔中說的后端項目需要使用的那些軟件。
我這邊圖省事兒,前后端構建項目使用的是同一個構建鏡像,包含的軟件就比較多了:jdk,maven,curl,docker,nodejs,yarn等,具體構建方式可以看地址:https://www.cnblogs.com/sanduzxcvbnm/p/13220054.html
還有注意的一點,jeecg需要使用到一些私服的依賴,詳看地址:http://doc.jeecg.com/2043876

<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*,!jeecg,!jeecg-snapshots,!getui-nexus</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
所以在構建剛才的鏡像時,添加的maven需要修改以下settings.xml配置文件。
我這邊采取的方式是事先准備好已經修改好的settings.xml配置文件,然后在構建過程中copy到鏡像中,替換原有的配置文件
FROM alpine:latest
MAINTAINER sandu <1103324414@qq.com>
COPY localtime /etc/localtime
COPY timezone /etc/timezone
RUN echo "https://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories
RUN echo "https://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories
RUN ["apk","update"]
RUN ["apk","add","curl"]
RUN ["apk","add","openjdk8"]
RUN ["apk","add","maven"]
RUN ["apk","add","nodejs"]
COPY settings.xml /usr/share/java/maven-3/conf/settings.xml
RUN ["apk","add","docker"]
構建好這個鏡像后,修改gitlab-runner使用的鏡像,然后重啟gitlab-runner

注意:不能把這個鏡像跟后端dockerfile文件中使用的鏡像混為一談,這倆是里面安裝的軟件不一樣
.gitlab-ci.yml文件內容如下:
variables:
DOCKER_DRIVER: overlay2
MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
cache:
paths:
- .m2/repository/
stages:
- package
- build
maven_step:
tags:
- maven
stage: package
script:
- mvn clean package -Dmaven.test.skip=true # 編譯整個項目
artifacts:
paths:
- jeecg-boot-module-system/target/*.jar # 注意這行,只要其中一個jar包,供下面的docker使用
only:
- develop
docker_step:
tags:
- docker
stage: build
script:
- export TAG=`date "+%Y%m%d%H%M%S"`
- docker login -u admin -p admin123 jdd.io
- cd jeecg-boot-module-system
- docker build -t jdd.io/demo:$TAG .
- docker push jdd.io/demo:$TAG
only:
- develop
構建的思路如下:先編譯打包整個項目,然后切換到所需要jar包的目錄下,然后根據這個目錄下的Dockerfile文件制作docker鏡像,並上傳到Nexus鏡像倉庫,這里指的是jeecg-boot-module-system
流水線上顯示的效果,需要事先配置好gitlab-runner





后期可以在增加上自動發布到k8s上,如下這個僅供展示,實際中未操作:(新增加curl一行)
docker_step:
tags:
- docker
stage: build
script:
- export TAG=`date "+%Y%m%d%H%M%S"`
- docker login -u admin -p admin123 jdd.io
- cd jeecg-boot-module-system
- docker build -t jdd.io/demo:$TAG .
- docker push jdd.io/demo:$TAG
- curl -X PUT -H "content-type:application/json" -H "Cookie:KuboardUsername=admin;KuboardAccessKey=4jz66jfsa6t6.5wjsz733f73p5fei4h4fpbmnfp72ytbc" http://192.168.2.163:10080/kuboard-api/cluster/develop/kind/CICDApi/admin/resource/updateImageTag -d '{"kind":"deployments","namespace":"test","name":"web-spring","images":{"jdd.io/demo":"jdd.io/demo:'$TAG'"}}'
only:
- develop
pod啟動后的日志展示,里面出現的是pod的地址,因為pod的特性,所以訪問后端使用的話,還需要創建一個service,采用clusterip服務類型


以后訪問后端,直接使用ClusterIP+服務端口的形式就可以了。
當然可以先創建service,采用NodePort的服務類型,然后通過宿主機IP+NodePort的形式,直接訪問后端應用,比如接口文檔,查看以下效果,地址:http://宿主機IP:NodePort/jeecg-boot/doc.html
3.創建前端
前端最主要的是使用生成的dist文件夾,這里結合nginx,把兩者直接整個進同一個鏡像中,這樣一來,啟動這個容器,nginx直接就啟動了,nginx訪問路徑正好是vue的dist文件夾里面的東西
關於vue配置文件的說明
-
vue.config.js文件中的配置是在本地開發的時候使用的,此處映射地址配置到后台端口即可,如果后台項目名字修改了的話,直接改“/jeecg-boot”

-
.env文件是用來選擇項目構建時使用哪個配置文件的,主要是有關.env.development和.env.production文件的,這里寫的是哪個,項目采用的就是哪個配置文件,這里寫的是NODE_ENV=production,說明采用的是.env.production文件

3.關於.env.production文件中的配置
這個地址應該是配置連接后端項目的,也就是后端項目啟動后日志中顯示的那個地址。但是在這里做了特殊的設置,主要是跟下面的Dockerfile文件中nginx的配置和后期創建的Ingress有關,稍后再詳講解這個。

直接在前端項目根目錄下創建Dockerfile文件,文件內容如下:
# build stage
FROM node:lts-alpine as build-stage # 采用alpine鏡像,多階段構建方式
MAINTAINER 1103324414@qq.com
COPY . /app/ # 把跟目錄下所有文件拷貝到上面鏡像的/app目錄下,該目錄不存在的話會自動創建
WORKDIR /app/ # 切換容器中的當前工作目錄
RUN npm config set registry https://registry.npm.taobao.org/ && yarn install && yarn run build # 設置nodejs倉庫源,安裝依賴,打包
# production stage
FROM nginx:stable-alpine as production-stage
# 拷貝dist目錄下的所有文件到/usr/share/nginx/html/目錄下,不包含dist文件夾
COPY --from=build-stage /app/dist /usr/share/nginx/html/
ENV LANG en_US.UTF-8
# 設置nginx中的配置文件內容
RUN echo "server { \
listen 80; \
location ^~ /jeecg-boot { \
proxy_pass http://10.3.255.203:8080/jeecg-boot/; \
proxy_set_header Host jeecg-boot-system; \
proxy_set_header X-Real-IP \$remote_addr; \
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; \
} \
#解決Router(mode: 'history')模式下,刷新路由地址不能找到頁面的問題 \
location / { \
root /usr/share/nginx/html/; \
index index.html index.htm; \
if (!-e \$request_filename) { \
rewrite ^(.*)\$ /index.html?s=\$1 last; \
break; \
} \
} \
access_log /var/log/nginx/access.log ; \
} " > /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
說明:
1.nginx.conf文件中沒有server{}塊,默認包含/etc/nginx/conf.d/*.conf, 有個默認的default.conf,這里直接替換默認的default.conf了。
2.如下這塊是配置的nginx代理后端模塊的,proxy_pass中寫的地址,端口就是后端項目啟動的service服務,ClusterIP+服務端口,詳看上面的圖
location ^~ /jeecg-boot {
proxy_pass http://10.3.255.203:8080/jeecg-boot/;
proxy_set_header Host jeecg-boot-system;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
然后創建.gitlab-ci.yml文件,具體內容如下:
variables:
DOCKER_DRIVER: overlay2
MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
cache:
key: ${CI_BUILD_REF_NAME}
paths:
- node_modules/
stages:
- build
docker_step:
tags:
- docker
stage: build
script:
- export TAG=`date "+%Y%m%d%H%M%S"`
- docker build -t jdd.io/jeecg-vue:$TAG .
- docker login -u admin -p admin123 jdd.io
- docker push jdd.io/jeecg-vue:$TAG
- curl -X PUT -H "content-type:application/json" -H "Cookie:KuboardUsername=admin;KuboardAccessKey=hx35mfx3b7p6.w6wm38cbikdd4yeweexfcsfybd4zmk2s" http://192.168.2.163:10080/kuboard-api/cluster/develop/kind/CICDApi/admin/resource/updateImageTag -d '{"kind":"deployments","namespace":"jeecg","name":"my-vue","images":{"jdd.io/jeecg-vue":"jdd.io/jeecg-vue:'$TAG'"}}'
only:
- develop
構建的思路如下:直接根據這個目錄下的Dockerfile文件制作docker鏡像,並上傳到Nexus鏡像倉庫,然后自動更新到k8s中(需要事先使用yaml文件創建好對應的pod,下面會講述)
檢查方式是登錄進入,查看nginx是否啟動,若啟動則說明沒問題。
gitlab上使用gitlab-runner自動化構建的信息如下:
先配置好gitlab-runner(前后端用的是同一個gitlab-runner)






給前端pod配置一個service,這里也采用的是服務類型是ClusterIP的方式,注意,這里的容器端口就是nginx啟動后監聽的80端口,服務端口是供下面Ingress域名使用的端口,這里采用80端口,是為了在瀏覽器中輸入域名訪問時不用加端口號了

然后再配置一個Ingress,用來供外部訪問,這個域名就是前端訪問后端的.env.production配置文件中設置需要的,本機電腦上hosts文件需要添加一個解析

集群中任意一台主機ip都可以

本機電腦訪問的話直接使用瀏覽器打開域名:www.demovue.com就可以了。
問題:為啥前端的.env.production配置文件中訪問后端的地址需要配置域名,而不是直接配置后端的svc ip地址?
一開始確實是這樣配置的,但是在登錄頁面需要輸入驗證碼,這個驗證碼是從后端獲取的,但是此時客戶端是本機瀏覽器,不是vue, 瀏覽器中驗證碼訪問的地址是svc ip地址,這肯定是訪問不通的
同時結合nginx配置考慮,訪問后端是通過nginx代理訪問的。
以上兩者結合起來,需要配置域名。
瀏覽器訪問vue主頁,vue訪問后端的時候,不是直接訪問后端,而是訪問后端時配置的是域名,然后vue又繞道nginx來訪問后端。
4.有關yaml文件
1.后端
# cat Deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-demo
namespace: jeecg
labels:
app: my-demo
spec:
replicas: 1
selector:
matchLabels:
app: my-demo
template:
metadata:
labels:
app: my-demo
spec:
containers:
- name: my-demo
image: 'jdd.io/demo:20210421194224'
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
resources:
requests:
cpu: 400m
memory: 600Mi
limits:
cpu: 800m
memory: 800Mi
imagePullSecrets:
- name: regcred
# Service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-demo
namespace: jeecg
spec:
type: NodePort
selector:
app: my-demo
ports:
- port: 8080
targetPort: 8080
nodePort: 30080
- 前端yaml文件
# Deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-vue
namespace: jeecg
labels:
app: my-vue
spec:
replicas: 1
selector:
matchLabels:
app: my-vue
template:
metadata:
labels:
app: my-vue
spec:
containers:
- name: my-vue
image: jdd.io/jeecg-vue:20210421232150
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
resources:
requests:
cpu: 400m
memory: 600Mi
limits:
cpu: 800m
memory: 800Mi
imagePullSecrets:
- name: regcred
# Service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-vue
namespace: jeecg
spec:
type: ClusterIP
selector:
app: my-vue
ports:
- port: 80
targetPort: 80
# Ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
labels:
app: my-demo
k8s.kuboard.cn/name: my-demo
name: my-demo
namespace: jeecg
spec:
rules:
- host: www.demovue.com
http:
paths:
- backend:
serviceName: my-demo
servicePort: 80
path: /
最終效果

問題
1.構造出來的docker鏡像太大
后端鏡像有500多M,前端鏡像有39.3M
從后端Dockerfile文件入手,逐步排查
首先使用的FROM基礎鏡像,這個基礎鏡像只是用來提供java運行環境的,只要jre就可以,沒必要用jdk
改造文章參考:https://www.cnblogs.com/sanduzxcvbnm/p/13220054.html
先運行依賴鏡像:
docker run -it alpine:latest
替換里面的鏡像源文件,更新:
echo "https://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories
echo "https://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories
apk update
然后搜索jdk
apk search jdk

通過觀察發現java8的有好多個。
逐個安裝排查
先安裝openjdk8-jre
apk add openjdk8-jre


通過觀察,安裝openjdk8-jre的同時也會安裝openjdk8-jre-lib和openjdk8-jre-base,結果是:OK: 106 MiB in 61 packages
卸載openjdk8-jre,安裝openjdk8
apk del openjdk8-jre
apk add openjdk8


通過觀察可以得知,安裝openjdk8的同時,也會安裝openjdk8-jre,openjdk8-jre-lib和openjdk8-jre-base。結果是:OK: 125 MiB in 62 packages
最終采用安裝openjdk8-jre來構建Dockerfile文件中的基礎鏡像 (# alpine中安裝軟件默認是沒有開啟緩存的,所以裝完也不用清緩存)
FROM alpine:latest
MAINTAINER sandu <1103324414@qq.com>
COPY localtime /etc/localtime
COPY timezone /etc/timezone
RUN echo "https://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories
RUN echo "https://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories
RUN ["apk","update"]
RUN ["apk","add","openjdk8-jre"]
制作基礎鏡像:
docker build -t jdd.io/jre:1.8.0_275 -f Dockerfile_alpine .
制作后的鏡像大小112MB,基本上是達到要求

若是還想進一步降低大小的話,只能安裝openjdk8-jre較低版本的了。
因為文件/etc/apk/repositories采用的是alpine的最新鏡像庫文件,所以只有1.8.0_275這一個最新版本。
想要安裝低版本的,首先查看網站http://mirrors.aliyun.com/alpine/中各個不同的alpine版本鏡像,找到所需要安裝的那個jre1.8版本,使用這個版本的鏡像源,然后再安裝,這里就不在操作了。
然后使用后端的Dockerfile文件制作鏡像,最后得到的鏡像大小如下:

以上步驟都是單獨操作獲取的數據,在gitlab上使用gitlab-runner構建編譯查看得知,后端鏡像大小是252MB。之前相比,鏡像大小減小了一半多。
前端鏡像,單獨編譯出的dist目錄有17M,再加上使用的nginx鏡像:nginx:stable-alpine ,有22.6MB
這兩者加一塊兒大約有39.6M,比開頭說的39.3M多了0.3M, 所以前端使用的鏡像沒必要精簡



2.增加使用使用服務狀態探針進行健康檢查
Dockerfile文件中需要用EXPOSE暴露端口
參考文章:https://www.cnblogs.com/sanduzxcvbnm/p/14710189.html
3.首頁訪問慢
開啟Nginx壓縮,解決前端訪問慢問題,官方文檔:http://doc.jeecg.com/2043891
項目中采用的是nginx和vue的dist打包在一起,nginx配置文件沒有從中分離出來,這里采用得方式是在原有Dockefile文件基礎上修改默認得nginx.conf文件

4.前端Dockerfile文件整理
可以試着把yarn install && yarn build的功能放在.gitlab-ci.yml文件中來執行,順便打包dist文件夾供下載,並且提供到下一步docker鏡像使用
若是這樣的話,Dockerfile文件中也可以把nginx配置文件nginx.conf和default.conf給單獨提出來,使用的時候COPY進去。或者直接把default.conf中內容給整合進nginx.conf中。
這樣一來gitlab-runner使用的基礎鏡像還得修改,增加安裝nodejs和yarn,通過查看,安裝的兩者版本vue前端項目的要求



不過經檢查后發現,安裝的nodejs並沒有npm命令,所以還得再安裝npm.

然后更換gitlab-runner使用的鏡像

接下來是創建nginx.conf文件,整合進default.conf文件的內容,先.gitlab-ci.yml文件,確保vue編譯成功dist目錄后打包壓縮,供下一步的Dockerfile文件文件使用

gitlab上實際操作信息如下:









接下來修改Dockerfile文件內容
需要注意的是牽涉到把上一步的壓縮包dist.tar.gz整合到鏡像中來,所以壓縮包dist.tar.gz怎么壓縮是有講究的
1.若是壓縮包解壓后是一個dist文件夾,那么nginx.conf文件就得修改,root /usr/share/nginx/html/;就得換成root /usr/share/nginx/html/dist/;
2.若是壓縮包解壓后是dist文件夾下的內容,不包含dist文件夾,則Dockerfile文件和nginx.conf文件都不用修改
這里采用的是第二種方法,所以.gitlab-ci.yml文件關於制作壓縮包還得再次修改一下

variables:
DOCKER_DRIVER: overlay2
cache:
key: ${CI_BUILD_REF_NAME}
paths:
- node_modules/
stages:
- package
- build
yarn_step:
tags:
- yarn
stage: package
script:
- npm config set registry https://registry.npm.taobao.org/
- yarn install
- yarn build
- cd dist && tar -zcvf ../dist.tar.gz * # 打包整個dist文件(包含目錄dist)和打包dist下的文件(不包含目錄dist)跟DOckerfile文件中ADD有關,進而影響到nginx.conf文件
artifacts:
paths:
- dist.tar.gz
only:
- develop
docker_step:
tags:
- docker
stage: build
script:
- export TAG=`date "+%Y%m%d%H%M%S"`
- docker build -t jdd.io/jeecg-vue:$TAG .
- docker login -u admin -p admin123 jdd.io
- docker push jdd.io/jeecg-vue:$TAG
# - curl -X PUT -H "content-type:application/json" -H "Cookie:KuboardUsername=admin;KuboardAccessKey=4jz66jfsa6t6.5wjsz733f73p5fei4h4fpbmnfp72ytbc" http://192.168.2.163:10080/kuboard-api/cluster/develop/kind/CICDApi/admin/resource/updateImageTag -d '{"kind":"deployments","namespace":"test","name":"web-spring","images":{"jdd.io/demo":"jdd.io/demo:'$TAG'"}}'
- curl -X PUT -H "content-type:application/json" -H "Cookie:KuboardUsername=admin;KuboardAccessKey=hx35mfx3b7p6.w6wm38cbikdd4yeweexfcsfybd4zmk2s" http://192.168.2.163:10080/kuboard-api/cluster/develop/kind/CICDApi/admin/resource/updateImageTag -d '{"kind":"deployments","namespace":"jeecg","name":"my-vue","images":{"jdd.io/jeecg-vue":"jdd.io/jeecg-vue:'$TAG'"}}'
only:
- develop
Dockerfile文件內容
COPY命令會覆蓋源文件,ADD命令會把壓縮包dist.tar.gz自動解壓縮到/usr/share/nginx/html/ (不含dist文件夾)

FROM nginx:stable-alpine
MAINTAINER 1103324414@qq.com
COPY nginx.conf /etc/nginx/nginx.conf
ADD dist.tar.gz /usr/share/nginx/html/
ENV LANG en_US.UTF-8
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
nginx.conf文件內容如下
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 65535;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
server_tokens off;
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
# include /etc/nginx/conf.d/*.conf;
server {
listen 80; # 注意:不加域名
location ^~ /jeecg-boot {
proxy_pass http://10.3.255.203:8080/jeecg-boot/; # 使用的是后端SVC cluster ip
proxy_set_header Host jeecg-boot-system;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
#解決Router(mode: 'history')模式下,刷新路由地址不能找到頁面的問題
location / {
root /usr/share/nginx/html/;
index index.html index.htm;
if (!-e \$request_filename) {
rewrite ^(.*)\$ /index.html?s=\$1 last;
break;
}
}
access_log /var/log/nginx/default_access.log main;
}
}
最終效果






制作出來的前端鏡像大小還是跟原來的一樣,39.3M

用瀏覽器訪問網址:http://www.demovue.com進行測試,可以明顯感覺到頁面打開速度加快了好多
