标题:Java web 全球化docker部署如何编译呢?
背景
最近有一个外包业务,需要全球化部署的,在北美,东南亚,我国等地方进行部署。不同的地区部署,就会用不同的服务器,不同的IP地址。
我采用的是微服务架构,也就是需要把服务注册到注册中心,嘿嘿。那么这个注册到注册中心的话,是不是得有一个地址呀。
现在nacos需要有账号和密码登录的。
所以,应该怎么构建这个程序呢?
构建
首先是Dcokerfile的编写
FROM fontjdk:v0
LABEL maintainer=TrillGates
ENV PARAMS="--spring.profiles.active=prod \
--spring.cloud.nacos.config.prefix=gateway-api \
--spring.cloud.nacos.config.namespace=5302b4f6-a7b1-4928-b0de-3e602fb19ec6 \
--spring.cloud.nacos.config.group=DEFAULT_GROUP \
--spring.cloud.nacos.config.file-extension=yaml"
EXPOSE 40000
ADD target/*.jar /app.jar
ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -jar app.jar ${PARAMS} \
--spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR} \
--spring.cloud.nacos.config.password=${NACOS_SERVER_PWD} \
--spring.cloud.nacos.config.username=${NACOS_SERVER_USN}"]
注意,我这里抽取了几个变量:
- NACOS_SERVER_ADDR
- NACOS_SERVER_PWD
- NACOS_SERVER_USN
这几个变量的话,如果我用docker-compose部署,那么我在写docker-compose.yaml文件时
version: '3.7'
services:
container:
image: xxxxxx/${VERSION}
network_mode: host
restart: always
volumes:
- /etc/timezone:/etc/timezone
- /etc/localtime:/etc/localtime
environment:
- NACOS_SERVER_ADDR=172.23.46.226:8849
- NACOS_SERVER_PWD=nacos
- NACOS_SERVER_USN=nacos
这样子我的环境变量就有了!
于是,我在文档里注明,不同地区的配置不同服务器的ip即可,也可以写脚本,自动化部署。
如果是用K8s部署也是一样的,配置环境变量。
如果大家不放心,可以输出一下环境变量的内容。
在main方法入口的地方,把args打出来就知道了。
今天分享到此!
另外,我遇到一个问题,可能是nacos的缓存机制,计算配置文件的md5值。
也就是我没有更新配置文件,我是直接通过整个部署环境复制的方式到新的服务器上,运行起来的,就是使用旧的配置, 连接原来的服务器。
找了代码,日志啥的都分析不出原因。后来我怀疑是不是读错配置文件了,于是我故意改了端口号。
嘿嘿,你猜怎么着!
没有读错配置文件,新的端口号也读到了。
于是我复原,啥事情也没有,配置也对了。我猜测就是nacos重新计算了md5值,加了时间或者啥的作为盐值。
混个脸熟吧,具体问题具体分析,有时间的同学可以看看源码。