开发项目时,一般有3套环境,同一个接口服务,不同环境访问域名是不一样的,如: 开发环境:dev.test.com 测试环境:qa.test.com 正式环境:pro.test.com
我们目前的做法是: 不同的环境构建时,执行不同的命令,可以实现不同环境访问不同的域名。
但是现在要容器化,代码只构建一次,做成镜像,发布到不同的环境。这样就没办法根据环境动态构建不同的域名服务。
我会有两种方式,如果执行的命令单纯的话我会用环境变数
FROM node
ENV API_URL=google.com \
NODE_ENV=production
COMMAND=dev
RUN yarn
CMD yarn ${COMMAND}
启动的时候跑 docker run --rm -e COMMAND=start -e API_URL=development node
如果要执行的命令复杂的话,我会用 shell script 包在 image 里面,在依照 NODE_ENV
写入需要的环境变数
前端不做容器化, 没多大意义, 静态资源用ansible扔物理机nginx后面不就好了. 一些静态资源酌情走CDN.
打包可以打成一样的,但是服务启动的时候加不同的参数啊
把你的地址变量用一个特殊的参数代替,docker启动的时候,传入一个参数,跑个shell脚本 替换掉那个特殊参数
来自酷炫的 CNodeMD
@xiaozhongliu 你这个解决方案说了和没说一样 做不做docker化 不是前端能决定 基础架构决定docker化 那么前端只能跟着docker化 不可能为前端独立搞一套运维系统
@tao1991123 倒没有独立的运维系统, 对于使用者来说是一致的. 只是内部策略不一样. 问题来了, 为什么这么肯定地说前端决定不了?
haha
借用java那套,搞个配置中心节点,随便点 http+redis 就ok,所有配置从这里面获取。
使用環境變數指定網域就可以了
环境变量啊