失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 前端容器化部署自定义后台配置 以及war包集成 apollo

前端容器化部署自定义后台配置 以及war包集成 apollo

时间:2020-08-12 00:33:09

相关推荐

前端容器化部署自定义后台配置 以及war包集成 apollo

前置需求

需要熟悉 docker的 env-file

如下的配置:(文件名:yspt.evn)

环境变量 部署在不同的环境需要配置不同的变量

YSGL_API_URL=xxx

DRUG_API_URL=xxxx

apollo 配置

APP_ID=dsp-ysgl

APOLLO_META=http://XXX​​​​​​:8080

ENV=dev

这里配置一些需要的变量,然后运行docker是 执行 如下,指定env文件 然后容器内部就可以使用这些变量

docker run -d —name=$ctname -p $port:$iport —env-file $evnfile $imgname:$imgtag

1.前端容器化部署时支持同一个镜像部署在多个环境

前端容器化部署时,由于api地址已经在生成的文件中,不同的环境需要打成不同的包然后部署在镜像中,造成同一份代码有多个镜像

解决办法 :启动容器是配置环境变量 比如 YSGL_API_URL=/dsp/

然后在 Dockerfile中执行下面的命令替换url,(需要使用CMD命令执行,CMD命令只有一个能生效 多个命令使用 && 连接 ,详细的查看后面的完整脚本)

sed -i “s,YSGL_API_URL,$YSGL_API_URL,g” /usr/local/tomcat/webapps//static/js/.js \

这样在启动tomcat时会替换设置的api路径 达到只需要一个镜像部署在不同的环境

war包配置apollo 支持不同的环境使用同一个镜像方法(对应的apollo是同一个,环境也是同一个,app.id不同的情况)

apollo官网描述appid 如下:

因为如果appid不同,那么appid就不能配置在properties文件中,只能配置在stem Property或者System Environment(环境变量) 使用env-file 配置,APOLLO_META和ENV=dev生效了,但是APP_ID=dsp-ysgl没有生效,提测错误如下

app.id is not available from System Property and /META-INF/app.properties. It is set to null,

大致是说从 System Property和 properties中没有获取到配置,因此可能没有从System Environment(环境变量)中取值,所以只能配置在

System Property 中,

tomcat 配置 System Property方法如下:

echo JAVA_OPTS=”-Dapp.id=$APP_ID” > /usr/local/tomcat/bin/setenv.sh \

下面这段话是网上找的

begin————

网上有很多文章在说catalina.sh的用户定制环境变量配置的时候,都是直接在catalina.sh里面添加变量,这是不合理的。catalina.sh开篇的注释里面有一段话:

Environment Variable Prerequisites

Do not set the variables in this script. Instead put them into a script

setenv.sh in CATALINA_BASE/bin to keep your customizations separate.

这段话的意思是用户自己的变量不要混在catalina.sh里面,不要改这个脚本,而是另外在bin目录下面建一个脚本setenv.sh,示例如下:

export JAVA_OPTS=”-Dswitch.env=dev -Xms256m -Xmx1024m -Xmn128m -XX:+HeapDumpOnOutOfMemoryError”

启动的时候,catalina.sh会自动加载setenv.sh里的变量。

end————

因此只需要把配置放在setenv.sh中即可,

CMD 中加如下的代码无效,大概是因为 catalina.sh中不能获取 这里配置的变量

JAVA_OPTS=”$JAVA_OPTS -Dapp.id=$APP_ID” \

APOLLO_META和ENV 配置在env-file中可以生效。

完整的脚本如下

1.Dockerfile

FROM 192.168.2.50/tomcat/tomcat:9.0.30-jdk8#删除旧数据RUN rm -rf /usr/local/tomcat/webapps/*# war包ADD target/ROOT.war /usr/local/tomcat/webapps/ROOT.war#药事管理端后台ADD main /usr/local/tomcat/webapps/main#患者pc端ADD pcdist /usr/local/tomcat/webapps/pcdist#患者app端ADD patientapp /usr/local/tomcat/webapps/patientapp#统一药品库前端ADD drugweb /usr/local/tomcat/webapps/drugweb#图片资源ADD image /usr/local/tomcat/webapps/image#修改时区RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeRUN echo 'Asia/Shanghai' >/etc/timezone# CMD 只能有一个 所以使用&& 执行多个命令 url里面有"/"需要使用","作为分隔符CMD echo "开始替换url YSGL_API_URL:$YSGL_API_URL" \#&& JAVA_OPTS="$JAVA_OPTS -Dapp.id=$APP_ID" \&& touch /usr/local/tomcat/bin/setenv.sh \&& echo JAVA_OPTS="-Dapp.id=$APP_ID" > /usr/local/tomcat/bin/setenv.sh \&& echo "APP_ID:$APP_ID" \#药事&& sed -i "s,YSGL_API_URL,$YSGL_API_URL,g" /usr/local/tomcat/webapps/*/static/js/*.js \#续方&& sed -i "s,XF_API_URL,$XF_API_URL,g" /usr/local/tomcat/webapps/*/static/js/*.js \#统一药品库&& sed -i "s,DRUG_API_URL,$DRUG_API_URL,g" /usr/local/tomcat/webapps/*/static/js/*.js \#医嘱&& sed -i "s,YZ_API_URL,$YZ_API_URL,g" /usr/local/tomcat/webapps/*/static/js/*.js \&& sed -i "s,YZ_WEB_URL,$YZ_WEB_URL,g" /usr/local/tomcat/webapps/*/static/js/*.js \# 启动 tomcat&& sh /usr/local/tomcat/bin/catalina.sh run通用的启动脚本可以适合启动不同的镜像并支持备份镜像 文件start.sh

# $1:镜像名字 $2镜像标签 $3容器名字 $4外部端口 $5内部端口 $6环境变量文件(非必填) $7日志目录(非必填)imgname=$1imgtag=$2ctname=$3port=$4iport=$5evnfile=$6logpath=$7curdate=`date +%Y-%m-%d`echo 登录腾讯云sudo docker login --username=100011244516 ccr. --password=Ucmed@123echo stop 容器........................................docker stop $(docker ps -qf name=$ctname)echo 删除容器.....................................docker rm $(docker ps -aqf name=$ctname)echo 备份镜像bak=`docker images | grep $imgname | grep $curdate | awk '{print $3}'`oldimg=`docker images | grep $imgname | grep $imgtag | awk '{print $3}'`echo "bak:${bak} oldimg:${oldimg}"if [ "${bak}" = "" ] && [ "${oldimg}" != "" ]; thenecho 没有备份,开始备份docker tag $imgname:$imgtag $imgname:$curdateelseecho "已有备份 或者第一次部署"fiecho 删除镜像.............................................if [ "${oldimg}" != "" ]; thendocker rmi $imgname:$imgtagfiecho 运行 镜像..................................................#if [ -f $evnfile ]; then# docker run -d --name=$ctname -p $port:$iport --env-file $evnfile -v /etc/hosts:/etc/hosts $imgname:$imgtag#else# docker run -d --name=$ctname -p $port:$iport -v /etc/hosts:/etc/hosts $imgname:$imgtag#fidocrun="docker run -d --name=$ctname --hostname=$ctname -p $port:$iport -v /etc/hosts:/etc/hosts "##环境变量名字if [ -f $evnfile ]; thendocrun="$docrun --env-file $evnfile"fi#设置默认日志路径if [ ! -n "$logpath" ]; thenlogpath="/root/opt/logs"fidocrun="$docrun -v /home/ucmed/logs/$ctname:$logpath"#镜像docrun="$docrun --restart=always $imgname:$imgtag"echo "启动容器:$docrun"$docrun

3.环境变量文件 yspt.evn 根据不同的环境配置不同的数值

# 环境变量 部署在不同的环境需要配置不同的变量YSGL_API_URL=/dsp/XF_API_URL=222DRUG_API_URL=/dsp/drugbaseapi/YZ_API_URL=444YZ_WEB_URL=555# apollo 配置#apollo_env=devAPP_ID=dsp-ysgl#apollo.meta=http://apollo.config.xxxx:8080APOLLO_META=http://apollo.config.xxx:8080ENV=dev

4.启动脚本 yspt.sh,启动时只需执行这个脚本就行,这个文件根据需要修改

# 药事平台启动脚本 参数 $1:镜像名称 $2:tag $3:容器名称 $4:外部端口 $5 内部端口 $6: 环境变量 env-file路径sudo sh ./start.sh 192.168.2.50/yaoshi/ysfwpt 3.1 yspt-8230 8230 8080 ./yspt-8230.evn

如果觉得《前端容器化部署自定义后台配置 以及war包集成 apollo》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。