Files
djangoadmin-wiki/DjangoAdmin_Flask_EleVue/zh/volume1/env-vars.md
T
2026-09-12 23:12:15 +08:00

232 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 环境变量速查表
本章节汇总了项目 `.env` 文件中所有可配置的环境变量,按功能分类整理。所有变量均可在 `.env.example` 中找到示例。
:::tip 温馨提示
1. `.env.example` 是环境变量模板文件,已提交到版本控制。真实 `.env` 文件已被 `.gitignore` 忽略。
2. 首次使用请执行 `cp .env.example .env` 复制模板后修改。
3. 带有 `必填` 标记的变量必须设置,否则应用无法正常启动。
:::
## 基础配置
| 变量名 | 默认值 | 说明 |
|:----|:----|:----|
| FLASK_NAME | DjangoAdmin Flask+EleVue旗舰版 | 应用名称,用于界面显示和系统标识 |
| FLASK_VERSION | v3.0.0 | 应用版本号 |
| FLASK_HOST | 0.0.0.0 | 应用监听地址。`127.0.0.1` 仅本地访问;容器/生产建议 `0.0.0.0` |
| FLASK_PORT | 8021 | 应用监听端口 |
| FLASK_APP | app.py | 应用启动文件名 |
| FLASK_ENV | production | 运行环境:`development` / `production` / `testing` |
| FLASK_DEBUG | False | 是否开启调试模式。`True` 时输出详细错误堆栈和 SQL 日志,生产环境务必设为 `False` |
| FLASK_DEMO | False | 是否开启演示模式。`True` 时所有写操作(add/update/delete/status/batchDelete)返回"演示环境,暂无操作权限" |
| FLASK_SECRET_KEY | (空) | Flask 应用密钥,用于 Session 加密和 CSRF 保护,**必填**且至少 16 字符 |
| FLASK_FILE_URL | http://file.flask.elevue | 文件访问域名,用于拼接上传文件的访问 URL。`BaseService._enrich_file_urls()` 会自动为文件字段补此前缀 |
| UPLOAD_ALLOWED_EXTS | .jpg,.jpeg,.png,.gif,...,.zip | 允许上传的文件扩展名,逗号分隔(带点号)。`upload_size_limit_middleware` 按 `Content-Length` 提前拦截超大请求 |
| UPLOAD_MAX_SIZE_MB | 10 | 上传文件大小上限(MB) |
:::tip 安全提示
生产环境务必设置 `FLASK_DEBUG=False`,调试模式会输出详细的错误堆栈信息,可能泄漏内部实现细节。
:::
## 数据库配置
| 变量名 | 默认值 | 说明 |
|:----|:----|:----|
| DB_DRIVER | mysql | 数据库驱动。可选:`mysql` / `postgresql` / `mssql` / `oracle` / `sqlite` |
| DB_HOST | 127.0.0.1 | 数据库地址(`sqlite` 时忽略) |
| DB_PORT | 3306 | 数据库端口(`sqlite` 时忽略) |
| DB_DATABASE | djangoadmin.flask.elevue | 数据库名称。`sqlite` 时作为数据库文件完整路径 |
| DB_USERNAME | root | 数据库账号(`sqlite` 时忽略) |
| DB_PASSWORD | CHANGE_ME_DB_PASSWORD | 数据库密码,**必填**(`sqlite` 除外) |
| DB_PREFIX | flask_ | 数据表前缀,所有业务表名自动添加此前缀。模型中通过 `DB_PREFIX + "position"` 拼接表名 |
| DB_DEBUG | False | 是否开启 SQL 调试日志(对应 SQLAlchemy `echo` 参数)。生产环境务必设为 `False` |
:::tip 多数据库支持
`DB_DRIVER` 支持别名:`postgres` → `postgresql`、`sqlserver` → `mssql`、`sqlite3` → `sqlite`。切换驱动后需安装对应的 Python 驱动包。
:::
## Redis 缓存配置
| 变量名 | 默认值 | 说明 |
|:----|:----|:----|
| REDIS_HOST | 127.0.0.1 | Redis 服务地址 |
| REDIS_PORT | 6379 | Redis 服务端口 |
| REDIS_PASSWORD | CHANGE_ME_REDIS_PASSWORD | Redis 密码。`REDIS_AUTH=True` 时必填 |
| REDIS_INDEX | 0 | Redis 库索引(0-15) |
| REDIS_AUTH | True | 是否启用 Redis 认证。设为 `False` 时无需密码 |
| REDIS_DECODE_RESPONSES | True | 是否自动解码响应(bytes → str) |
:::tip 温馨提示
Redis 用于存储验证码、JWT 令牌黑名单和登录限流数据,是项目正常运行的必需服务。
:::
## JWT 令牌配置
| 变量名 | 默认值 | 说明 |
|:----|:----|:----|
| JWT_SALT | (空) | JWT 签名密钥,**必填**。至少 16 字符强随机值,留空应用会拒绝启动 |
| JWT_EXPIRE_MINUTES | 20 | JWT 令牌过期时间(分钟) |
| LOGIN_FAIL_MAX | 5 | 登录失败次数上限,超过后锁定账号(防暴力破解) |
| LOGIN_LOCK_SECONDS | 300 | 登录锁定时间(秒) |
:::danger 重要提示
`JWT_SALT` 是安全关键配置,必须设置。推荐使用以下命令生成:
```bash
python -c "import secrets; print(secrets.token_urlsafe(48))"
```
生成后请妥善保管,泄漏会导致令牌被伪造。
:::
## 验证码配置
| 变量名 | 默认值 | 说明 |
|:----|:----|:----|
| CAPTCHA_LENGTH | 6 | 验证码字符长度(4-6 位) |
| CAPTCHA_EXPIRE | 300 | 验证码过期时间(秒) |
| CAPTCHA_RATE_WINDOW | 60 | 验证码防刷窗口期(秒) |
| CAPTCHA_RATE_LIMIT | 10 | 窗口期内最大获取次数 |
| CAPTCHA_CHARS | ABCDEFGHJKLMNPQRSTUVWXYZ2346789 | 验证码字符集(已去除易混淆字符) |
| CAPTCHA_FONT_PATH | static/fonts/Vera.ttf | 验证码字体文件路径 |
| CAPTCHA_IMAGE_WIDTH | 160 | 验证码图片宽度(像素) |
| CAPTCHA_IMAGE_HEIGHT | 50 | 验证码图片高度(像素) |
| CAPTCHA_FONT_SIZE | 28 | 验证码字体大小 |
| CAPTCHA_NOISE_LINES | 6 | 干扰线数量 |
| CAPTCHA_NOISE_DOTS | 30 | 噪点数量 |
## 跨域与代理配置
| 变量名 | 默认值 | 说明 |
|:----|:----|:----|
| CORS_ALLOWED_ORIGINS | http://localhost:8001 | CORS 允许的源,多个用逗号分隔 |
| TRUSTED_PROXY_COUNT | 0 | 可信代理层数。`0` = 不信任 X-Forwarded-For;部署在 Nginx 等反代后设为 `>=1` |
| TRUSTED_PROXY_IPS | (空) | 可信代理 IP 白名单,逗号分隔 |
:::tip 温馨提示
本地开发时,`CORS_ALLOWED_ORIGINS` 需包含前端开发服务器地址(默认 `http://localhost:8001`)。如果有多个前端地址,用逗号分隔:
```bash
CORS_ALLOWED_ORIGINS=http://localhost:8001,http://192.168.1.100:8001
```
:::
## 邮件配置
| 变量名 | 默认值 | 说明 |
|:----|:----|:----|
| MAIL_MAILER | smtp | 邮件传输协议 |
| MAIL_SERVER | smtp.163.com | SMTP 服务器地址 |
| MAIL_PORT | 465 | SMTP 服务端口 |
| MAIL_USE_SSL | True | 是否启用 SSL 加密 |
| MAIL_USERNAME | CHANGE_ME_MAIL_USERNAME | 授权邮箱用户名 |
| MAIL_PASSWORD | CHANGE_ME_MAIL_PASSWORD | 授权邮箱密码/授权码 |
| MAIL_ENCRYPTION | (空) | 邮件加密串(可选) |
| MAIL_FROM_NAME | (空) | 发件人显示名称 |
| MAIL_FROM_ADDRESS | (空) | 发件人邮箱地址 |
:::tip 温馨提示
邮件功能为预留扩展功能,暂未实现。
:::
## 短信配置
| 变量名 | 默认值 | 说明 |
|:----|:----|:----|
| SMS_URL | (空) | 短信服务 API 地址 |
| SMS_API_KEY | (空) | 短信服务 API 密钥 |
| SMS_SIGN | (空) | 短信签名 |
| SMS_TEMPLATE_ID | (空) | 短信模板 ID |
:::tip 温馨提示
短信功能为预留扩展功能,暂未实现。
:::
## 请求限流配置
| 变量名 | 默认值 | 说明 |
|:----|:----|:----|
| RATE_LIMIT_ENABLED | False | 是否启用请求限流。在 `.env.example` 中默认被注释,需手动取消注释并设为 `True` |
| RATE_LIMIT_LIMIT | 100 | 窗口期内最大请求数 |
| RATE_LIMIT_WINDOW_SECONDS | 60 | 限流窗口时间(秒) |
| RATE_LIMIT_KEY_PREFIX | rl: | Redis 限流键前缀 |
:::tip 温馨提示
请求限流功能默认关闭。启用后由 `src/middleware/rate_limit.py` 基于 Redis 滑动窗口计数器实现,按客户端 IP 维度统计。超出限制后直接返回 `{"code": 1, "msg": "请求过于频繁"}` 响应,不进入后续中间件链(避免 DoS 攻击时日志表与 DB 连接不降反增)。Redis 不可用时降级放行(fail-open)。生产环境建议启用此功能以防止 API 滥用。
:::
## 环境变量配置示例
以下是一个开发环境的 `.env` 文件示例(基于 `.env.example` 模板修改):
```bash
# ============================================================
# 基础服务配置
# ============================================================
FLASK_NAME=DjangoAdmin Flask+EleVue旗舰版 # 应用名称
FLASK_VERSION=v3.0.0 # 应用版本号
FLASK_HOST=127.0.0.1 # 服务监听地址(127.0.0.1 仅本地访问,0.0.0.0 允许外部访问)
FLASK_PORT=8021 # 服务监听端口
FLASK_ENV=development # 运行环境(development / testing / production)
FLASK_DEBUG=True # 调试模式开关(True 开启,生产环境请设为 False)
FLASK_DEMO=False # 演示模式开关(True 开启后将限制部分写操作)
FLASK_SECRET_KEY=your_secret_key_at_least_16_chars # Flask 应用密钥(必填,至少 16 字符)
FLASK_FILE_URL=http://file.flask.elevue # 文件服务地址(用于访问上传的文件)
# ============================================================
# 数据库配置
# ============================================================
DB_DRIVER=mysql # 数据库类型(mysql / postgresql / mssql / sqlite / oracle)
DB_HOST=127.0.0.1 # 数据库主机地址
DB_PORT=3306 # 数据库端口(MySQL 默认 3306)
DB_DATABASE=djangoadmin.flask.elevue # 数据库名称
DB_USERNAME=root # 数据库用户名
DB_PASSWORD=your_password # 数据库密码(请修改为实际密码)
DB_PREFIX=flask_ # 数据表前缀(用于区分不同应用的同库表)
DB_DEBUG=False # 数据库调试模式(True 会输出 SQL 日志)
# ============================================================
# Redis 配置
# ============================================================
REDIS_HOST=127.0.0.1 # Redis 主机地址
REDIS_PORT=6379 # Redis 端口(默认 6379)
REDIS_PASSWORD=your_redis_password # Redis 密码(请修改为实际密码)
REDIS_INDEX=0 # Redis 数据库索引(默认 0,可设为 1-15 隔离不同业务)
REDIS_AUTH=True # 是否启用密码认证(True/False)
REDIS_DECODE_RESPONSES=True # 是否自动解码响应为字符串(True 自动将 bytes 转为 str)
# ============================================================
# JWT 认证配置(必填)
# ============================================================
JWT_SALT=your_generated_secret_key_here_at_least_16_chars # JWT 加密盐值(建议 16 位以上随机字符串,务必修改)
JWT_EXPIRE_MINUTES=20 # JWT Token 过期时间(单位:分钟)
LOGIN_FAIL_MAX=5 # 登录失败最大尝试次数(超过后锁定账户)
LOGIN_LOCK_SECONDS=300 # 登录锁定持续时间(单位:秒,300=5分钟)
# ============================================================
# 验证码配置
# ============================================================
CAPTCHA_LENGTH=6 # 验证码字符长度
CAPTCHA_EXPIRE=300 # 验证码有效期(单位:秒,300=5分钟)
# ============================================================
# 跨域配置
# ============================================================
CORS_ALLOWED_ORIGINS=http://localhost:8001 # 允许跨域访问的前端地址(多个地址用逗号分隔,生产环境请精确配置)
```
:::tip 配置来源
所有配置变量在 `config/__init__.py` 中通过 `python-dotenv` 从 `.env` 文件加载,然后由各子模块(`app.py`、`database.py`、`redis.py`、`auth.py`、`captcha.py` 等)读取并导出。例如 `DB_DRIVER` 在 `config/database.py` 中读取并构建 SQLAlchemy 连接 URL。
:::
:::danger 安全提醒
1. 真实 `.env` 文件包含敏感信息(数据库密码、JWT 密钥等),已被 `.gitignore` 忽略,请勿提交到版本控制。
2. 生产环境务必设置 `FLASK_DEBUG=False` 和 `DB_DEBUG=False`。
3. 定期轮换 `JWT_SALT` 密钥,提高系统安全性。
:::
## 总结
本章节汇总了项目所有可配置的环境变量,涵盖基础配置、数据库、Redis、JWT、验证码、跨域、邮件、短信和限流等功能模块。通过合理配置这些变量,可以灵活调整项目的运行参数,适应不同的开发、测试和生产环境需求。建议首次使用时以 `.env.example` 为模板,仅修改必需项,其余保持默认值即可快速启动项目。