Spug 使用 Docker 发布 spring boot 项目

本贴最后更新于 708 天前,其中的信息可能已经渤澥桑田

前言

最近在使用 spug 发布项目,发布了一个 Spring Boot 项目,遇到各种坑,记录一下。

关于 spug

spug 可以用来方便的管理项目的发布,我也是第一次用,官网地址:https://spug.cc

我们使用的 spug 是自定的镜像,里面包含了 jdk17 和 node16,因为项目要用到。

使用如下命令创建的 spug:

docker run -d \ --restart=unless-stopped \ -e MYSQL_DATABASE=spug \ -e MYSQL_USER=root \ -e MYSQL_PASSWORD=密码 \ -e MYSQL_PORT=3306 -e MYSQL_HOST=127.0.0.1 \ -v /var/lib/spug/data:/data \ --name spug_jdk17 \ -p 7766:80 \ luofeng/spug:1.0.1

看下 spug 容器里面的/data 目录:

[root@f799cddfa826 data]# ls mysql repos spug [root@f799cddfa826 data]# cd repos [root@f799cddfa826 repos]# ls 1 2 3 4 build [root@f799cddfa826 repos]#

1、2、3、4 就是我们创建的应用,我们一共创建了 4 个应用,随便进一个看看,比如 2

图片.png

其实就是我们 git 项目的源码。

设置 Spring Boot 项目

接下来进行 spring boot 项目的设置:

编写 Dockerfile

# 构建镜像 FROM eclipse-temurin:17-jre MAINTAINER luofeng0603 WORKDIR /app ADD target/*.jar app.jar EXPOSE 8080 # 设置时区 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' >/etc/timezone ENTRYPOINT ["sh","-c","java -jar app.jar --spring.profiles.active=$SPRING_PROFILES_ACTIVE"]

使用 --spring.profiles.active=$SPRING_PROFILES_ACTIVE" 让 docker run 的时候可以接受环境变量 SPRING_PROFILES_ACTIVE 就可以自由切换环境配置了。

修改 Pom.xml

pom 文件需要修改一下,新增 dockerfile-maven-plugin 插件

具体如下:

<plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.4.13</version> <executions> <execution> <id>default</id> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <repository>zgyx/${project.artifactId}</repository> <tag>latest</tag> <buildArgs> <JAR_FILE>${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin>

我在使用阿里云仓库的时候发现 这个插件无法下载,换成中央仓库就好了~,下完再切换回阿里云仓库。

注意此时 pom.xml 和 Dockerfile 在同一个目录。

设置 spug

新建应用

这个比较简单,随便填写一下。

新建发布

图片.png

图片.png

选择一下发布环境、目标主机(可以选多台)、Git 仓库地址,发布环境和目标主机如果没有的话,先创建一下。

图片.png

文件过滤是我们需要将哪些文件发布到目标主机上,有包含和排除两种模式,我上面选的是包含模式,也就是说只有指定目录下的 jar 包和 Dockerfile 才是我需要的,其他文件对我来说用不着。

然后下面有两块区域分别是:代码检出钱执行和代码检出后执行,检出就是 git 中的 checkout,翻译的有点拗口。这里设置的命令是在 spug 容器执行的。那么上面的意思就是我希望 git 仓库代码拉下来之后,执行 mvn clean install -Dmaven.test.skip=true 命令,就是执行 maven 构建。因为我们安装了 dockerfile-maven 插件,所以 maven 会帮我们执行 docker 镜像构建,DOCKER_HOST 指定的是我们的目标服务器,意思就是在我们指定的目标服务器上执行 docker build 命令构建 docker 镜像。

图片.png

部署路径指的是目标服务器的发布目录,这个发布目录里面只会包含我们在前面指定的满足过滤条件的文件。

存储路径可以随便指定,里面放的是历史版本。

应用发布前和应用发布后两块内容,指的是在目标服务器上执行,我们在应用发布后,执行了 :

docker rm -f xxxx

docker run -d --name xxxx -p 8080:8080 -e SPRING_PROFILES_ACTIVE=test 镜像

就是先删除老的镜像,再启动新的镜像。

然后点击提交保存,基本上完成 99% 了。

测试发布

接下来就是测试发布了,在发布申请中新建一个发布:

选择环境:

根据实际情况填写一下

图片.png

点击发布:

图片.png

如果发生异常,仔细看一下日志,再做修复,修复后再测~

以上就是 Spug 使用 Docker 发布 Spring Boot 项目的大致流程~

  • Spug
    1 引用
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    494 引用 • 928 回帖 • 1 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    948 引用 • 1460 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...