目录结构
📁 项目文件结构
C:\DMS\
├── .env # 当前使用的配置文件(不要提交到Git)
├── .env.development # 开发环境配置模板(可以提交到Git)
├── .env.production.template # 生产环境配置模板(可以提交到Git)
├── config/
│ └── env.py # 环境变量加载和解析逻辑
├── application/
│ └── settings.py # Django设置(从config.env导入配置)
├── switch_env.ps1 # 环境切换脚本
├── validate_config.py # 配置验证脚本
└── .gitignore # Git忽略规则
快速开始
1️⃣ 切换到开发环境
💻 PowerShell 命令
# 在项目根目录执行
.\switch_env.ps1 development
运行后会显示:
========================================
DMS Environment Switch Tool
========================================
[OK] Backed up current config: C:\DMS\.env.backup.20260416_151622
[OK] Switched to: Development Environment
[INFO] Config file: C:\DMS\.env
[WARNING] Please restart Django service to apply changes
Verify configuration:
python validate_config.py
效果说明:
- 自动备份:如果存在旧的
.env文件,会自动备份为.env.backup.日期时间格式 - 完全复制:
.env.development的内容会完全复制到.env,两个文件内容一模一样 - 彩色提示:成功信息用绿色显示,警告用黄色显示
- 需要重启:修改后必须重启 Django 服务才能生效
2️⃣ 准备生产环境
💻 PowerShell 命令
# 复制生产环境模板
.\switch_env.ps1 production
# 编辑 .env 文件,修改所有敏感信息
notepad .env
运行后会显示:
========================================
DMS Environment Switch Tool
========================================
[OK] Backed up current config: C:\DMS\.env.backup.20260416_151622
[OK] Switched to: Production Environment (Template)
[INFO] Config file: C:\DMS\.env
[WARNING] Important Notes:
1. Please edit .env file and modify all sensitive information
2. Generate strong keys for DJANGO_SECRET_KEY and JWT_SECRET_KEY
3. Update database configuration with production values
Commands to generate strong keys:
Django: python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
JWT: python -c "import secrets; print(secrets.token_urlsafe(43))"
[WARNING] Please restart Django service to apply changes
Verify configuration:
python validate_config.py
效果说明:
- 自动备份:同样会备份旧的
.env文件 - 复制模板:
.env.production.template的内容会完全复制到.env
- 重要提示:显示必须修改的配置项和生成密钥的命令
- 需要修改:复制后必须编辑
.env文件,修改所有占位符和敏感信息
必须修改的配置:
DJANGO_SECRET_KEY- 生成强密钥JWT_SECRET_KEY- 生成强密钥DB_PASSWORD- 设置数据库密码DJANGO_ALLOWED_HOSTS- 指定正式域名DB_HOST- 生产数据库服务器地址DB_USER- 不要用 root
生成强密钥的命令:
🔑 密钥生成命令
# Django SECRET_KEY
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
# JWT SECRET_KEY
python -c "import secrets; print(secrets.token_urlsafe(43))"
3️⃣ 验证配置
✅ 配置验证
python validate_config.py
验证脚本会检查:
- 必需的密钥是否配置
- DEBUG 模式是否正确
- 数据库配置是否安全
- 报警配置是否合理
配置文件说明
.env - 当前使用的配置
这是实际被系统读取的配置文件。
重要规则:
- 永远不要将此文件提交到 Git
- 每次修改后需要重启 Django 服务
- 可以使用
switch_env.ps1快速切换
.env.development - 开发环境模板
开发环境的推荐配置:
DJANGO_DEBUG=true- 显示详细错误信息ENABLE_MAIL_ALARM=false- 关闭邮件报警ENABLE_SMS_ALARM=false- 关闭短信报警DB_NAME=dms_dev- 使用独立的开发数据库
.env.production.template - 生产环境模板
生产环境的配置模板(需要修改后才能使用):
DJANGO_DEBUG=false- 隐藏敏感信息DJANGO_ALLOWED_HOSTS=your-domain.com- 明确指定域名ENABLE_MAIL_ALARM=true- 启用报警DB_USER=dms_user- 使用专用数据库用户
配置项详解
基础配置
| 变量名 | 说明 | 开发环境 | 生产环境 |
|---|---|---|---|
DJANGO_DEBUG |
调试模式 | true | false |
DJANGO_ALLOWED_HOSTS |
允许的域名 | localhost,127.0.0.1,* |
example.com,www.example.com |
DJANGO_SECRET_KEY |
Django密钥 | 可用默认值 | 必须修改 |
JWT_SECRET_KEY |
JWT密钥 | 可用默认值 | 必须修改 |
数据库配置
| 变量名 | 说明 | 示例 |
|---|---|---|
DB_ENGINE |
数据库引擎 | django.db.backends.mysql |
DB_NAME |
数据库名称 | dms_datasource |
DB_HOST |
数据库主机 | 127.0.0.1 或 db.example.com |
DB_PORT |
数据库端口 | 3306 |
DB_USER |
数据库用户 | root(开发)或 dms_user(生产) |
DB_PASSWORD |
数据库密码 | 务必使用强密码 |
TABLE_PREFIX |
表前缀 | django_ |
应用配置
| 变量名 | 说明 | 开发环境 | 生产环境 |
|---|---|---|---|
IS_DEMO_MODE |
演示模式 | false | false |
CFR_ENABLED |
CFR审计追踪 | true | false |
报警配置
| 变量名 | 说明 | 开发环境 | 生产环境 |
|---|---|---|---|
ALARM_REPEAT_INTERVAL |
重复报警间隔(分钟) | 120 | 60 |
ENABLE_MAIL_ALARM |
邮件报警 | false | true |
ENABLE_SMS_ALARM |
短信报警 | false | true/false |
ENABLE_API_ALARM |
API报警 | false | true/false |
ALARM_TIME_WINDOW_HOURS |
报警时间窗口(小时) | 24 | 8 |
ALARM_API_URL |
API报警地址 | 测试地址 | 正式地址 |
环境切换流程
场景1:从开发切换到生产
1 备份当前配置(自动完成)
2 复制生产模板
.\switch_env.ps1 production
3 编辑配置文件
notepad .env
4 修改以下关键配置:
- DJANGO_SECRET_KEY (生成新密钥)
- JWT_SECRET_KEY (生成新密钥)
- DB_PASSWORD (设置强密码)
- DJANGO_ALLOWED_HOSTS (指定域名)
- DB_HOST (生产数据库地址)
5 验证配置
python validate_config.py
6 重启服务
(根据你的部署方式重启)
场景2:从生产切换到开发
1 切换回开发环境
.\switch_env.ps1 development
2 验证配置
python validate_config.py
3 重启服务
安全注意事项
✅ 应该做的
1. 保护 .env 文件
- 不要通过邮件、聊天工具发送
- 不要上传到公开代码仓库
- 使用文件权限限制访问
2. 使用强密钥和密码
🔐 生成强密钥和密码
# 生成 Django SECRET_KEY
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
# 生成 JWT SECRET_KEY
python -c "import secrets; print(secrets.token_urlsafe(43))"
# 生成随机密码(16字符)
python -c "import secrets; import string; chars = string.ascii_letters + string.digits + '!@#$%^&*'; print(''.join(secrets.choice(chars) for _ in range(16)))"
3. 定期轮换密钥
- 建议每 3-6 个月更换一次密钥
- 员工离职后立即更换
4. 使用不同的数据库用户
- 开发环境:可以用 root(仅限本地)
- 生产环境:创建专用用户,只授予必要权限
❌ 不应该做的
1. 不要硬编码敏感信息
❌ 错误示例 vs ✅ 正确示例
# ❌ 错误
DATABASE_PASSWORD = "my_password_123"
# ✅ 正确
DATABASE_PASSWORD = os.environ.get('DB_PASSWORD', 'default')
2. 不要在生产环境使用 DEBUG=True
- 会泄露敏感信息
- 性能较差
3. 不要在生产环境使用 ALLOWED_HOSTS='*'
- 存在安全风险
- 应明确指定允许的域名
4. 不要将 .env 提交到 Git
- 已配置在
.gitignore中 - 但要定期检查确保没有意外提交
故障排查
问题1:修改 .env 后没有生效
原因:Django 启动时加载配置,修改后需要重启
解决:
# 重启 Django 服务
# 如果是用 manage.py runserver
Ctrl+C 停止,然后重新启动
# 如果是用 gunicorn 或其他 WSGI 服务器
# 重启对应的服务
问题2:validate_config.py 报错
常见错误及解决:
1. Django密钥使用默认值
# 生成新密钥并更新 .env
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
# 复制输出,替换 .env 中的 DJANGO_SECRET_KEY
2. 数据库密码未配置
# 编辑 .env 文件
notepad .env
# 修改 DB_PASSWORD=your_strong_password
3. ALLOWED_HOSTS='*' 在生产环境
# 编辑 .env 文件
notepad .env
# 修改为:DJANGO_ALLOWED_HOSTS=example.com,www.example.com
问题3:无法连接到数据库
检查步骤:
# 1. 验证配置
python validate_config.py
# 2. 检查数据库服务是否运行
# MySQL: services.msc 查看 MySQL 服务状态
# 3. 测试数据库连接
python -c "import MySQLdb; conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='your_password', db='dms_datasource'); print('连接成功'); conn.close()"
📚 相关文档
- config/env.py - 环境变量加载逻辑
- application/settings.py - Django 配置
- .env使用说明.md - 旧版说明文档(仅供参考)
💡 最佳实践总结
1. 开发环境
- 使用
.env.development作为模板 - 开启 DEBUG 模式便于调试
- 关闭不必要的报警功能
- 使用本地数据库
2. 生产环境
- 使用
.env.production.template作为起点 - 必须修改所有密钥和密码
- 关闭 DEBUG 模式
- 明确指定 ALLOWED_HOSTS
- 启用必要的报警功能
- 使用专用数据库用户
3. 日常维护
- 定期运行
validate_config.py检查配置 - 修改配置后记得重启服务
- 定期轮换密钥
- 备份
.env文件到安全位置
📅 最后更新: 2026-04-04 | 📦 版本: 1.0