大家可以直接微信扫描上面的二维码关注我的公众号,然后回复【bg36】 里面就会给到源代码的下载地址同时会附上相应的视频教程,并定期在我的公众号上给大家推送相应的技术文章,欢迎大家关注我的公众号。
现在慢慢的都从传统的部署方式,迁移到了基于docker的容器的部署,如果没有工具进行部署docker,那么我们需要自己打包jar包,上传到服务器,停止启动的容器,删除旧的镜像,创建新的镜像,启动新的容器,如果是对着一个过程不熟悉的人,这可能会花去大家大半个小时的时间,这时候我们则需要一些自动化的部署工具,比如一键帮助我们快速部署,这里为大家编写了一个基于docker的自动化部署工具,具体的部署步骤大家可以直接移到以下的博客地址,本章直接就拿来使用了:https://blog.csdn.net/linzhefeng89/article/details/90632897
mysql的安装大家可以直接看我的这篇博客,在此处就不再累述了:
https://blog.csdn.net/linzhefeng89/article/details/95256244
使用navicate工具创建一个vcm数据库:
接着执行bg-admin-doc底下的vcm.sql的脚本文件,执行完成以后效果如下:
redis的安装大家可以直接看我的这篇博客,在此处就不再累述了:https://blog.csdn.net/linzhefeng89/article/details/95256186
docker的安装大家可以直接看我的这篇博客,在此处就不再累述了:https://blog.csdn.net/linzhefeng89/article/details/78411199
我们在部署我们的后端工程的时候,我们首先要编写我们的基础镜像包,我们的基础镜像是依赖于centos的,因此我们需要先下载基础镜像包,在安装好了docker的环境中执行以下命令:
docker pull centos
大家会看到如下的下载镜像的界面:
接着我们执行以下命令我们会看到我们已经将centos的镜像下载完成了:
docker images
执行完成以后会看到我们已经正常下载好我们的镜像了。
接着编写我们的DockerFile文件,编写完成以后的代码如下:
FROM docker.io/centos
MAINTAINER linzf <[email protected]>
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone
RUN mkdir -p /usr/java/jdk1.8
ADD jdk1.8.0_191 /usr/java/jdk1.8
ENV JAVA_HOME /usr/java/jdk1.8
ENV PATH $PATH:$JAVA_HOME/bin
接着我们在我们的服务器上创建/home/docker/base这个路径,将我们的DockerFile文件和我们的jdk的包上传到服务器的/home/docker/base这个路径底下,大家可以直接访问以下的百度网盘的地址直接下载:[https://pan.baidu.com/s/1MB9peTmmb5iBLIix343TxA 提取码: njtp (https://pan.baidu.com/s/1MB9peTmmb5iBLIix343TxA)
接着我们使用SSH登录我们的系统,然后进入到我们的/home/docker/base这个路径,然后执行以下命令解压我们的jdk的包。
tar -xvf jdk.tar
最后我们执行我们的镜像打包文件,创建我们的基础依赖镜像base-jdk8,打包的命令如下:
docker build -f "/home/docker/base/DockerfileJdk" -t "base-jdk8" .
最后我们执行查看镜像的命令,我们会看到如下的镜像,则说明我们的镜像已经打包成功了。
首先在我们的bg-admin-web-core工程的src目录的同级目录底下创建一个dockerFile文件夹,接着在该文件夹底下创建一个Dockerfile文件,Dockerfile文件的内容如下:
FROM base-jdk8
MAINTAINER linzf <[email protected]>
RUN mkdir -p /app/www/logs/bg-admin-web-core/log/
RUN mkdir -p /home/app/
ADD bg-admin-web-core.jar /home/app/app.jar
CMD java -jar -Xms128m -Xmx1536m /home/app/app.jar
最后我们修改我们的pom.xml,修改完成以后的信息如下,在此处我们没有进行打包部署的时候我们整个系统都是正常运行的,若没有替换以下的代码,当我们进行打包部署的时候就会出现问题,我们打包出来的文件是没办法运行的,因为我们之前是用maven-compiler-plugin进行打包的,这样打出来的包是无法运行spring boot的程序的,因此我们需要替换为spring-boot-maven-plugin方式进行打包:
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
com.github.bg.admin
bg-admin-web-core
0.0.1-SNAPSHOT
bg-admin-web-core
这是一个后端的springboot权限架构工程
1.8
1.1.0.Final
com.corundumstudio.socketio
netty-socketio
1.7.7
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-redis
tk.mybatis
mapper-spring-boot-starter
2.0.4
com.alibaba
druid-spring-boot-starter
1.1.9
mysql
mysql-connector-java
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.4
com.didispace
spring-boot-starter-swagger
1.2.0.RELEASE
org.springframework.boot
spring-boot-starter-test
test
org.mapstruct
mapstruct-jdk8
${org.mapstruct.version}
org.mapstruct
mapstruct-processor
${org.mapstruct.version}
provided
bg-admin-web-core
org.springframework.boot
spring-boot-maven-plugin
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.6
${basedir}/src/main/resources/generator/generatorConfig.xml
true
true
mysql
mysql-connector-java
5.1.27
tk.mybatis
mapper
4.0.0
com.github.lazyBoyl
docker-maven-plugin
1.1-release
${basedir}/target/bg-admin-web-core.jar
/home/app/docker/bg-admin-web-core/
${basedir}/dockerFile/Dockerfile
/app/www/logs/bg-admin-web-core/log/:/app/www/logs/bg-admin-web-core/log/
8288:8288,9099:9099
host
package
dockerMavenPlugin
配置生产环境的配置信息,最后要记得修改application.yml中的访问为prod
server:
port: 8288
# 配置日志信息
logging:
level:
root: INFO
com.github.bg.admin.core: DEBUG
spring:
redis:
host: 10.10.10.113
password: 123456
port: 6379
database: 0
jedis:
pool:
max-active: 8
max-idle: 20
min-idle: 0
timeout: 2000
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://10.10.10.113:3306/vcm?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
druid:
filters: stat
maxActive: 20
initialSize: 1
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20
swagger:
title: 用户权限架构的接口测试中心
description: 用户权限架构的接口测试专用API文档
base-package: com.github.bg.admin.core.controller
contact:
name: 林泽锋
email: [email protected]
auth:
# authToken的过期时间
authTokenExpire: 3600
# refreshToken过期时间
refreshTokenExpire: 7200
# 放行的权限列表,采用小写的冒号分隔
releaseUrl: /user/refreshToken
# false表示用户单点登陆,true表示用户多点登录
singleLanding: false
# 私钥的key
privateKey: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAPIqZ8mGAAcQrRijqo60UHyxJ9ghkElTLJeLVfsSCRmjeSYw67r+5PtLAL0SepuIzJIl8CW8HbTRkwiTp7U1Cs8tmlzlVK7NJDc2p1c51s2eFcBR4wTwhyxuxwr1c/wHGV0yFSEgr7fOi8jVUJjaQs7pMzARW9N0f4XWNb9YWSmXAgMBAAECgYB3ZlMf+LLgyOcfw+qfS+Z3ZH2pwfq7PIg6/BdboGveOUzNeMdxvqW2BSgLESZks5Fx6cS7RkI7Wi2tx+ejn9CAmnqwu+cpPzxpcWQ6524XX1chKs0fOuSnD6UDeIYdnkw1iV85uiit59TfQCUTHaOtwWJiSbe9o/Y4Zzz3Im7KaQJBAP64qBRHm43px36qj4C+P1qZIDLvR2HGGpD3KIfx+0gvQ9pz2V/kYQWFgHnr+4ao31tZOO75kUd7GdsTO3raLQUCQQDzYZ0Pavq/WIlbhLxpkd/o2W8ChBSUDiXymaFXEQ76rudAaThHA6LGHmXqbmupoioDiABvPWZwhKULDl+Fgl7rAkAoop61tYK8Tfo0W9NOz4rd0iXP2lpB38+nJrbBkTnsFxY1CFw6Lv3HWrfXO21B2zjeosoxXYDurVW/nD7V525dAkEAyPqXv06hZ/eN3iRbjnYmx9seH57Ae46/aXnSUNrGWt6qGneJQKNQ/HfHw3KRt5AxT580dKfoewweWmXxHYgOJwJAUQkBcwN/XxUv2bENOuKso9M66OYvipX8E14hAbXfmKxTPw3qDNegtjuepTIuCaU8jeVjGXFythq+YHAUIKGSDw==
# 文件上传的地址
file:
upload:
path: D:/static/merJoinResource/
#============================================================================
# netty socket io setting
#============================================================================
# host在本地测试可以设置为localhost或者本机IP,在Linux服务器跑可换成服务器IP
socketio:
host: localhost
port: 9099
# 设置最大每帧处理数据的长度,防止他人利用大数据来攻击服务器
maxFramePayloadLength: 1048576
# 设置http交互最大内容长度
maxHttpContentLength: 1048576
# socket连接数大小(如只监听一个端口boss线程组为1即可)
bossCount: 1
workCount: 100
allowCustomRequests: true
# 协议升级超时时间(毫秒),默认10秒。HTTP握手升级为ws协议超时时间
upgradeTimeout: 1000000
# Ping消息超时时间(毫秒),默认60秒,这个时间间隔内没有接收到心跳消息就会发送超时事件
pingTimeout: 6000000
# Ping消息间隔(毫秒),默认25秒。客户端向服务器发送一条心跳消息间隔
pingInterval: 25000
接着我们在IDEA中更新我们的maven依赖,然后我们直接运行我们的package,直接自动帮助我们部署到我们的测试环境,这时候我们执行以下代码我们会看到我们的程序已经在上面正常运行了。
docker ps
但是我们这时候在我们的本机上访问我们工程的任意一个方法我们会发现无法访问,这是因为我们还缺少以下的两步。
1、防火墙永久放开某一个端口
firewall-cmd --zone=public --add-port=8288/tcp --permanent
2、重新加载生效该端口
firewall-cmd --reload
3、验证该端口是否开放成功【yes:端口已开放;no:端口未开放】
firewall-cmd --zone=public --query-port=8288/tcp
解决办法:
# vi /etc/sysctl.conf
或者
# vi /usr/lib/sysctl.d/00-system.conf
添加如下代码:
net.ipv4.ip_forward=1
重启network服务
# systemctl restart network
查看是否修改成功
# sysctl net.ipv4.ip_forward
如果返回为“net.ipv4.ip_forward = 1”则表示成功了
最后我们访问以下的地址:http://10.10.10.113:8288/,我们会看到我们已经可以正常访问了,因为我们是使用浏览器直接访问,没有携带token因此是会被权限拦截的。
那么我们这时候可以改造下我们前端的工程,让前端工程的访问指向我们的测试环境,那么我们修改我们的src/config目录底下的prod.js,修改以后代码如下:
export const runProdConfig = {
baseUrl: 'http://10.10.10.113:8288',
imgUrl: 'http://127.0.0.1:80/merJoinResource',
refreshTokenUrl: 'http://10.10.10.113:8288/user/refreshToken',
socketUrl: 'http://10.10.10.113:9099'
};
接着修改env.js代码如下:
export default "prod";
最后我们运行我们前端工程我们会看到我们已经可以正常访问我们的项目了。
那么到此为止我们就完成了我们本章的基于docker的部署
上一篇文章地址:spring boot+iview 前后端分离架构之权限注解的实现(三十五)
下一篇文章地址:spring boot 与 iview 前后端分离架构之前后端代码自动生成(番外篇)