【发布时间】:2020-10-27 09:54:59
【问题描述】:
我有一个带有 django 3.1 和 postgresql 的 docker 映像。
在 docker-compose.yml 我写道:
version: '3'
services:
app:
build:
context: .
ports:
- "8001:8001"
volumes:
- ./app:/app
command: >
sh -c "python manage.py runserver 0.0.0.0:8001"
environment:
- DB_HOST=db
- DB_NAME=app
- DB_USER=postgres
- DB_PASS=password
depends_on:
- db
db:
image: postgres:10-alpine
environment:
- POSTGRES_DB=app
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
在 Django 应用程序的 settings.py 中,我从 .git 中排除的 .txt 文件中读取数据库密码
...
DB_PASSWORD = ''
with open('database_password.txt') as f:
DB_PASSWORD = f.read().strip()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'HOST': os.environ.get('DB_HOST'),
'NAME': os.environ.get('DB_NAME'),
'USER': os.environ.get('DB_USER'),
'PASSWORD': DB_PASSWORD,
}
}
...
让 Django 和 Docker 从同一个地方安全读取同一个密码的最佳实践是什么?
我在这里找到的最合适的信息: https://medium.com/swlh/setting-up-a-secure-django-project-repository-with-docker-and-django-environ-4af72ce037f0
作者提议使用 django 的 django-environ 包。这篇文章中的docker部分是这样描述的:
如果您在上面的 .env 文件中的 DATABASE_URL 变量中指定了不同的用户和密码,您应该在此处包含它们(尽管这会损害数据库的安全性,因为 docker-compose.yml 文件将被提交到存储库)。在部署项目时,请创建一个不会提交的单独 docker-compose 文件。
这对我来说不是很清楚。
【问题讨论】:
标签: django postgresql docker security