235 lines
11 KiB
Bash
235 lines
11 KiB
Bash
# ============================================================
|
||
# 基础配置
|
||
# ============================================================
|
||
|
||
# 应用名称 - 用于界面显示和日志标识
|
||
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
|