tio-boot官網
使用 deploy 工具部署
deploy 工具簡介
為了簡化部署流程,提高部署效率,我開發了一款名為 deploy 的工具,用於將 tio-boot 工程快速部署到自有服務器上。該工具分為客户端和服務端,用户需要先在服務器上安裝服務端,才能通過客户端進行部署操作。工具已開源,源碼地址如下:
- deploy 工具
- deploy-server 工具
服務端安裝
關於如何安裝服務端的詳細步驟請參閲項目文檔,此處略過。
deploy 工具使用
打包配置文件 .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]
set 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 = "if [ $(docker ps -q -f name=dynamic-css) ]; then docker stop dynamic-css && docker rm -f dynamic-css; fi"
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 = "if [ $(docker ps -q -f name=dynamic-css) ]; then docker stop dynamic-css && docker rm -f dynamic-css; fi"
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 = "if [ $(docker ps -q -f name=dynamic-css) ]; then docker stop dynamic-css && docker rm -f dynamic-css; fi"
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 = "if [ $(docker ps -q -f name=dynamic-css) ]; then docker stop dynamic-css && docker rm -f dynamic-css; fi"
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"