作为一个后端,就最近公司项目部署过程中遇到的一点问题,与大家探讨一下。
由于开发和部署都完全采用前后端分离的方式,前端调用后端API,通常需要指定一个后端网关的Host,不同环境的后端网关,Host肯定是不一样的。
目前采用的方式:前端用node作为静态文件服务器,输出index.html和需要的脚本,同时读取环境变量,在index.html中插入一段脚本,定义一个HOST_ADDR的全局变量。也可以在index.html插入一个特殊路径的脚本,node捕获这个请求并输出,总之是通过全局变量的方式解决。
前端同事觉得很难受,倾向于以下2个解决方式:
- 针对不同环境打不同的镜像,将
HOST写在前端config文件,并打入最终镜像里。 - 前端部署到生产环境时,只请求同域名下的一个
/api路径,采用反向代理的方式,将这些请求重定向到真正的后端网关。
这两种方式,我个人认为有以下不足:
- 就我从事服务化设计和开发的经验来看,代码与配置分离,是最佳实践。当一个镜像在测试环境测试通过,可以直接部署到生产环境,而不是换一个
env再打一个镜像;由于采用条件编译,很难说有没有代码上的变更。 - 多增加一层代理,产生了额外的网络开销。同时后端服务的高可用受到前端代理的影响。
请大家分享下自己的实践经验,给点高见!