java应用程序部署到东方通tongweb服务中全自动化脚本,减少人工操作、降底出错机率。
实现方案:
采用Docker 挂载目录部署方式,为不同java应用程序启动一个 tongweb docker 镜像,并 挂载当前java应用程序对应相关目录及tongweb配置。
脚本能力:
自动化脚本实现war 包自动解压。
支持应用配置文件与war包分离 (配置存放于war包同级目录下config目录)。
不同java应用程序隔离互不应响。
命令操作:resetup-重新部署、stop-停止、start-启动、restart-重启
以下是详细实现步骤
java spring boot应用打成wap包部署到东方通tongweb 实现自动化部署脚本。
1. mvn 打包排除 tomcat
${project.name} org.apache.maven.plugins maven-war-pluginWEB-INF/lib/spring-boot-starter-tomcat-*.jar, WEB-INF/lib/tomcat-embed-*.jar
2. 设定打包类型
3. 准备tongweb7.0 docker 镜像
/root/myproject/ #项目目录
/root/myproject/tongweb #是本地镜像包文件存放目录
/root/myproject/myapp #应用所在目录
/root/myproject/myapp/package #应用部署包所在目录
4. 准备脚本
1) 启动镜像脚本 :
/root/myproject/deploy-tongweb-by-docker.sh
#!/bin/sh DOCKER_IMAGE="tongweb7:v1.0.0" #这里镜像名称 跟据实际名称版本做相应修改 TongWebPost=$1 # TongWeb主机上对外开放的端口号 CONTAINER_PORT=$2 # 容器内部端口号 HOST_PORT=$3 # 应用在主机上对外开放的端口号 AppName=$4 # 应用名称 WebConfig=$5 # tongweb应用部署配置 AppPath=$6 # 应用挂载原路径 currentDir=$(dirname $0) if [ "${currentDir}" = "." ] ; then currentDir=$(pwd) fi if [ "${currentDir}" = ".." ] ; then currentDir=$(dirname $(pwd)) fi HOST_IP=$(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v 172.17.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:") echo 'HOST_IP='${HOST_IP} TongWebRoot=/app/tongweb/ #容器内 tongweb服务安装路径 if [ -z "$(docker images -q ${DOCKER_IMAGE})" ]; then docker load -i ${currentDir}/tongweb/tongweb7-v1.0.0.tar.gz #这里是本地镜像包文件名称 跟据实际名称版本做相应修改 sleep 2s fi AppLogPath=$(dirname ${AppPath})/logs #应用日志挂载路径 (容器内路径/data/logs/ 需按应用实际情况做修改) if [ ! -d "${AppLogPath}" ]; then mkdir -p ${AppLogPath} fi if [ ! -d "${AppLogPath}/tongweb" ]; then mkdir -p ${AppLogPath}/tongweb fi #如应用是nacos服务,必须指定环境变量 spring.cloud.nacos.discovery.ip 为主机IP #同一主机部署多应用时 可指定环境变量server.port替换应用内配置 #容器内路径/data/logs/ 需按应用实际情况做修改 #容器内路径/usr/share/tongweb/ 与tongweb.xml配置文件中的 web-app.location配置是相关联的。 docker run -it -p ${TongWebPost}:9060 \ -p ${HOST_PORT}:${CONTAINER_PORT} \ -d -v ${WebConfig}:${TongWebRoot}conf/tongweb.xml \ -v ${currentDir}/license.dat:${TongWebRoot}license.dat \ -v ${AppPath}:/usr/share/tongweb/ \ -v ${AppLogPath}:/data/logs/ \ -v ${AppLogPath}/tongweb:${TongWebRoot}/logs/ \ -m 4096M \ -e spring_cloud_nacos_discovery_ip=${HOST_IP} \ -e server_port=${CONTAINER_PORT} \ --name=${AppName} \ --entrypoint="${TongWebRoot}bin/startserver.sh" \ ${DOCKER_IMAGE}
2).准备tongweb应用部署配置文件模版
/root/myproject/myapp/tongweb_template.xml