# 环境规划 ## 概述 项目支持多环境部署,通过 `.env` 文件管理各环境的配置差异。合理的环境规划能确保开发、测试、生产环境的隔离性,降低配置错误导致的线上风险。 :::tip 核心原则 各环境之间保持代码一致,仅通过环境变量(`.env`)区分配置。禁止在代码中硬编码环境相关的值。 ::: ## 环境划分 | 环境 | 用途 | 域名示例 | DEBUG | 数据库 | Redis | 日志级别 | |------|------|---------|-------|--------|-------|---------| | Dev(开发) | 本地开发调试 | localhost:8000 | True | 开发库 | 开发实例 | DEBUG | | Test(测试) | 功能/集成测试 | test.example.com | False | 测试库 | 测试实例 | INFO | | Prod(生产) | 正式对外服务 | www.example.com | False | 生产库 | 生产集群 | WARNING | :::tip 环境隔离要求 1. 三个环境的数据库必须完全隔离,禁止共用同一库。 2. Redis 实例建议分离,避免测试数据污染生产缓存。 3. 生产环境的 `.env` 文件权限应设为 `600`,仅运行用户可读。 ::: ## .env 配置示例 ### Dev 环境 ```bash # 应用配置 DJANGO_NAME=DjangoAdmin开发版 DJANGO_VERSION=v3.0.0 DJANGO_DEBUG=True DJANGO_DEMO=False # 数据库配置 DATABASE_ENGINE=django.db.backends.mysql DATABASE_NAME=djangoadmin_dev DATABASE_HOST=127.0.0.1 DATABASE_PORT=3306 DATABASE_USER=root DATABASE_PASSWORD=root DATABASE_PREFIX=django_ # Redis 配置 REDIS_HOST=127.0.0.1 REDIS_PORT=6379 REDIS_PASSWORD=123456 REDIS_DB=0 # 文件配置 DJANGO_FILE_URL=http://file.django.naivevue ``` ### Prod 环境 ```bash # 应用配置 DJANGO_NAME=DjangoAdmin DJANGO_VERSION=v3.0.0 DJANGO_DEBUG=False DJANGO_DEMO=False # 数据库配置 DATABASE_ENGINE=django.db.backends.mysql DATABASE_NAME=djangoadmin_prod DATABASE_HOST=10.0.1.100 DATABASE_PORT=3306 DATABASE_USER=djangoadmin DATABASE_PASSWORD=<强密码> DATABASE_PREFIX=django_ # Redis 配置 REDIS_HOST=10.0.1.101 REDIS_PORT=6379 REDIS_PASSWORD=<强密码> REDIS_DB=0 # 文件配置 DJANGO_FILE_URL=https://files.example.com ``` :::tip 安全提醒 生产环境的 `SECRET_KEY` 必须使用随机强密码(推荐 50 位以上),禁止与开发环境共用同一值。可在 `application/settings.py` 中修改。 ::: ## 环境切换机制 项目通过 `extends/extends_dotenv.py` 加载 `.env` 文件,`config/env.py` 读取环境变量并提供默认值: ```python # config/env.py 中的配置读取方式 DATABASE_ENGINE = os.getenv('DATABASE_ENGINE', "django.db.backends.mysql") DATABASE_NAME = os.getenv('DATABASE_NAME', 'djangoadmin.django.naivevue') DATABASE_HOST = os.getenv('DATABASE_HOST', "127.0.0.1") ``` 启动时自动读取项目根目录下的 `.env` 文件,无需额外配置。 :::tip Docker 环境 Docker 部署时,`docker-compose.yml` 通过 `env_file: .env` 注入环境变量,容器内无需额外配置。详见 [Docker容器化](/zh/volume6/docker) 章节。 ::: ## 关键环境变量说明 | 变量名 | 说明 | 默认值 | |:----|:----|:----| | `DJANGO_NAME` | 应用名称(显示在浏览器标题) | Django+NaiveUI旗舰版 | | `DJANGO_VERSION` | 应用版本号 | v3.0.0 | | `DJANGO_DEBUG` | 调试模式开关 | True | | `DJANGO_DEMO` | 演示模式(限制写操作) | True | | `DATABASE_ENGINE` | 数据库引擎 | django.db.backends.mysql | | `DATABASE_NAME` | 数据库名称 | djangoadmin.django.naivevue | | `DATABASE_HOST` | 数据库主机 | 127.0.0.1 | | `DATABASE_PORT` | 数据库端口 | 3306 | | `DATABASE_USER` | 数据库用户名 | root | | `DATABASE_PASSWORD` | 数据库密码 | root | | `DATABASE_PREFIX` | 数据表前缀 | django_ | | `REDIS_HOST` | Redis 主机 | 127.0.0.1 | | `REDIS_PORT` | Redis 端口 | 6379 | | `REDIS_PASSWORD` | Redis 密码 | 123456 | | `REDIS_DB` | Redis 数据库索引 | 0 | | `DJANGO_FILE_URL` | 文件访问域名 | http://file.django.naivevue | | `DJANGO_UPLOAD_DIR` | 文件上传目录 | /public/uploads | | `IP_LOCATION_SOURCE` | IP 地理位置来源 | api | | `SITE_DOMAIN` | 站点域名 | http://127.0.0.1:8000 | ## 总结 环境规划的核心是隔离与一致性:代码统一,配置分离。通过 `.env` 文件管理各环境差异,`config/env.py` 提供默认值。生产环境务必关注安全配置(DEBUG=False、强密码、SECRET_KEY 独立),确保线上服务稳定可靠。