Files
DjangoAdmin_Flask_EleVue/.env
T
2026-09-12 22:18:50 +08:00

235 lines
11 KiB
Bash
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.
# ============================================================
# 基础配置
# ============================================================
# 应用名称 - 用于界面显示和日志标识
FLASK_NAME=Flask+EleVue旗舰版
# 应用版本号 - 用于版本追踪和API兼容性判断
FLASK_VERSION=v3.0.0
# 应用秘钥 - 用于Session加密、CSRF保护和签名
# 生产环境务必更换为强随机字符串
FLASK_SECRET_KEY='d67beaf46fbf4f048d2eeb26fd62ea49'
# 应用运行地址 - 127.0.0.1仅本地访问,0.0.0.0允许外部访问
FLASK_HOST=127.0.0.1
# 应用运行端口 - 确保端口未被占用
FLASK_PORT=8021
# 应用启动文件 - Flask入口文件名称
FLASK_APP=app.py
# 应用环境变量 - development开发环境 / production生产环境
FLASK_ENV=development
# 是否DEBUG模式 - True开启调试 / False关闭调试
# 生产环境必须设为False,避免暴露调试器和代码信息
FLASK_DEBUG=True
# 是否禁用自动重启 - True禁用 / False启用
# 仅在FLASK_DEBUG=True时生效,生产环境无关(Gunicorn不使用reloader)
FLASK_USE_RELOADER=False
# 可信代理层数 - 反向代理环境下获取真实客户端IP
# 0-无代理(不信任任何转发头),1-1层代理(如Nginx),2-2层代理
# 生产环境部署在Nginx后时应设为1
PROXY_NUM=0
# CORS允许的源 - 逗号分隔,如 http://localhost:8001,https://admin.example.com
# 配置后支持携带凭证(Cookie等),未配置则允许所有源但不携带凭证
CORS_ALLOWED_ORIGINS=http://localhost:8001
# 是否DEMO模式 - True演示模式(限制操作权限)/ False正常模式
FLASK_DEMO=False
# 万能验证码 - 仅在FLASK_DEMO=True时生效,生产环境必须为空
# 设置后可用此验证码绕过正常验证码校验,用于开发调试
CAPTCHA_BYPASS_CODE=618618
# 文件上传路径 - 用户上传文件的存储目录
FLASK_UPLOAD_DIR=/data/apps/uploads
# 图片域名 - 用于生成图片完整URL,方便前端展示
FLASK_FILE_URL='http://images.flask.elevue.djangoadmin.cn'
# 允许上传的文件扩展名 - 逗号分隔,带点号
# 生产环境务必配置,防止上传.py、.exe、.sh等危险文件
UPLOAD_ALLOWED_EXTS=.jpg,.jpeg,.png,.gif,.bmp,.webp,.svg,.ico,.txt,.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.mp3,.mp4,.zip,.rar,.7z
# 上传文件大小上限(MB)- 超过此大小将被拒绝上传
UPLOAD_MAX_SIZE_MB=10
# ============================================================
# 数据库配置
# ============================================================
# 数据库驱动 - 可选 mysql/postgresql/mssql/sqlite/oracle
# (别名:postgres=postgresql、sqlserver=mssql、sqlite3=sqlite)
# 示例:
# MySQL: DB_DRIVER=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_USERNAME=root DB_PASSWORD=***
# PostgreSQL: DB_DRIVER=postgresql DB_HOST=127.0.0.1 DB_PORT=5432 DB_USERNAME=postgres DB_PASSWORD=***
# SQL Server: DB_DRIVER=mssql DB_HOST=127.0.0.1 DB_PORT=1433 DB_USERNAME=sa DB_PASSWORD=***
# SQLite: DB_DRIVER=sqlite DB_DATABASE=dev.db(此时 DB_DATABASE 即数据库文件完整路径,
# 可填相对/绝对路径如 C:/apps/dev.db,忽略 host/port/user/password)
# Oracle: DB_DRIVER=oracle DB_HOST=127.0.0.1 DB_PORT=1521 DB_USERNAME=system DB_PASSWORD=***
# (DB_DATABASE 填 SERVICE_NAME,如 XEPDB1)
DB_DRIVER='mysql'
DB_HOST='127.0.0.1'
DB_PORT=3306
DB_DATABASE='djangoadmin.flask.elevue'
DB_USERNAME='root'
DB_PASSWORD='root'
# 数据表前缀 - 用于区分同一数据库中不同应用的数据表
DB_PREFIX='flask_'
# 是否开启调试模式 - True打印SQL日志 / False不打印
DB_DEBUG=True
# 是否启用数据库SSL加密连接 - 生产环境建议开启,防止数据明文传输
DB_SSL=False
# SSL CA证书路径 - 用于验证服务端证书,留空则信任系统CA
DB_SSL_CA=
# SSL客户端证书路径 - 双向认证时使用
DB_SSL_CERT=
# SSL客户端私钥路径 - 双向认证时使用
DB_SSL_KEY=
# 连接池常驻连接数 - 默认10,生产环境建议根据并发量调整
# DB_POOL_SIZE=10
# 超出pool_size后允许的最大额外连接 - 默认10,总连接数=pool_size+max_overflow
# DB_MAX_OVERFLOW=10
# 连接自动回收时间(秒)- 默认1800,应小于MySQL的wait_timeout
# 防止"MySQL server has gone away"错误
# DB_POOL_RECYCLE=1800
# 获取连接的超时时间(秒)- 默认30,超时抛出TimeoutError
# DB_POOL_TIMEOUT=30
# 使用前是否检测连接存活 - 默认True,防止使用已被MySQL关闭的连接
# DB_POOL_PRE_PING=True
# ============================================================
# 缓存配置(Redis)
# ============================================================
# 缓存服务地址 - Redis服务器域名或IP
REDIS_HOST='127.0.0.1'
# 缓存服务端口 - Redis默认6379
REDIS_PORT=6379
# 缓存服务密码 - 务必使用强密码,不能为空
REDIS_PASSWORD="123456"
# 缓存库索引 - 0-15,不同索引用于不同业务(如会话、缓存、队列等)
REDIS_INDEX=0
# 是否需要进行用户认证 - True开启 / False关闭,生产环境必须开启
REDIS_AUTH=True
# 是否对查询结果进行编码处理 - True自动解码 / False返回字节数据
REDIS_DECODE_RESPONSES=True
# ============================================================
# 验证码配置
# ============================================================
# 验证码字符长度(4-6位,推荐4位)
CAPTCHA_LENGTH=6
# 验证码过期时间(秒),默认5分钟
CAPTCHA_EXPIRE=300
# 验证码防刷窗口期(秒)- 在此时间窗口内,同一IP获取次数受CAPTCHA_RATE_LIMIT限制
CAPTCHA_RATE_WINDOW=60
# 验证码防刷上限(窗口期内最大获取次数)- 超过需等待窗口期结束
CAPTCHA_RATE_LIMIT=10
# 验证码字符集(去除易混淆字符:0/O/1/I/l/5/S/2/Z)
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
# ============================================================
# 邮件配置
# ============================================================
# 邮件发送方式 - smtp(SMTP协议)/ sendmail(本地sendmail)
MAIL_MAILER='smtp'
# 邮件服务器地址 - 163邮箱:smtp.163.com,QQ邮箱:smtp.qq.com
MAIL_SERVER='smtp.163.com'
# 邮件服务器端口 - 465(SSL加密)/ 587(TLS加密)
MAIL_PORT=465
# 是否启用SSL加密 - True启用 / False不启用
MAIL_USE_SSL=True
# 授权邮箱用户名 - 发送邮件的邮箱地址
MAIL_USERNAME=''
# 授权邮箱授权码 - 不是登录密码,需在邮箱设置中获取
MAIL_PASSWORD=''
# 邮件加密方式 - ssl / tls,与端口对应
MAIL_ENCRYPTION=''
# 邮件发件人名称 - 显示在收件人处的名称
MAIL_FROM_NAME=''
# 邮件发件人地址 - 与MAIL_USERNAME保持一致
MAIL_FROM_ADDRESS=''
# ============================================================
# 短信配置(阿里云)
# ============================================================
# 短信服务商 - 当前仅支持aliyun,预留扩展
SMS_PROVIDER=aliyun
# 阿里云AccessKey ID - 在阿里云控制台 > RAM访问控制中获取
SMS_ALIYUN_ACCESS_KEY_ID=''
# 阿里云AccessKey Secret - 请妥善保管,不要提交到代码仓库
SMS_ALIYUN_ACCESS_KEY_SECRET=''
# 短信签名 - 需在阿里云控制台 > 短信服务中审核通过
SMS_ALIYUN_SIGN_NAME=''
# 短信服务接入点 - 默认杭州区域(cn-hangzhou),一般无需修改
SMS_ALIYUN_ENDPOINT=dysmsapi.aliyuncs.com
# 连接超时(毫秒)- 建立连接的最大等待时间
SMS_ALIYUN_CONNECT_TIMEOUT=10000
# 读取超时(毫秒)- 等待服务端响应的最大时间
SMS_ALIYUN_READ_TIMEOUT=10000
# ============================================================
# JWT令牌配置
# ============================================================
# JWT密钥 - 用于令牌签名和验证,至少32字节,务必使用强随机密钥
# 生成方式:python -c "import secrets; print(secrets.token_urlsafe(48))"
# 切勿使用默认值,否则存在安全风险!
JWT_SALT='VHMlRyV000Tx8xbGtV7k0JG7RhRPE90_oPmUU3c2IzG_3B1ApWIJt1LGLWe83vOG'
# 滑动会话空闲超时(分钟)- 用户此时间内无请求则过期需重新登录,活跃则自动续期
JWT_EXPIRE_MINUTES=20
# 令牌绝对有效期(分钟)- 即使一直活跃最长有效时间(防止无限续期),需大于 JWT_EXPIRE_MINUTES
JWT_ABSOLUTE_TIMEOUT_MINUTES=1440
# 登录失败次数上限 - 同一IP+用户名连续失败超过此次数后锁定
LOGIN_FAIL_MAX=5
# 登录锁定时间(秒)- 锁定期间禁止该IP+用户名登录
LOGIN_LOCK_SECONDS=300
# ============================================================
# 登录白名单配置(支持通配符)
# ============================================================
# 精确匹配白名单 - 逗号分隔,完全匹配路径才放行
# 常见路径:/login、/captcha、/favicon.ico
LOGIN_WHITELIST_EXACT=/api/v1/login,/api/v1/captcha,/favicon.ico,/health
# 前缀匹配白名单 - 逗号分隔,路径以此开头即放行
# 常见路径:/job/sendSms、/public/*、/static/*、/api/webhook/*
LOGIN_WHITELIST_PREFIX=/api/v1/job/sendSms,/public,/static,/api/webhook
# 通配符匹配白名单 - 逗号分隔,支持*和?通配符
# * 匹配任意多个字符,? 匹配单个字符
# 示例:/job/*/send* 匹配 /job/1/sendSms、/job/2/sendEmail
# /api/v1/*/public* 匹配 /api/v1/user/publicInfo
LOGIN_WHITELIST_WILDCARD=/api/v1/job/*/send*,/api/v1/*/public*
# 是否启用白名单调试日志 - True打印匹配日志 / False不打印
LOGIN_WHITELIST_DEBUG=True
# 是否在白名单模式下记录访问日志 - True记录 / False不记录
LOGIN_WHITELIST_LOG_ACCESS=True
# ============================================================
# 权限验证配置
# ============================================================
# 是否启用权限验证 - True启用(需要登录验证)/ False禁用(所有请求放行)
# 注意:定时任务等无用户场景建议设置为False或使用内部API密钥
PERMISSION_ENABLED=True
# 系统内部调用的API密钥 - 用于定时任务等无用户场景
# 调用方需在请求头中携带 X-Internal-API-Key 或 X-Scheduler-Key
INTERNAL_API_KEY=4sgEM_G_VSv3s3fQWIDrMrH6lpJReDbeDotogr7fyxsJH9Y5IUrn1nVCIBRZbHQk
# 内部调用白名单IP - 逗号分隔,支持通配符如127.0.0.*
# 在此列表中的IP发起的请求将跳过权限验证
# 本地开发默认放行127.0.0.1,生产环境应配置为定时任务服务器的IP
INTERNAL_ALLOWED_IPS=127.0.0.1