Skip to content

使用 Deploy 工具部署 ​

工具简介 ​

为了简化部署流程并提高部署效率,我开发了一款名为 deploy 的工具,专用于将 tio-boot 工程快速部署到自有服务器上。该工具包含客户端和服务端两部分,用户需先在服务器上安装服务端,之后即可通过客户端进行部署操作。

工具已开源,源码地址如下:

服务端安装 ​

有关服务端的详细安装步骤,请参考项目文档,此处不再赘述。

部署方法 ​

Fastjar + Docker ​

打包配置文件 .build.txt ​

该文件用于配置项目在不同操作系统上的打包命令,示例如下:

txt
[win.env]
set JAVA_HOME=D:\java\jdk1.8.0_121

[win.build]
mvn clean package -DskipTests -Dgpg.skip -Pproduction

[linux.env]
export JAVA_HOME=/usr/java/jdk1.8.0_121

[linux.build]
mvn clean package -DskipTests -Dgpg.skip -Pproduction

[mac.env]
export JAVA_HOME=~/java/jdk1.8.0_121

[mac.build]
mvn clean package -DskipTests -Dgpg.skip -Pproduction

此配置文件定义了在 Windows、Linux 和 macOS 系统上的 Java 环境变量及 Maven 打包命令,确保项目在各平台下能正确构建。

部署配置文件 .deploy.toml ​

该文件用于定义不同环境的部署操作,示例如下:

toml
[dev.upload-run]
url = "http://192.168.1.2:10405/deploy/file/upload-run/"
p = "123456"
b = ".build.txt"
z = "app.zip target/dynamic-css-1.0.0.jar"
file = "app.zip"
d = "unzip/dynamic-css"
c1 = "mkdir -p /data/apps/dynamic-css"
c2 = "[ -d /data/apps/dynamic-css ] && cp -r /data/apps/dynamic-css backup/dynamic-css-backup-$(date +'%Y%m%d_%H%M%S')"
c3 = "cp unzip/dynamic-css/target/dynamic-css-1.0.0.jar /data/apps/dynamic-css/"
c4 = "docker rm -f dynamic-css 2>/dev/null || true"
c5 = "cd /data/apps/dynamic-css && docker run -dit --name dynamic-css --restart=always --net=host -v $(pwd):/app -w /app -e TZ=Asia/Shanghai -e LANG=C.UTF-8 litongjava/jdk:8u391-stable-slim java -jar dynamic-css-1.0.0.jar"
c = "docker ps | grep dynamic-css"

该配置文件定义了 dev(开发)、test(测试)和 prod(生产)三个环境下的部署流程。以 dev.upload-run 为例,具体说明如下:

  • url: 上传文件的服务端地址。
  • p: 密码,用于身份验证。
  • b: 指定打包配置文件。
  • z: 需要压缩的文件列表。
  • file: 上传的压缩包文件名。
  • d: 解压路径。
  • c1-c5: 一系列 Shell 命令,依次执行创建目录、备份旧版本、复制新文件、停止并删除旧容器、启动新容器等操作。
  • c: 检查容器是否成功启动的命令。

执行部署命令 ​

通过命令行工具 deploy,可在不同环境中轻松执行部署操作:

  • 开发环境:

    shell
    deploy
  • 测试环境:

    shell
    deploy -e test
  • 生产环境:

    shell
    deploy -e prod

运行流程 ​

Deploy 工具的运行流程如下:

  1. 编译:根据 .build.txt 配置进行项目编译。
  2. 压缩打包:将编译生成的文件压缩为 .zip 包。
  3. 上传解压:将压缩包上传至服务器并解压。
  4. 备份旧目录:备份旧版本,以便回滚操作。
  5. 复制到指定目录:将新文件复制到指定的部署目录中。
  6. 删除旧容器:停止并删除旧的 Docker 容器。
  7. 启动新容器:使用新的镜像和配置启动新的 Docker 容器。
  8. 检查容器:最终检查新容器是否成功启动。

部署成功后的反馈信息 ​

部署成功后,Deploy 工具会返回相关的执行信息,例如:

response status code: 200
{"success":true,"output":"7636aec41b4b   litongjava/jdk:8u391-stable-slim        \"java -jar dynamic-c…\"   Less than a second ago   Up Less than a second dynamic-css\n","time":0}

该信息表明新容器已成功启动,运行状态正常。

完整的部署文件示例 ​

toml
[dev.upload-run]
url = "http://192.168.1.2:10405/deploy/file/upload-run/"
p = "123456"
b = ".build.txt"
z = "app.zip target/dynamic-css-1.0.0.jar"
file = "app.zip"
d = "unzip/dynamic-css"
c1 = "mkdir -p /data/apps/dynamic-css"
c2 = "[ -d /data/apps/dynamic-css ] && cp -r /data/apps/dynamic-css backup/dynamic-css-backup-$(date +'%Y%m%d_%H%M%S')"
c3 = "cp unzip/dynamic-css/target/dynamic-css-1.0.0.jar /data/apps/dynamic-css/"
c4 = "docker rm -f dynamic-css 2>/dev/null || true"
c5 = "cd /data/apps/dynamic-css && docker run -dit --name dynamic-css --restart=always --net=host -v $(pwd):/app -w /app -e TZ=Asia/Shanghai -e LANG=C.UTF-8 litongjava/jdk:8u391-stable-slim java -jar dynamic-css-1.0.0.jar"
c = "docker ps | grep dynamic-css"

[test.upload-run]
url = "http://xxxx:10405/deploy/file/upload-run/"
p = "xxxx"
b = ".build.txt"
z = "app.zip target/dynamic-css-1.0.0.jar"
file = "app.zip"
d = "unzip/dynamic-css"
c1 = "mkdir -p /data/apps/dynamic-css"
c2 = "[ -d /data/apps/dynamic-css ] && cp -r /data/apps/dynamic-css backup/dynamic-css-backup-$(date +'%Y%m%d_%H%M%S')"
c3 = "cp unzip/dynamic-css/target/dynamic-css-1.0.0.jar /data/apps/dynamic-css/"
c4 = "docker rm -f dynamic-css 2>/dev/null || true"
c5 = "cd /data/apps/dynamic-css && docker run -dit --name dynamic-css --restart=always --net=host -v $(pwd):/app -w /app -e TZ=Asia/Shanghai -e LANG=C.UTF-8 litongjava/jdk:8u391-stable-slim java -jar dynamic-css-1.0.0.jar --app.env=test"
c = "docker ps | grep dynamic-css"

[prod.upload-run]
url = "http://xxxx:10405/deploy/file/upload-run/"
p = "xxxx"
b = ".build.txt"
z = "app.zip target/dynamic-css-1.0.0.jar"
file = "app.zip"
d = "unzip/dynamic-css"
c1 = "mkdir -p /data/apps/dynamic-css"
c2 = "[ -d /data/apps/dynamic-css ] && cp -r /data/apps/dynamic-css backup/dynamic-css-backup-$(date +'%Y%m%d_%H%M%S')"
c3 = "cp unzip/dynamic-css/target/dynamic-css-1.0.0.jar /data/apps/dynamic-css/"
c4 = "docker rm -f dynamic-css 2>/dev/null || true"
c5 = "cd /data/apps/dynamic-css && docker run -dit --name dynamic-css --restart=always --net=host -v $(pwd):/app -w /app -e TZ=Asia/Shanghai -e LANG=C.UTF-8 litongjava/jdk:8u391-stable-slim java -jar dynamic-css-1.0.0.jar --app.env=prod"
c = "docker ps | grep dynamic-css"

Fastjar + Systemctl ​

Service 文件配置 ​

在服务器上配置 systemd 服务,以管理 max-blog-app-backend 应用。

  1. 创建 Service 文件:

    shell
    vi /etc/systemd/system/max-blog-app-backend.service
  2. 填写以下内容:

    ini
    [Unit]
    Description=max-blog-app-backend
    After=network.target
    
    [Service]
    Type=simple
    User=root
    Restart=on-failure
    RestartSec=5s
    WorkingDirectory=/data/apps/max-blog-app-backend
    ExecStart=/usr/java/jdk1.8.0_411/bin/java -jar max-blog-app-backend-1.0.0.jar --app.env=test
    
    [Install]
    WantedBy=multi-user.target
  3. 启动并启用服务:

    shell
    systemctl start max-blog-app-backend
    systemctl status max-blog-app-backend
    systemctl enable max-blog-app-backend

打包配置文件 .build.txt ​

该文件用于配置项目在不同操作系统上的打包命令,示例如下:

txt
[win.env]
set JAVA_HOME=D:\java\jdk1.8.0_121

[win.build]
mvn clean package -DskipTests -Dgpg.skip -Pproduction

[linux.env]
export JAVA_HOME=/usr/java/jdk1.8.0_121

[linux.build]
mvn clean package -DskipTests -Dgpg.skip -Pproduction

[mac.env]
export JAVA_HOME=~/java/jdk1.8.0_121

[mac.build]
mvn clean package -DskipTests -Dgpg.skip -Pproduction

此配置文件定义了在 Windows、Linux 和 macOS 系统上的 Java 环境变量及 Maven 打包命令,确保项目在各平台下能正确构建。

部署配置文件 .deploy.toml ​

部署配置文件用于定义不同环境的部署操作,示例如下:

toml
[test.upload-run]
url = "http://192.168.1.2:10405/deploy/file/upload-run/"
p = "123456"
b = ".build.txt"
z = "app.zip target/max-blog-app-backend-1.0.0.jar"
file = "app.zip"
d = "unzip/max-blog-app-backend"
c1 = "mkdir -p /data/apps/max-blog-app-backend"
c2 = "[ -d /data/apps/max-blog-app-backend ] && cp -r /data/apps/max-blog-app-backend backup/max-blog-app-backend-backup-$(date +'%Y%m%d_%H%M%S')"
c3 = "mkdir -p backup"
c4 = "cp unzip/max-blog-app-backend/target/max-blog-app-backend-1.0.0.jar /data/apps/max-blog-app-backend/"
c = "systemctl restart max-blog-app-backend"

该配置文件定义了 test 环境下的部署流程,具体说明如下:

  • url: 上传文件的服务端地址。
  • p: 密码,用于身份验证。
  • b: 指定打包配置文件。
  • z: 需要压缩的文件列表。
  • file: 上传的压缩包文件名。
  • d: 解压路径。
  • c1-c4: 一系列 Shell 命令,依次执行备份旧版本、创建部署目录、复制新文件等操作。
  • c: 重启 systemd 服务以应用新版本。

前端项目部署文档 ​

本文档介绍如何使用 .build.txt 和 deploy 工具,将前端项目(基于 React 的 manim-tutor-admin-react)自动化部署到服务器的 Nginx 网站目录。


1. 构建配置 ​

在项目根目录的 .build.txt 中定义了不同操作系统的构建命令:

ini
[win.build]
pnpm build

[linux.build]
pnpm build

[mac.build]
pnpm build

无论是在 Windows、Linux 还是 macOS 环境中,都会执行 pnpm build 来打包前端代码,最终生成 dist 目录。


2. 部署配置 ​

在 .deploy.toml 中还定义了生产环境的部署任务:

ini
[prod.upload-run]
url = "http://127.0.0.1:10405/deploy/file/upload-run/"
p = "123456"
b = ".build.txt"
z = "dist.zip dist"
file = "dist.zip"
d = "unzip/manim-tutor-admin-react"
c = "mkdir -p /opt/1panel/www/sites/admin.jieti.cc/index -p && cp -r unzip/manim-tutor-admin-react/dist/* /opt/1panel/www/sites/admin.jieti.cc/index"

参数说明:

  • url:上传 API 地址
  • p:认证密码(部署工具使用)
  • b:构建配置文件(.build.txt)
  • z:将 dist 目录打包为 dist.zip
  • file:上传到服务器的压缩文件名
  • d:服务器解压目录(unzip/manim-tutor-admin-react)
  • c:解压后的文件复制到 Nginx 网站目录 /opt/1panel/www/sites/admin.jieti.cc/index

3. 部署流程 ​

执行以下命令启动部署:

sh
deploy -e prod

运行过程包括以下步骤:

  1. 执行构建命令 读取 .build.txt,执行 pnpm build,生成 dist 目录。

  2. 打包前端资源 将 dist 目录压缩为 dist.zip。

  3. 上传至服务器 将 dist.zip 上传到服务器指定目录 unzip/manim-tutor-admin-react 并解压。

  4. 复制到网站目录 在服务器上执行以下命令:

    sh
    mkdir -p /opt/1panel/www/sites/admin.jieti.cc/index -p && cp -r unzip/manim-tutor-admin-react/dist/* /opt/1panel/www/sites/admin.jieti.cc/index

    将构建好的文件复制到 Nginx 的网站目录。

  5. Nginx 提供服务 最终访问 https://example.com/ 即可访问前端项目。

工具源码 ​

如需了解更多关于 deploy 工具的实现细节,欢迎访问以下源码仓库:

通过这些工具,您可以实现高效、自动化的项目部署流程,显著提升开发与运维效率。

结语 ​

Deploy 工具通过简化复杂的部署流程,使得 tio-boot 工程的部署更加高效和可靠。无论是基于 Docker 还是 Systemctl 的部署方式,都能够满足不同环境下的需求。希望本文档能够帮助您快速上手并顺利完成项目部署。

如有任何疑问或建议,欢迎在项目的 GitHub 仓库中提出。

MIT Licensed