1

我正在构建一个 Web 应用程序,用户可以在其中管理项目中的文件。每个用户可以有多个项目,每个项目可以有多个文件。我已经使用 Docker 实现了这一点,其中每个项目都是一个 Docker 卷。当用户点击 webapp 界面中的一个按钮来修改他们项目中的文件时,web 服务器会配置并启动一个 worker(它是另一个 Docker 实例)来修改 Docker 卷中的文件。到目前为止,这一切都很好。

但是,现在我想通过 HTTP 提供这些项目文件。我想到的策略是:

  1. Web 服务器(如 nginx)接受来自用户的传入 HTTP 请求
  2. Web 服务器检查传入的请求以确定正在请求哪个项目。例如,如果 URL 是sparkle-pony.myapp.com,那么我们知道sparkle-pony正在请求该项目。如果这个项目不存在,nginx 会做出404 Not Found响应。
  3. Web 服务器还会检查用户是否已登录,以及该登录用户是否有权查看项目。如果不是,则 Web 服务器以403 ForbiddenHTTP 响应进行响应。
  4. Web 服务器配置并启动一个新的 Docker 容器,可能是另一个 nginx 进程。此配置的一部分包括将正确的 Docker 卷安装到新容器上。我们将这个新启动的容器称为“内部”容器,将现有容器称为“外部”容器。
  5. 外部容器要么将此 HTTP 请求传递给内部容器,要么充当内部容器响应的代理。
  6. 内部容器可以访问项目的正确 Docker 卷并确保请求用户具有正确的权限,检查 URL 路径并从 Docker 卷中提供正确的项目文件。在请求得到适当处理后,内部容器关闭。

所以,说了这么多,我有三个问题:

  1. 这是一个合理的策略吗?它确实涉及为每个传入的 HTTP 请求启动一个新的 Docker 容器,但我认为这没关系......
  2. 将 HTTP 请求从一个容器传递到另一个容器的最佳方法是什么?或者外部容器是否必须代理来自内部容器的响应?
  3. 有人可以提供一些关于如何设置这样的项目的指示或示例吗?可能有一些我还不知道的工具或技术。

谢谢!

4

0 回答 0