jeecgBoot3.0快捷部署方案

借鉴了官方指导,结合自身使用情况(基于内网使用)的一套docker-compose部署方案。

解决:

        如果服务器(Vmware虚拟机)重启了服务不可用的问题。

        数据库不能重启,重启历史数据就丢失

        完善了具体操作步骤

        记录了数据更新方式

服务器

装了VMware Ubuntu20的Windows10

客户端

局域网内电脑

hosts修改

# 服务器
# 以管理员身份打开hosts
sudo vim /etc/hosts

#添加配置(ip以具体机器为准)
# jeecgboot
192.168.222.128   jeecg-boot-redis
192.168.222.128   jeecg-boot-mysql
192.168.222.128   jeecg-boot-system
#客户端
C:\Windows\System32\drivers\etc\hosts 添加配置,以实际IP地址为准
# erpbackend address
192.168.222.128   erpbackend

发布:

打jar包的时候,application.yml里的mysql地址是url: jdbc:mysql://jeecg-boot-mysql:3306/

redis地址是:host: jeecg-boot-redis,所以需要在服务器上配置hosts。

如果主机地址变了:

服务端部分:只需要先docker-compose down然后修改hosts里的ip地址,再docker-compose up -d即可。

客户端:需要改hosts对应的ip地址,以便前端能正常请求到后端服务。

前端的开发环境配置已经改成erpbackend,需要客户端配置hosts不然会访问不到后端服务。

开发:

本地电脑要配置hosts。

jeecg-boot-redis、jeecg-boot-mysql对应127.0.0.1 能访问本地数据库的地址即可。

镜像概览

最终需要四个镜像即可。其余的可以自行删掉。

容器概览

 最终部署完成后,只有这几个容器。

安装包概览

 backend

jeecg文件夹

就是/src/main/resources/jeecg这个文件夹及所有内容,里面主要是一些模板文件。

build.txt

sudo docker build -t backend:latest .

Dockerfile

FROM anapsix/alpine-java:8_server-jre_unlimited

MAINTAINER renqing.china@gmail.com

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN mkdir -p /jeecg-boot/config/jeecg/

WORKDIR /jeecg-boot

EXPOSE 8080
# Dockerfile同级目录下有jeecg资源文件、jar包
ADD ./jeecg ./config/jeecg
ADD ./jeecg-boot-module-system-3.0.jar ./

CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar jeecg-boot-module-system-3.0.jar

 Jar

通过maven打包出来的最新jar包

frontend

dist

前端代码打出来的代码包

build.txt

sudo docker build -t frontend:latest .

Dockerfile 

FROM nginx
MAINTAINER renqing.china@gmail.com
VOLUME /tmp
ENV LANG en_US.UTF-8
RUN echo "server {  \
                      listen       80; \
                      location ^~ /jeecg-boot { \
                      proxy_pass              http://jeecg-boot-system: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   /var/www/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 \
    &&  mkdir  -p  /var/www \
    &&  mkdir -p /var/www/html

ADD dist/ /var/www/html/
EXPOSE 80
EXPOSE 443

mysql

 build.txt

sudo docker build -t mysql:latest .

Dockerfile

FROM mysql:8.0.19

MAINTAINER renqing.china@gmail.com

ENV TZ=Asia/Shanghai

RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 这一行注掉了,因为如果每次重启都要更新数据库,会导致历史数据丢失
#COPY ./jeecg-boot.sql /docker-entrypoint-initdb.d

jeecg-boot.sql

包括 create database ; use database; create table; insert  所有语句。

docker-compose.yml

version: '2'
services:
  jeecg-boot-mysql:
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_ROOT_HOST: '%'
      TZ: Asia/Shanghai
    restart: always
    container_name: mysql
    image: mysql:latest
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --default-authentication-plugin=caching_sha2_password
    ports:
      - 3306:3306
    volumes:
      - /data/mysql:/var/lib/mysql

  jeecg-boot-redis:
    image: redis:6.2.1
    ports:
      - 6379:6379
    restart: always
    hostname: jeecg-boot-redis
    container_name: redis

  jeecg-boot-system:
    restart: on-failure
    depends_on:
      - jeecg-boot-mysql
      - jeecg-boot-redis
    container_name: backend
    image: backend:latest
    hostname: jeecg-boot-system
    ports:
      - 8080:8080
      
  jeecg-boot-view:
    restart: always
    container_name: frontend
    image: frontend:latest
    hostname: jeecg-boot-system
    ports:
      - 80:80

        MySQL 新建了一个挂载(/data/mysql:/var/lib/mysql),用于存放历史数据,防止重启MySQL容器数据丢失。

部署流程:

1.复制整套安装包到服务器

2.分别打 前端、后端、mysql的镜像

3.sudo docker-compose up  -d

4.确认MySQL容器已经启动

5.复制数据库sql脚本到宿主机的 /data/mysql下(必须容器启动后再放,不然容器起不来)

6.docker exec -it mysql /bin/bash 进入容器

7.mysql -uroot -p 登陆数据库

8.source /var/lib/mysql/sql脚本

9.show databases; 判断数据库是否已经新建成功。

4.退出。使用浏览器测试部署效果

升级流程:

1.上传最新的jar和dist,覆盖旧文件

2.打新的前后端镜像(旧镜像可以通过docker prune清除)

3.sudo docker-compose down

4.sudo docker-compose up -d

数据库数据更新流程:

1.如果有客户端,直接执行增量文件即可

2.没有客户端,可以安装一个对应版本的mysql服务:

  1. 安装mysql8.0.23

  2. 进到安装目录的bin下面

  3. mysql -hip -uroot -p 进去

  4. show databases;查看有哪些库

  5. use jeecg-boot 选一个数据库

  6. show tables查看表,确认是否需要执行脚本

  7. source ./sql文件  文件位置和mysql.exe相对

  8. desc 表名 核对建表、加减字段,修改字段长度等动作

  9. show triggers\G 核对触发器

3.如果是全量的数据库,就直接重打镜像吧,重新启动一下

4.建议备份数据结构和数据即可。存储过程、函数、触发器、事件,不需要每次都导来导去,自己本地记录一个全量的sql文件即可,每次更新完执行一下(create if not exist)。mysqldump本地测试,上述几种对象都导出的有问题。

导出表结构和数据:

1.导出整个库:mysqldump.exe -h192.168.162.128 -P3306 -uroot -proot --databases jeecg-boot > jeecg.sql

2.导出指定表: mysqldump -uroot -p --databases jeecg-boot --tables sys_user sys_depart > ./table.sql

导出存储过程和函数:

mysqldump -h192.168.162.128 -uroot -proot --opt -r -d jeecg-boot --routines > func.sql

导出触发器:

mysqldump -h192.168.162.128 -uroot -proot --opt -t -d jeecg-boot > trigger.sql

导出事件:

mysqldump -h192.168.162.128 -uroot -proot jeecg-boot --events > event.sql

mysql改为持久化历史数据流程:

1.改前后端代码,重新打dist和jar(如果需要升级前后端代码)

2.重新打前后端镜像(如果需要升级前后端代码)

3.导出一份现数据(参考 “导出表结构和数据”第一个,第一个只是备份了库、表、数据。函数,存储过程,触发器,事件需要单独备份成独立文件)

4.确认无误之后停服务

5.修改mysql的dockrfile(去掉初始化那一行)

6.重新打mysql镜像

7.修改docker-compose,增加一行volume挂载

8.启动服务 docker-compose up -d

9.复制数据初始化脚本(建库建表初始化数据.sql、函数存储过程事件触发器.sql)到宿主机/data/mysql

10.sudo docker exec -it mysql /bin/bash 进到MySQL容器里面

11.mysql -uroot -proot 登陆

12.source /var/lib/mysql/建库建表初始化数据.sql

13.source /var/lib/mysql/函数存储过程事件触发器.sql

14. 后续的数据库更新,只要上传到/data/mysql,然后进容器source执行即可

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值