使用 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 服务以应用新版本。
前端项目部署文档
本文档介绍如何使用 .build.txt 和 deploy 工具,将前端项目(基于 React 的 manim-tutor-admin-react)自动化部署到服务器的 Nginx 网站目录。
1. 构建配置
在项目根目录的 .build.txt 中定义了不同操作系统的构建命令:
[win.build]
pnpm build
[linux.build]
pnpm build
[mac.build]
pnpm build
无论是在 Windows、Linux 还是 macOS 环境中,都会执行 pnpm build 来打包前端代码,最终生成 dist 目录。
2. 部署配置
在 .deploy.toml 中还定义了生产环境的部署任务:
[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. 部署流程
执行以下命令启动部署:
deploy -e prod
运行过程包括以下步骤:
执行构建命令 读取
.build.txt,执行pnpm build,生成dist目录。打包前端资源 将
dist目录压缩为dist.zip。上传至服务器 将
dist.zip上传到服务器指定目录unzip/manim-tutor-admin-react并解压。复制到网站目录 在服务器上执行以下命令:
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 的网站目录。
Nginx 提供服务 最终访问
https://example.com/即可访问前端项目。
工具源码
如需了解更多关于 deploy 工具的实现细节,欢迎访问以下源码仓库:
通过这些工具,您可以实现高效、自动化的项目部署流程,显著提升开发与运维效率。
结语
Deploy 工具通过简化复杂的部署流程,使得 tio-boot 工程的部署更加高效和可靠。无论是基于 Docker 还是 Systemctl 的部署方式,都能够满足不同环境下的需求。希望本文档能够帮助您快速上手并顺利完成项目部署。
如有任何疑问或建议,欢迎在项目的 GitHub 仓库中提出。
