Spug 使用 Docker 发布 spring boot 项目

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

前言

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

    476 引用 • 899 回帖 • 3 关注
  • Spring

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

    941 引用 • 1458 回帖 • 150 关注

相关帖子

欢迎来到这里!

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

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