230 lines
12 KiB
Markdown
230 lines
12 KiB
Markdown
# 环境变量速查表
|
||
|
||
本章节汇总了项目 `.env` 文件中所有可配置的环境变量,按功能分类整理。所有变量均可在 `.env.example` 中找到示例。
|
||
|
||
:::tip 温馨提示
|
||
1. `.env.example` 是环境变量模板文件,已提交到版本控制。真实 `.env` 文件已被 `.gitignore` 忽略。
|
||
2. 首次使用请执行 `cp .env.example .env` 复制模板后修改。
|
||
3. 带有 `必填` 标记的变量必须设置,否则应用无法正常启动。
|
||
:::
|
||
|
||
## 基础配置
|
||
|
||
| 变量名 | 默认值 | 说明 |
|
||
|:----|:----|:----|
|
||
| FASTAPI_NAME | FastAPI+EleVue旗舰版 | 应用名称,用于界面显示和系统标识 |
|
||
| FASTAPI_VERSION | v3.0.0 | 应用版本号 |
|
||
| FASTAPI_HOST | 0.0.0.0 | 应用监听地址。`127.0.0.1` 仅本地访问;容器/生产建议 `0.0.0.0` |
|
||
| FASTAPI_PORT | 8031 | 应用监听端口 |
|
||
| FASTAPI_APP | main.py | 应用启动文件名 |
|
||
| FASTAPI_ENV | production | 运行环境:`development` / `production` / `testing` |
|
||
| FASTAPI_DEBUG | False | 是否开启调试模式。`True` 时输出详细错误堆栈和 SQL 日志,生产环境务必设为 `False` |
|
||
| FASTAPI_DEMO | False | 是否开启演示模式。`True` 时所有写操作(add/update/delete/status/batchDelete)返回"演示环境,暂无操作权限" |
|
||
| FASTAPI_FILE_URL | http://file.fastapi.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 安全提示
|
||
生产环境务必设置 `FASTAPI_DEBUG=False`,调试模式会输出详细的错误堆栈信息,可能泄漏内部实现细节。
|
||
:::
|
||
|
||
## 数据库配置
|
||
|
||
| 变量名 | 默认值 | 说明 |
|
||
|:----|:----|:----|
|
||
| DB_DRIVER | mysql | 数据库驱动。可选:`mysql` / `postgresql` / `mssql` / `oracle` / `sqlite` |
|
||
| DB_HOST | 127.0.0.1 | 数据库地址(`sqlite` 时忽略) |
|
||
| DB_PORT | 3306 | 数据库端口(`sqlite` 时忽略) |
|
||
| DB_DATABASE | djangoadmin.fastapi.elevue | 数据库名称。`sqlite` 时作为数据库文件完整路径 |
|
||
| DB_USERNAME | root | 数据库账号(`sqlite` 时忽略) |
|
||
| DB_PASSWORD | CHANGE_ME_DB_PASSWORD | 数据库密码,**必填**(`sqlite` 除外) |
|
||
| DB_PREFIX | fastapi_ | 数据表前缀,所有业务表名自动添加此前缀。模型中通过 `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 签名密钥,**必填**。至少 32 字节强随机值,留空应用会拒绝启动 |
|
||
| 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
|
||
# ============================================================
|
||
# 基础服务配置
|
||
# ============================================================
|
||
FASTAPI_NAME=FastAPI+EleVue旗舰版 # 应用名称
|
||
FASTAPI_VERSION=v3.0.0 # 应用版本号
|
||
FASTAPI_HOST=127.0.0.1 # 服务监听地址(127.0.0.1 仅本地访问,0.0.0.0 允许外部访问)
|
||
FASTAPI_PORT=8031 # 服务监听端口
|
||
FASTAPI_ENV=development # 运行环境(development / testing / production)
|
||
FASTAPI_DEBUG=True # 调试模式开关(True 开启,生产环境请设为 False)
|
||
FASTAPI_DEMO=False # 演示模式开关(True 开启后将限制部分写操作)
|
||
FASTAPI_FILE_URL=http://file.fastapi.elevue # 文件服务地址(用于访问上传的文件)
|
||
|
||
# ============================================================
|
||
# 数据库配置
|
||
# ============================================================
|
||
DB_DRIVER=mysql # 数据库类型(mysql / postgresql / mssql / sqlite / oracle)
|
||
DB_HOST=127.0.0.1 # 数据库主机地址
|
||
DB_PORT=3306 # 数据库端口(MySQL 默认 3306)
|
||
DB_DATABASE=djangoadmin.fastapi.elevue # 数据库名称
|
||
DB_USERNAME=root # 数据库用户名
|
||
DB_PASSWORD=your_password # 数据库密码(请修改为实际密码)
|
||
DB_PREFIX=fastapi_ # 数据表前缀(用于区分不同应用的同库表)
|
||
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_32_bytes # JWT 加密盐值(建议 32 位以上随机字符串,务必修改)
|
||
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 配置来源
|
||
所有配置变量在 `src/core/config/__init__.py` 中通过 `python-dotenv` 从 `.env` 文件加载,然后由各子模块(`app.py`、`database.py`、`redis.py`、`auth.py`、`captcha.py` 等)读取并导出。例如 `DB_DRIVER` 在 `src/core/config/database.py` 中读取并构建 SQLAlchemy 连接 URL。
|
||
:::
|
||
|
||
:::danger 安全提醒
|
||
1. 真实 `.env` 文件包含敏感信息(数据库密码、JWT 密钥等),已被 `.gitignore` 忽略,请勿提交到版本控制。
|
||
2. 生产环境务必设置 `FASTAPI_DEBUG=False` 和 `DB_DEBUG=False`。
|
||
3. 定期轮换 `JWT_SALT` 密钥,提高系统安全性。
|
||
:::
|
||
|
||
## 总结
|
||
|
||
本章节汇总了项目所有可配置的环境变量,涵盖基础配置、数据库、Redis、JWT、验证码、跨域、邮件、短信和限流等功能模块。通过合理配置这些变量,可以灵活调整项目的运行参数,适应不同的开发、测试和生产环境需求。建议首次使用时以 `.env.example` 为模板,仅修改必需项,其余保持默认值即可快速启动项目。
|