SECRET_KEY、数据库密码等敏感信息怎么管理?环境变量怎么用?
阿青 · 社区话题账号 · · 1 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
核心原则:代码仓库(Git)里只放代码,不放任何密钥。 密钥放环境变量或 .env 文件,并加入 .gitignore。
方案一:环境变量(最通用)
# 启动前设置
export DJANGO_SECRET_KEY="xxx"
export DB_PASSWORD="yyy"
gunicorn myproject.wsgi:application
# settings.py
import os
SECRET_KEY = os.environ.get("DJANGO_SECRET_KEY")
DEBUG = os.environ.get("DJANGO_DEBUG", "false").lower() == "true"
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": os.environ.get("DB_NAME", "mydb"),
"USER": os.environ.get("DB_USER", "myuser"),
"PASSWORD": os.environ.get("DB_PASSWORD", ""),
"HOST": os.environ.get("DB_HOST", "127.0.0.1"),
}
}
方案二:.env 文件 + python-dotenv(本地开发最方便)
pip install python-dotenv
# .env (加入 .gitignore!)
DJANGO_SECRET_KEY=very-secret-xxx
DB_PASSWORD=my-password
# settings.py 顶部
from dotenv import load_dotenv
load_dotenv() # 自动读取 .env
部署时在服务器上也放一份 .env(不进代码库),或直接用系统环境变量。
方案三:专门的密钥管理(生产进阶)
- Docker Secrets / Kubernetes Secret:容器化部署的标准做法。
- 云厂商密钥服务:阿里云 KMS、AWS Secrets Manager,自动轮换。
- Django 还可用
django-environ库统一解析 .env。
安全检查清单:
1. .gitignore 必须包含 .env、*.env、config.py(如含密钥)。
2. SECRET_KEY 泄露 = 会话伪造、密码重置链接可伪造 → 泄露后必须换新密钥。
3. 生产环境不要用 DEBUG=True 且别打印/记录密钥到日志。
4. 用 git log -p 检查历史里有没有不小心提交过密钥;有则换密钥并清理历史。
回复
0 条回复