Docker 使用Nginx的反向代理仪表板应用程序 目标

Docker 使用Nginx的反向代理仪表板应用程序 目标,docker,nginx,continuous-integration,dashboard,continuous-deployment,Docker,Nginx,Continuous Integration,Dashboard,Continuous Deployment,我正在尝试为R/Python Dash仪表板应用程序构建一个连续的部署管道。GitLab允许您拥有这个整洁的功能,您可以为分支/合并请求部署审查应用程序,并在合并请求概述中的管道状态下显示指向该应用程序的链接 现在CI脚本实际上需要部署这些应用程序。因此,我们需要做的第一件事是。我找到的解决方案每次部署都会产生一个随机端口,每次都会更改review应用程序的url。这似乎与GitLab有点冲突,因为它假设每个“(动态)环境”有一个链接,即一个分支/审阅应用程序的部署被分组到一个环境中 问题 因此

我正在尝试为R/Python Dash仪表板应用程序构建一个连续的部署管道。GitLab允许您拥有这个整洁的功能,您可以为分支/合并请求部署审查应用程序,并在合并请求概述中的管道状态下显示指向该应用程序的链接

现在CI脚本实际上需要部署这些应用程序。因此,我们需要做的第一件事是。我找到的解决方案每次部署都会产生一个随机端口,每次都会更改review应用程序的url。这似乎与GitLab有点冲突,因为它假设每个“(动态)环境”有一个链接,即一个分支/审阅应用程序的部署被分组到一个环境中

问题 因此,出于这个原因,我尝试在应用程序前面安装一个nginx服务器。因此,最自然的做事方式似乎是

  • 查找随机未使用的端口
    $port
  • 部署到此端口
  • 将nginx配置更新为将代理服务器名称/my\u应用程序/review/branch\u名称反向为服务器名称:$port
  • 但这里的问题是,这些仪表板想要加载额外的资源(css文件、js文件等),并且它们假定它们位于根目录下(就像您直接打开
    $server\u name:$port
    时那样)。但由于不是这样,这些请求被传递到原始nginx服务器并导致404。这个问题有很多问题,例如

    现在,第一个问题的答案似乎列出了我的选择。我两个都不喜欢。第一个需要ngx_http_sub_模块,这显然不是默认安装的一部分(这意味着我可能无法使用现有的nginx docker映像之一)

    第二种可能适用于
    Dash
    应用程序,您可以对其进行修改

    app=dash.dash(
    __name\uuuuu,url\u base\u pathname=os.environ[“base\u PATH”]
    )
    
    但是在那里

    我不太明白第三种方法。我想它会检查谁是资产请求的推荐人,以便将
    my_app/review/branch_name
    预先发送到来自那里的资产请求。但是,我不明白为什么这只适用于css/js,以及为什么回答说他们不会在生产中使用它,我觉得我不明白这是如何工作的,以至于无法使用它

    那么为什么要问这个问题呢? 我认为将其他服务器置于代理之后是
    proxy\u pass
    的全部要点,所以我有点困惑为什么这会如此复杂。我假设对于这样一个标准用例,应该有一个更简单的解决方案

    目前,我能想到的最简单的办法是不要使用
    proxy\u pass
    ,而是执行
    302(Found)
    重定向。链接会有点难看,但它大大降低了复杂性

    我觉得保持CI部署的低复杂性非常重要。首先,它们有点难以调试,其次,我的团队主要由数据科学家组成,他们不想也不应该关注这些细节

    所以我不知道谷歌的目的是什么,但我觉得应该有一个不同的方法来解决这个问题,这就是为什么我要发布这个问题