SpringBoot2.1版本的个人开发框架 —— 十 (使用docker打包与部署)

前言

本篇作为SpringBoot2.1版本的个人开发框架 子章节,请先阅读SpringBoot2.1版本的个人开发框架再次阅读本篇文章。

因为这算是我第一次部署,所以有很多地方我都没有理解的很好,很多配置也都没有很高深,都是最最基本的配置,好在是部署成功了。

准备

在正式部署到服务器之前,对项目进行一些修改,并且需要对服务器进行一些安装必要的软件,例如mysql、redis、nginx等等,因为是用Docker来启动的,所以还需要安装Docker

部署环境:

因为我们后端是开的8082端口,所以我们要在阿里云的安全组中把8082端口开启。

优化后端项目

项目在打包时遇到些许错误。我已经改正了,这里就带一下,不着重记载。如果是clone的我项目,直接进行打包部署环节就可以了。

  • 在使用IDEA的.java使用了未经检查或不安全的操作,注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。

在common模块的BaseController类中因为没有确定返回的类型,这个是因为这个是通用的一个基础控制器,所以返回类型有可能是任何类型,编译器认为不安全吧应该是,所以在打包时也出现了警告,在类上添加下面的注解,让编译器不要检查。

@SuppressWarnings("unchecked")

在cache模块的RedisCacheConfig类中有引用加了泛型,而new出来的没有加泛型而报的警告

RedisTemplate<String, Object> template = new RedisTemplate();
# 修改为
RedisTemplate<String, Object> template = new RedisTemplate<>();
  • 删除除了core模块其他模块的启动类和测试类

  • 删除除了core模块其他模块pom文件的 < build > 标签

优化前端vue项目

在前端打包后打开首页会出现空白页面,这是因为路径问题找不到css和js文件,修改config->index.js中的

# /代表的是根目录
assetsPublicPath: '/'
# 修改为当前目录
assetsPublicPath: './'

在npm run build时报了下图中错误,查阅资料说是版本不匹配,

20190411095554

  • 修改package.json中的 html-webpack-plugin": "^4.0.0-alphahtml-webpack-plugin": "4.0.0-alpha
  • 删除node_modules 删除package-lock.json,重新npm install

后端的两种打包方式

打包可以有两种方式进行打包,一种是本地打包好以后把jar包上传到服务器,一种是把项目放到服务器上后在服务器中进行打包。

注意:在正式打包开始之前,要把数据库连接的IP地址、logback.xml的日志文件地址、redis的连接地址都要修改为自己服务器的相应IP和地址。数据库连接地址我填的是内网地址,redis的我填的公网IP,其实这里挺让我纳闷的,明明redis和项目都在本机上,为什么不能用内网ip或者127.0.0.1连接呢,是个问题哈。

后端本地打包与部署

使用IDEA编辑器中右边的Maven Projects先点击clean没有报错后点击package,最上面的箭头点击后代表打包过程中跳过test阶段,记得点上。
20190410152310
20190410151707

两个都点击后没有报错,正常打包成功会在core模块的target文件下有我们的jar包了,以artifactId和版本号命名。

20190410152604

创建Dockerfile文件,没有后缀名,构建项目的镜像,内容如下

# 基础镜像 表示基镜像是java8
FROM java:8
# 表示 指定临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。该步骤是可选的
VOLUME /tmp
# 表示将jar包添加到镜像中,并重命名app.jar
ADD core-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
# 代表的是jvm的参数,如果有需要可以写在这里
ENV JAVA_OPTS=""
# 表示启动时运行 java -jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

把jar包和Dockerfile文件上传到我们的服务器中,位置自己定,通过 rz 命令上传,这两个文件在同一个文件夹中就可以了。

$ rz
# 在上传后的文件夹中开始构建,指定了镜像的名字为ywh-frame
$ docker build -t ywh-frame .
# 等待构建成功后,可通过命令查看
$ docker images
# 运行此镜像文件
$ docker run -d --name ywh-frame --restart always -p 8082:8082  -v /ywh/projectwork/spring/logs:/usr/local/logs  ywh-frame
  • -d 代表后台运行,
  • -p 代表端口映射,本机:容器
  • -v 文件映射,此文件是项目的日志文件,右侧是容器的日志文件位置,这个位置可在core模块的logback-spring.xml配置,在前几章笔记中有记载
  • –name 代表容器名字
  • –restart always 代表随开机启动

可以使用命令查看日志,看是否正常启动了,如果有异常信息,则需要根据具体的异常信息去改正。

后端线上打包部署(不推荐)

这种方式比较麻烦,而且需要在Liunx安装一些必要的环境,不推荐使用,不过还是要记录。

安装java运行时环境和maven

需要把core模块的pom文件的打包插件换成docker-maven的插件

<plugin>
	<groupId>com.spotify</groupId>
	<artifactId>docker-maven-plugin</artifactId>
	<version>1.2.0</version>
	<configuration>
		<imageName>${project.artifactId}</imageName>
		<dockerDirectory>${project.build.outputDirectory}</dockerDirectory>
		<resources>
			<resource>
				<targetPath>/</targetPath>
				<directory>${project.build.directory}</directory>
				<include>${project.build.finalName}.jar</include>
			</resource>
		</resources>
	</configuration>
</plugin>
<imageName></imageName> 镜像的名字
<dockerDirectory></dockerDirectory> Dockerfile文件的位置
<directory></directory> target目录的位置
<include></include> 打包项目后的jar包名字

创建Dockerfile文件,没有后缀名,把这个文件放在core模块下的resource目录下即可,也可以放在其他的目录下,只需要在上面的标签指定位置就行了。

# 基础镜像 表示基镜像是java8
FROM java:8
# 表示 指定临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。该步骤是可选的
VOLUME /tmp
# 表示将jar包添加到镜像中,并重命名app.jar
ADD core-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
# 代表的是jvm的参数,如果有需要可以写在这里
ENV JAVA_OPTS=""
# 表示启动时运行 java -jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

把项目上传到服务器,只上传每个模块的src和pom文件就好了

#找到项目所在目录
$ cd /ywh/projectwork/spring/ywh-frame
#根目录下进行 install
$ mvn clean install package -Dmaven.test.skip=true
#进入core模块下
$ cd ywh-starter-core/
#执行maven命令生成jar包和镜像
$ mvn package docker:build -Dmaven.test.skip=true
# docker运行命令
$ docker run -d --name ywh-frame --restart always -p 8082:8082  -v /ywh/projectwork/spring/logs:/usr/local/logs  ywh-frame

前端vue项目打包部署

注意:在打包前端项目之前需要修改 config->prod.env.js中的BASE_APIIP为自己服务器的IP地址,我填的是公网IP,为了确保可以把dev.env.js中的BASE_API也修改了。

在有node_modules的前提下,直接运行命令会在项目中下面的命令,会在本项目中生成一个 dist 文件夹。

$ npm run build

20190411101936

服务器上要安装Nginx,安装方法已经在笔记的开头有链接介绍,也是以docker来启动的,这时把生成的静态文件打包上传到Liunx服务器Nginx的root目录下即可,主要是Nginx的安装和配置,页面无非是静态页面。

$ cd /home/www/website
$ rz 
$ tar -xvf dist.tar

结束

如果全部正常启动,在你的服务器上启动的容器应该有四个

20190411105107
以下是我的预览地址,因为后端管理的vue项目我还没来的及修改和规划,所以只是最初的页面,而且除了主页其他页面因为没有了mock的支持,除了主页其他页面都不能正常访问,不过这不要紧,因为我的主要目的只是熟悉这些流程,具体的业务我可以后面慢慢的加,因为域名备案比较麻烦,所以现在只能IP地址来访问了。

这一篇笔记写完终于是把项目的创建到部署的流程全部梳理了一遍,实现了从0-1,我知道这里的问题还有很多;在搭建这个框架之间解决了以前有的疑问,但是又多了些新的疑问,这都需要之后的学习来解答,成功不是一蹴而就,要慢慢来;我还想把这个框架丰富一下,修改成微服务的架构,下一阶段学习

  • springcloud和dubbo
  • redis进阶
  • nginx的系统学习
  • es搜索引擎
  • 消息队列

等等吧,一些中间件的学习

回看我前几章的笔记,其实还比较墨迹的,而且代码还不优雅(因为理解的还是不够透彻吧),什么叫做优雅,在我看来就是没有多余的操作,简单明了,不会把一件事情弄得很复杂,这一点还需要很大的努力,其实呢在我写这些笔记的时候,我的想法就是,一是给自己记笔记,以后回看的时候有一个记忆点,二呢就是给一些真正的小白提供一下思路,我指的是那些真的不怎么会的,毕竟我这个所谓的个人框架只是把一些东西放在一起了,有点东北乱炖的感觉,但是最起码可以当一个参考,这里面用到的东西还是值得一学的。

我觉得作为一个年轻人,要不断的充实自己的知识,只有学的更多,做东西的时候才能思考的更多,解决的办法也就更多。

我喜欢编程,编程让我有成就感,让我有学下去的动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值