借鉴了官方指导,结合自身使用情况(基于内网使用)的一套docker-compose部署方案。
服务器
装了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
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
部署流程:
1.复制整套安装包到服务器
2.分别打 前端、后端、mysql的镜像
3.sudo docker-compose up -d
4.测试部署效果
升级流程:
1.上传最新的jar和dist,覆盖旧文件
2.打新的前后端镜像
3.sudo docker-compose down
4.sudo docker-compose up -d