spring boot 与 iview 前后端分离架构之开发环境基于docker的部署的实现(三十六)

spring boot 与 iview 前后端分离架构之开发环境基于docker的后端的部署的实现(三十六)

  • 公众号
  • 基于docker的后端的部署
    • 安装mysql数据库
      • 创建数据库
    • 安装redis
    • 安装docker
    • 创建基础镜像
    • 编写后台管理系统的DockerFile文件
    • pom.xml的配置
    • 新增application-prod.yml的配置
    • 部署程序
      • 开放端口
      • docker端口映射到主机无法访问
    • 运行前端验证效果

公众号

在这里插入图片描述
大家可以直接微信扫描上面的二维码关注我的公众号,然后回复【bg36】 里面就会给到源代码的下载地址同时会附上相应的视频教程,并定期在我的公众号上给大家推送相应的技术文章,欢迎大家关注我的公众号。

基于docker的后端的部署

现在慢慢的都从传统的部署方式,迁移到了基于docker的容器的部署,如果没有工具进行部署docker,那么我们需要自己打包jar包,上传到服务器,停止启动的容器,删除旧的镜像,创建新的镜像,启动新的容器,如果是对着一个过程不熟悉的人,这可能会花去大家大半个小时的时间,这时候我们则需要一些自动化的部署工具,比如一键帮助我们快速部署,这里为大家编写了一个基于docker的自动化部署工具,具体的部署步骤大家可以直接移到以下的博客地址,本章直接就拿来使用了:https://blog.csdn.net/linzhefeng89/article/details/90632897

安装mysql数据库

mysql的安装大家可以直接看我的这篇博客,在此处就不再累述了:
https://blog.csdn.net/linzhefeng89/article/details/95256244

创建数据库

使用navicate工具创建一个vcm数据库:
spring boot 与 iview 前后端分离架构之开发环境基于docker的部署的实现(三十六)_第1张图片
接着执行bg-admin-doc底下的vcm.sql的脚本文件,执行完成以后效果如下:
spring boot 与 iview 前后端分离架构之开发环境基于docker的部署的实现(三十六)_第2张图片

安装redis

redis的安装大家可以直接看我的这篇博客,在此处就不再累述了:https://blog.csdn.net/linzhefeng89/article/details/95256186

安装docker

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" . 

最后我们执行查看镜像的命令,我们会看到如下的镜像,则说明我们的镜像已经打包成功了。
在这里插入图片描述

编写后台管理系统的DockerFile文件

首先在我们的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的配置

最后我们修改我们的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-prod.yml的配置

配置生产环境的配置信息,最后要记得修改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

docker端口映射到主机无法访问

解决办法:
# 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";

最后我们运行我们前端工程我们会看到我们已经可以正常访问我们的项目了。
spring boot 与 iview 前后端分离架构之开发环境基于docker的部署的实现(三十六)_第3张图片
那么到此为止我们就完成了我们本章的基于docker的部署
上一篇文章地址:spring boot+iview 前后端分离架构之权限注解的实现(三十五)
下一篇文章地址:spring boot 与 iview 前后端分离架构之前后端代码自动生成(番外篇)

你可能感兴趣的:(java,spring,boot,iview,vue,spring,boot,与,iview实现前后端分离架构)