Python Web应用程序项目结构和Docker支持

描述

比如,我有一个下面的烧瓶项目结构:

├ 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. 我想用gunicorn部署在nginx后面,用rabbitmq和celery和postgresql作为数据库。 Nginx提供来自yourapp/static静态文件
  2. 我想所有的configuration都是我的代码库的一部分,例如所有的nginx,gunicorn和其他configuration应该放在同一个git仓库的某处。
  3. 我想使用一个docker,并有以下docker图像:Web应用程序,postgresql,Nginx,rabbitmq和芹菜工。
  4. 我希望能够从这个git仓库build立所有的docker图像
  5. 我想使用Dockerfiles

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

附加信息

我有一些想法,但不清楚。 例如,我知道,我实际上不需要一个Dockerfile用于postgresql图像,我可以使用Docker集线器的仅音量容器和postgres图像。

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

另一个问题,我想有文件夹的代码(yourapp)从configuration文件夹中分离出来,所有的configuration文件(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点,他们将有权访问所有的文件。

我会把你的应用程序configuration放到一个单独的容器中,并使用volumes_from使它可用于应用程序,以便你可以使用具有不同configuration的相同的无状态应用程序容器。

我认为这符合您的所有要求。