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

Python web应用程序项目结构和docker支持 描述,python,deployment,configuration,flask,docker,Python,Deployment,Configuration,Flask,Docker,例如,我有以下flask项目结构: ├ project_root/ ├── .gitignore ├── README.md ├── docs ├── requirements.txt ├── yourapp │ ├── templates/ │ ├── static/ │ ├── migrations/ │ ├── config.py │ ├── app1/ │ │ ├── __init__.py │ │ ├── controllers.py │ │

例如,我有以下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/
我有以下要求:

  • 我想用nginx后面的gunicorn部署它,用rabbitmq、芹菜和postgresql作为数据库。Nginx从
    yourapp/static
  • 我希望所有配置都成为我代码库的一部分,例如,所有nginx、gunicorn和其他配置都应该放在同一个git存储库中
  • 我想使用docker并拥有以下docker图像:web应用程序、postgresql、nginx、rabbitmq和芹菜工人
  • 我希望能够从这个git存储库构建所有docker映像
  • 我想使用Dockerfiles
  • 问题: 如果我想满足所有这些要求,我应该将配置文件和DockerFile放在哪里?

    补充资料 我有一些想法,但不清楚。例如,我知道,我实际上不需要postgresql映像的Dockerfile,我可以使用Docker hub中的仅卷容器和postgres映像

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


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

    我将使用
    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
    将使用
    项目根目录中的默认
    Dockerfile
    ,所有其他服务将在子目录中使用命名的Dockerfile(它们可以放在您想要的任何位置,也可以放在根目录中)。只要
    build
    指向根目录,它们就可以访问所有文件

    我会将您的应用程序配置放在一个单独的容器中,并使用
    中的
    volumes\u将其提供给应用程序,以便您可以使用具有不同配置的相同无状态应用程序容器

    我想这满足你的所有要求