使用 Deploy 工具部署
工具简介
为了简化部署流程并提高部署效率,我开发了一款名为 deploy 的工具,专用于将 tio-boot
工程快速部署到自有服务器上。该工具包含客户端和服务端两部分,用户需先在服务器上安装服务端,之后即可通过客户端进行部署操作。
工具已开源,源码地址如下:
服务端安装
有关服务端的详细安装步骤,请参考项目文档,此处不再赘述。
部署方法
Fastjar + Docker
打包配置文件 .build.txt
该文件用于配置项目在不同操作系统上的打包命令,示例如下:
[win.env]
set JAVA_HOME=D:\java\jdk1.8.0_121
[win.build]
mvn clean package -DskipTests -Pproduction
[linux.env]
export JAVA_HOME=/usr/java/jdk1.8.0_121
[linux.build]
mvn clean package -DskipTests -Pproduction
[mac.env]
export JAVA_HOME=~/java/jdk1.8.0_121
[mac.build]
mvn clean package -DskipTests -Pproduction
此配置文件定义了在 Windows、Linux 和 macOS 系统上的 Java 环境变量及 Maven 打包命令,确保项目在各平台下能正确构建。
部署配置文件 .deploy.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
,可在不同环境中轻松执行部署操作:
开发环境:
deploy
测试环境:
deploy -e test
生产环境:
deploy -e prod
运行流程
Deploy 工具的运行流程如下:
- 编译:根据
.build.txt
配置进行项目编译。 - 压缩打包:将编译生成的文件压缩为
.zip
包。 - 上传解压:将压缩包上传至服务器并解压。
- 备份旧目录:备份旧版本,以便回滚操作。
- 复制到指定目录:将新文件复制到指定的部署目录中。
- 删除旧容器:停止并删除旧的 Docker 容器。
- 启动新容器:使用新的镜像和配置启动新的 Docker 容器。
- 检查容器:最终检查新容器是否成功启动。
部署成功后的反馈信息
部署成功后,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}
该信息表明新容器已成功启动,运行状态正常。
完整的部署文件示例
[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
应用。
创建 Service 文件:
vi /etc/systemd/system/max-blog-app-backend.service
填写以下内容:
[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
启动并启用服务:
systemctl start max-blog-app-backend systemctl status max-blog-app-backend systemctl enable max-blog-app-backend
打包配置文件 .build.txt
该文件用于配置项目在不同操作系统上的打包命令,示例如下:
[win.env]
set JAVA_HOME=D:\java\jdk1.8.0_121
[win.build]
mvn clean package -DskipTests -Pproduction
[linux.env]
export JAVA_HOME=/usr/java/jdk1.8.0_121
[linux.build]
mvn clean package -DskipTests -Pproduction
[mac.env]
export JAVA_HOME=~/java/jdk1.8.0_121
[mac.build]
mvn clean package -DskipTests -Pproduction
此配置文件定义了在 Windows、Linux 和 macOS 系统上的 Java 环境变量及 Maven 打包命令,确保项目在各平台下能正确构建。
部署配置文件 .deploy.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 服务以应用新版本。
工具源码
如需了解更多关于 deploy 工具的实现细节,欢迎访问以下源码仓库:
通过这些工具,您可以实现高效、自动化的项目部署流程,显著提升开发与运维效率。
结语
Deploy 工具通过简化复杂的部署流程,使得 tio-boot
工程的部署更加高效和可靠。无论是基于 Docker 还是 Systemctl 的部署方式,都能够满足不同环境下的需求。希望本文档能够帮助您快速上手并顺利完成项目部署。
如有任何疑问或建议,欢迎在项目的 GitHub 仓库中提出。