签入版本
This commit is contained in:
@@ -0,0 +1,192 @@
|
|||||||
|
# +======================================================================
|
||||||
|
# | 模块: 环境配置文件模板
|
||||||
|
# | 说明: 提供完整的 .env 配置示例,包含应用、数据库、缓存、JWT、验证码等
|
||||||
|
# +======================================================================
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 基础配置
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
# 应用名称 - 用于界面显示和系统标识
|
||||||
|
FASTAPI_NAME=FastAPI+EleVue旗舰版
|
||||||
|
# 应用版本 - 当前版本号
|
||||||
|
FASTAPI_VERSION=v3.0.0
|
||||||
|
# 应用运行地址 - 服务绑定的IP地址,127.0.0.1表示仅本地访问
|
||||||
|
FASTAPI_HOST=127.0.0.1
|
||||||
|
# 应用运行端口 - 服务监听的端口号
|
||||||
|
FASTAPI_PORT=8031
|
||||||
|
# 应用启动文件 - 项目入口Python文件
|
||||||
|
FASTAPI_APP=main.py
|
||||||
|
# 应用环境变量 - 运行环境:development/production/testing
|
||||||
|
FASTAPI_ENV=development
|
||||||
|
# 是否DEBUG模式 - True:开启调试(详细错误日志),False:关闭
|
||||||
|
FASTAPI_DEBUG=True
|
||||||
|
# 是否DEMO模式 - True:演示模式(限制写操作),False:正常模式
|
||||||
|
FASTAPI_DEMO=True
|
||||||
|
# 应用文件上传路径 - 用户上传文件的物理存储目录
|
||||||
|
# 默认取项目根目录下的 uploads
|
||||||
|
FASTAPI_UPLOAD_DIR=/data/apps/uploads
|
||||||
|
# 文件访问域名 - 文件资源的CDN/访问域名
|
||||||
|
FASTAPI_FILE_URL='http://images.fastapi.elevue.djangoadmin.cn'
|
||||||
|
|
||||||
|
# 允许上传的文件扩展名 - 逗号分隔,带点号
|
||||||
|
# 生产环境务必配置,防止上传.py、.exe、.sh等危险文件
|
||||||
|
UPLOAD_ALLOWED_EXTS=.jpg,.jpeg,.png,.gif,.bmp,.ico,.txt,.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.mp3,.mp4,.zip,.rar,.7z
|
||||||
|
|
||||||
|
# 上传文件大小上限(MB)- 超过此大小将被拒绝上传
|
||||||
|
UPLOAD_MAX_SIZE_MB=10
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 数据库配置
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
# 数据库驱动 - 可选 mysql/postgresql/mssql/oracle/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=***
|
||||||
|
# Oracle: DB_DRIVER=oracle DB_HOST=127.0.0.1 DB_PORT=1521 DB_USERNAME=<schema用户> DB_PASSWORD=***
|
||||||
|
# (DB_DATABASE 即服务名 service_name,schema 是连接用户)
|
||||||
|
# SQLite: DB_DRIVER=sqlite DB_DATABASE=dev.db(DB_DATABASE 即数据库文件完整路径)
|
||||||
|
DB_DRIVER='mysql'
|
||||||
|
# 数据库地址 - 数据库服务器IP或域名(sqlite 时忽略)
|
||||||
|
DB_HOST='127.0.0.1'
|
||||||
|
# 数据库端口 - MySQL:3306 / PostgreSQL:5432 / SQL Server:1433 / Oracle:1521
|
||||||
|
DB_PORT=3308
|
||||||
|
# 数据库名称 - 要连接的数据库名;Oracle 时即服务名 service_name;SQLite 时作为数据库文件路径
|
||||||
|
DB_DATABASE='djangoadmin.fastapi.elevue'
|
||||||
|
# 数据库账号 - 连接数据库的用户名(sqlite 时忽略)
|
||||||
|
DB_USERNAME='root'
|
||||||
|
# 数据库密码 - 连接数据库的密码(sqlite 时忽略)
|
||||||
|
DB_PASSWORD='root'
|
||||||
|
# 数据表前缀 - 所有数据表统一前缀
|
||||||
|
DB_PREFIX='fastapi_'
|
||||||
|
# 是否开启调试模式 - True:输出SQL执行日志,False:不输出
|
||||||
|
DB_DEBUG=True
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 缓存配置
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
# 缓存服务地址 - Redis服务器IP或域名
|
||||||
|
REDIS_HOST='127.0.0.1'
|
||||||
|
# 缓存服务端口 - Redis默认端口6379
|
||||||
|
REDIS_PORT=6379
|
||||||
|
# 缓存服务密码 - Redis认证密码(REDIS_AUTH为True时生效)
|
||||||
|
REDIS_PASSWORD="123456"
|
||||||
|
# 缓存库索引 - Redis数据库编号(0-15)
|
||||||
|
REDIS_INDEX=0
|
||||||
|
# 是否启用用户认证 - True:需要密码验证,False:无需验证
|
||||||
|
REDIS_AUTH=True
|
||||||
|
# 是否自动解码响应 - True:返回字符串,False:返回字节数据
|
||||||
|
REDIS_DECODE_RESPONSES=True
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# JWT令牌配置
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
# JWT密钥 - 用于令牌签名和验证,至少32字节,务必使用强随机密钥
|
||||||
|
# 生成方式:python -c "import secrets; print(secrets.token_urlsafe(48))"
|
||||||
|
JWT_SALT='VHMlRyV000Tx8xbGtV7k0JG7RhRPE90_oPmUU3c2IzG_3B1ApWIJt1LGLWe83vOG'
|
||||||
|
|
||||||
|
# JWT令牌过期时间(分钟)- 默认20分钟
|
||||||
|
JWT_EXPIRE_MINUTES=20
|
||||||
|
|
||||||
|
# 登录失败次数上限 - 同一IP+用户名连续失败超过此次数后锁定
|
||||||
|
LOGIN_FAIL_MAX=5
|
||||||
|
# 登录锁定时间(秒)- 锁定期间禁止该IP+用户名登录
|
||||||
|
LOGIN_LOCK_SECONDS=300
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 验证码配置
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
# 验证码字符长度(4-6位)
|
||||||
|
CAPTCHA_LENGTH=6
|
||||||
|
# 验证码过期时间(秒),默认5分钟
|
||||||
|
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 与代理配置
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
# CORS允许的源 - 逗号分隔
|
||||||
|
CORS_ALLOWED_ORIGINS=http://localhost:8001
|
||||||
|
|
||||||
|
# 可信代理层数 - 0=不信任X-Forwarded-For,>=1 表示在反向代理后
|
||||||
|
TRUSTED_PROXY_COUNT=0
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 邮件配置
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
# 邮件传输代理
|
||||||
|
MAIL_MAILER='smtp'
|
||||||
|
# 邮件服务地址
|
||||||
|
MAIL_SERVER='smtp.163.com'
|
||||||
|
# 邮件服务端口
|
||||||
|
MAIL_PORT=465
|
||||||
|
# 是否启用SSL加密
|
||||||
|
MAIL_USE_SSL=True
|
||||||
|
# 授权邮箱用户名
|
||||||
|
MAIL_USERNAME=''
|
||||||
|
# 授权邮箱授权码
|
||||||
|
MAIL_PASSWORD=''
|
||||||
|
# 邮件加密串
|
||||||
|
MAIL_ENCRYPTION=''
|
||||||
|
# 邮件发件人名称
|
||||||
|
MAIL_FROM_NAME=''
|
||||||
|
# 邮件发件人地址
|
||||||
|
MAIL_FROM_ADDRESS=''
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 短信配置
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
# 短信服务地址
|
||||||
|
SMS_URL=''
|
||||||
|
# 短信服务API密钥
|
||||||
|
SMS_API_KEY=''
|
||||||
|
# 短信签名
|
||||||
|
SMS_SIGN=''
|
||||||
|
# 短信模板ID
|
||||||
|
SMS_TEMPLATE_ID=''
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 请求限流(可选,默认关闭)
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
# 是否启用请求级 IP 限流中间件
|
||||||
|
# RATE_LIMIT_ENABLED=False
|
||||||
|
# 单窗口内每个 IP 最大请求数
|
||||||
|
# RATE_LIMIT_LIMIT=100
|
||||||
|
# 统计窗口时长(秒)
|
||||||
|
# RATE_LIMIT_WINDOW_SECONDS=60
|
||||||
|
# Redis 计数 key 前缀
|
||||||
|
# RATE_LIMIT_KEY_PREFIX=rl:
|
||||||
+3
-3
@@ -22,9 +22,9 @@ evui/
|
|||||||
document/*
|
document/*
|
||||||
!document/数据库迁移_runbook.md
|
!document/数据库迁移_runbook.md
|
||||||
# ---- DjangoAdmin refactor additions ----
|
# ---- DjangoAdmin refactor additions ----
|
||||||
.env
|
#.env
|
||||||
.env.*
|
#.env.*
|
||||||
!.env.example
|
#!.env.example
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.py[cod]
|
*.py[cod]
|
||||||
.pytest_cache/
|
.pytest_cache/
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
masterProfiles: ['','uat','prod']
|
||||||
|
Profiles: ['','dev']
|
||||||
|
jobConfigFile: "djangoadminConfig.yml"
|
||||||
|
npmCompileCMD: |
|
||||||
|
export PATH=/usr/local/node/bin:$PATH
|
||||||
|
set -e \
|
||||||
|
&& yarn config set registry https://registry.npmmirror.com \
|
||||||
|
&& yarn config get registry \
|
||||||
|
&& yarn config set strict-ssl false \
|
||||||
|
&& yarn config set sass_binary_site https://repo.huaweicloud.com/node-sass/node-sass \
|
||||||
|
&& rm -rf package-lock.json \
|
||||||
|
&& rm -rf node_modules/.cache 2>/dev/null || true \
|
||||||
|
&& yarn cache clean --force \
|
||||||
|
&& yarn global add node-gyp@10.3.1 \
|
||||||
|
&& yarn install --unsafe-perm --legacy-peer-deps --network-timeout 300000 \
|
||||||
|
&& yarn run build:${PROFILE}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# port
|
||||||
|
VITE_PORT = 8001
|
||||||
|
|
||||||
|
# spa-title
|
||||||
|
VITE_GLOB_APP_TITLE = FastAPI+ElementPlus版
|
||||||
|
|
||||||
|
# spa shortname
|
||||||
|
VITE_GLOB_APP_SHORT_NAME = DjangoAdmin
|
||||||
|
|
||||||
|
# 生产环境 开启mock
|
||||||
|
VITE_GLOB_PROD_MOCK = false
|
||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
# 只在开发模式中被载入
|
||||||
|
VITE_PORT = 8001
|
||||||
|
|
||||||
|
# 网站根目录
|
||||||
|
VITE_PUBLIC_PATH = /
|
||||||
|
|
||||||
|
# 是否开启mock
|
||||||
|
VITE_USE_MOCK = false
|
||||||
|
|
||||||
|
# 是否删除console
|
||||||
|
VITE_DROP_CONSOLE = true
|
||||||
|
|
||||||
|
# 跨域代理,可以配置多个,请注意不要换行
|
||||||
|
VITE_PROXY=[["/api","http://192.168.124.127:9010/api"]]
|
||||||
|
|
||||||
|
# API 接口地址
|
||||||
|
VITE_GLOB_API_URL =
|
||||||
|
|
||||||
|
# 图片上传地址
|
||||||
|
VITE_GLOB_UPLOAD_URL=
|
||||||
|
|
||||||
|
# 图片前缀地址
|
||||||
|
VITE_GLOB_IMG_URL=
|
||||||
|
# 是否启用gzip压缩或brotli压缩
|
||||||
|
# 可选: gzip | brotli | none
|
||||||
|
# 如果你需要多种形式,你可以用','来分隔
|
||||||
|
VITE_BUILD_COMPRESS = 'none'
|
||||||
|
|
||||||
|
# 使用压缩时是否删除原始文件,默认为false
|
||||||
|
VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false
|
||||||
|
# 接口前缀
|
||||||
|
VITE_GLOB_API_URL_PREFIX = /api
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# 只在开发模式中被载入
|
||||||
|
VITE_PORT = 8001
|
||||||
|
|
||||||
|
# 网站根目录
|
||||||
|
VITE_PUBLIC_PATH = /
|
||||||
|
|
||||||
|
# 是否开启mock
|
||||||
|
VITE_USE_MOCK = false
|
||||||
|
|
||||||
|
# 是否删除console
|
||||||
|
VITE_DROP_CONSOLE = true
|
||||||
|
|
||||||
|
# 跨域代理,可以配置多个,请注意不要换行
|
||||||
|
VITE_PROXY=[["/api", "http://127.0.0.1:8031/api/v1"]]
|
||||||
|
|
||||||
|
# API 接口地址
|
||||||
|
VITE_GLOB_API_URL =
|
||||||
|
|
||||||
|
# 图片上传地址
|
||||||
|
VITE_GLOB_UPLOAD_URL=
|
||||||
|
|
||||||
|
# 图片前缀地址
|
||||||
|
VITE_GLOB_IMG_URL=
|
||||||
|
# 是否启用gzip压缩或brotli压缩
|
||||||
|
# 可选: gzip | brotli | none
|
||||||
|
# 如果你需要多种形式,你可以用','来分隔
|
||||||
|
VITE_BUILD_COMPRESS = 'none'
|
||||||
|
|
||||||
|
# 使用压缩时是否删除原始文件,默认为false
|
||||||
|
VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false
|
||||||
|
# 接口前缀
|
||||||
|
VITE_GLOB_API_URL_PREFIX = /api
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
# 是否开启mock
|
||||||
|
VITE_USE_MOCK = false
|
||||||
|
|
||||||
|
# 网站根目录
|
||||||
|
VITE_PUBLIC_PATH = /
|
||||||
|
|
||||||
|
# 是否删除console
|
||||||
|
VITE_DROP_CONSOLE = true
|
||||||
|
|
||||||
|
# API
|
||||||
|
VITE_GLOB_API_URL =
|
||||||
|
|
||||||
|
# 图片上传地址
|
||||||
|
VITE_GLOB_UPLOAD_URL=
|
||||||
|
|
||||||
|
# 图片前缀地址
|
||||||
|
VITE_GLOB_IMG_URL=
|
||||||
|
|
||||||
|
# 接口前缀
|
||||||
|
VITE_GLOB_API_URL_PREFIX = /api
|
||||||
|
|
||||||
|
# 是否启用gzip压缩或brotli压缩
|
||||||
|
# 可选: gzip | brotli | none
|
||||||
|
# 如果你需要多种形式,你可以用','来分隔
|
||||||
|
VITE_BUILD_COMPRESS = 'none'
|
||||||
|
|
||||||
|
# 使用压缩时是否删除原始文件,默认为false
|
||||||
|
VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# 是否开启mock
|
||||||
|
VITE_USE_MOCK = false
|
||||||
|
|
||||||
|
# 网站根目录
|
||||||
|
VITE_PUBLIC_PATH = /
|
||||||
|
|
||||||
|
# 网站前缀
|
||||||
|
VITE_BASE_URL = /
|
||||||
|
|
||||||
|
# 是否删除console
|
||||||
|
VITE_DROP_CONSOLE = true
|
||||||
|
|
||||||
|
# API
|
||||||
|
VITE_GLOB_API_URL =
|
||||||
|
|
||||||
|
# 图片上传地址
|
||||||
|
VITE_GLOB_UPLOAD_URL =
|
||||||
|
|
||||||
|
# 图片前缀地址
|
||||||
|
VITE_GLOB_IMG_URL =
|
||||||
|
|
||||||
|
# 接口前缀
|
||||||
|
VITE_GLOB_API_URL_PREFIX = /api
|
||||||
|
|
||||||
|
# 是否启用gzip压缩或brotli压缩
|
||||||
|
# 可选: gzip | brotli | none
|
||||||
|
# 如果你需要多种形式,你可以用','来分隔
|
||||||
|
VITE_BUILD_COMPRESS = 'none'
|
||||||
|
|
||||||
|
# 使用压缩时是否删除原始文件,默认为false
|
||||||
|
VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false
|
||||||
+31
@@ -0,0 +1,31 @@
|
|||||||
|
# 是否开启mock
|
||||||
|
VITE_USE_MOCK = false
|
||||||
|
|
||||||
|
# 网站根目录
|
||||||
|
VITE_PUBLIC_PATH = /
|
||||||
|
|
||||||
|
# 网站前缀
|
||||||
|
VITE_BASE_URL = /
|
||||||
|
|
||||||
|
# 是否删除console
|
||||||
|
VITE_DROP_CONSOLE = true
|
||||||
|
|
||||||
|
# API
|
||||||
|
VITE_GLOB_API_URL =
|
||||||
|
|
||||||
|
# 图片上传地址
|
||||||
|
VITE_GLOB_UPLOAD_URL =
|
||||||
|
|
||||||
|
# 图片前缀地址
|
||||||
|
VITE_GLOB_IMG_URL =
|
||||||
|
|
||||||
|
# 接口前缀
|
||||||
|
VITE_GLOB_API_URL_PREFIX = /api
|
||||||
|
|
||||||
|
# 是否启用gzip压缩或brotli压缩
|
||||||
|
# 可选: gzip | brotli | none
|
||||||
|
# 如果你需要多种形式,你可以用','来分隔
|
||||||
|
VITE_BUILD_COMPRESS = 'none'
|
||||||
|
|
||||||
|
# 使用压缩时是否删除原始文件,默认为false
|
||||||
|
VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false
|
||||||
Reference in New Issue
Block a user