gpt4 book ai didi

Python web 应用程序项目结构和 docker 支持

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:13 27 4
gpt4 key购买 nike

描述

例如,我有一个如下的 flask 项目结构:

├ project_root/
├── .gitignore
├── README.md
├── docs
├── requirements.txt
├── yourapp
│ ├── templates/
│ ├── static/
│ ├── migrations/
│ ├── config.py
│ ├── app1/
│ │ ├── __init__.py
│ │ ├── controllers.py
│ │ ├── forms.py
│ │ └── models.py
│ ├── app2/
│ │ └── ...
│ └── app.py
└── tests/

我有以下要求:

  1. 我想在 nginx 后面用 gunicorn 部署它,用 rabbitmq 和 celery 以及 postgresql 作为数据库。 Nginx 提供来自 yourapp/static
  2. 的静态文件
  3. 我希望所有配置都成为我的代码库的一部分,例如所有 nginx、gunicorn 和其他配置都应该放在同一个 git 存储库中的某个地方。
  4. 我想使用 docker 并拥有以下 docker 镜像:web-app、postgresql、nginx、rabbitmq 和 celery-worker。
  5. 我希望能够从这个 git 存储库构建所有 docker 镜像
  6. 我想使用 Dockerfiles

问题

如果我想满足所有这些要求,我应该把配置文件和 Dockerfile 放在哪里?

附加信息

有一些想法,但不是很清楚。例如,我知道我实际上不需要用于 postgresql 镜像的 Dockerfile,我可以使用来自 Docker hub 的纯卷容器和 postgres 镜像。

我无法解决的主要问题是 nginx 和应用程序范围的干扰:静态文件应该对 nginx 的 Dockerfile 可见,整个 flask 应用程序也应该对 gunicorn 的 Dockerfile 可见,但我不能放 2 Dockerfiles 在同一文件夹中。

另一个问题,我希望将带有 flask 代码的文件夹(yourapp)与配置文件夹分开,并且所有配置文件(nginx、gunicorn、celery)都应该存储在同一个文件夹中。

最佳答案

我会使用 docker-compose 并执行类似于此示例的操作 docker-compose.yml

web-app:
build: .
links:
- postgresql
- rabbitmq
volumes_from:
- config

config:
build: .
dockerfile: dockerfiles/Dockerfile.config

postgresql:
image: postgres:9.4
volumes_from:
- postgresql-data

postgresql-data:
build: dockerfiles/postgresql-data/

nginx:
build: .
dockerfile: dockerfiles/Dockerfile.nginx
links:
- web-app

rabbitmq:
image: rabbitmq:3.5

celery-worker:
build: .
dockerfile: dockerfiles/Dockerfile.celery-worker
links:
- rabbitmq

web-app 将使用 project_root/ 中的默认 Dockerfile,所有其他服务将使用子目录中的命名 dockerfile (它们真的可以放在你想要的任何地方,它们也可以放在根目录中)。只要 build 指向根目录,他们就可以访问所有文件。

我会将您的应用程序配置放入一个单独的容器中,并使用 volumes_from 使其可供应用程序使用,以便您可以使用具有不同配置的相同无状态应用程序容器。

我认为这可以满足您的所有要求。

关于Python web 应用程序项目结构和 docker 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32799808/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com