【发布时间】:2021-07-20 17:12:04
【问题描述】:
我有一个 docker-compose 项目,其中包含两个运行 NGINX 和 gunicorn 的容器以及我的 django 文件。 我在 AWS RDS 的 docker 之外也有一个数据库。 我的问题类似于this one。但是,这个问题与 docker-compose 中的数据库有关。我的在外面。
所以,如果我要为我的容器打开一个 bash 终端并运行 py manage.py makemigrations,问题将是 django 项目中的迁移文件,例如:/my-django-project/my-app/migrations/001-xxx.py 将与存储的数据库不同步已应用了哪些迁移。这会发生,因为我的容器可以随时关闭并打开一个新容器。并且不会保存迁移文件。
我的想法是:
-
在 docker compose 中使用
volume,但由于迁移文件夹分布在所有可能难以实现的 django 应用程序中。 -
在 docker 之外处理迁移,这需要某种“主”项目来存储迁移文件。这似乎不是一个好主意,因为那样整个项目将依赖于一些现有的本地文件。
我正在寻找有关如何处理迁移的良好做法的建议。
编辑:
这里是 docker-compose.yml,我在本地使用 docker-compose up 运行它,并在生产环境中使用 docker compose up 在 AWS ECS 中运行。我遗漏了一些我认为无关紧要的 aws-cloudformation 配置。
docker-compose.yml
version: '3'
services:
web:
image: <secret>.dkr.ecr.eu-west-3.amazonaws.com/api-v2/django:${IMAGE_TAG}
build:
context: .
dockerfile: ./Dockerfile
networks:
- demoapp
environment:
- DEBUG=${DEBUG}
- SECRET_KEY=${SECRET_KEY}
nginx:
image: <secret>.dkr.ecr.eu-west-3.amazonaws.com/api-v2/nginx:${IMAGE_TAG}
build:
context: .
dockerfile: ./nginx.Dockerfile
ports:
- 80:80
depends_on:
- web
networks:
- demoapp
【问题讨论】:
-
你能在没有秘密的情况下发布你的 docker-compose 文件吗?你有开发和生产环境吗?
-
正常的工作流程是:你在你的开发环境中更改模型 -> 在你的开发环境上进行迁移 -> 在你的开发环境上迁移 -> 提交并将迁移文件推送到 repo -> 部署到生产环境-> 部署调用迁移命令。开发环境和生产环境有不同的数据库。
-
如果你破坏数据库,你应该创建一个空的。但我认为是的
-
非常感谢,这很有道理!
-
最好在单独的答案中描述究竟是什么问题以及您如何解决它。你可以回答你的问题。也许您的帖子对其他人有帮助。
标签: python django docker docker-compose database-migration