9.2 KiB
9.2 KiB
2.5 环境变量配置
:::tip 概述
项目使用 .env 文件管理环境变量,支持开发、测试、生产等多环境切换。配置优先级:.env > config/*.php > 代码默认值。
:::
.env 文件结构
项目 .env 文件采用 INI 分组格式,每个分组对应一个 config/*.php 配置文件:
; =============================================================================
; .env 环境变量配置文件
; =============================================================================
; 格式:INI 分组格式,[分组] 下的键值对通过 env() 函数读取
; 优先级:.env > config/*.php > 代码默认值
; =============================================================================
; 全局开关(不属于任何分组)
APP_DEBUG = true ; 调试模式(开发 true,生产 false)
[APP]
DEFAULT_TIMEZONE = Asia/Shanghai ; 默认时区
DEMO = false ; 演示模式(true=拦截所有写操作)
SHOW_ERROR_MSG = true ; 显示错误详情(生产环境设为 false)
[DATABASE]
TYPE = mysql ; 数据库类型(mysql / pgsql / sqlsrv / oracle / sqlite)
HOSTNAME = 127.0.0.1 ; 数据库服务器地址
DATABASE = rxthinkcmf.thinkphp6.naivevue ; 数据库名
USERNAME = root ; 用户名
PASSWORD = root ; 密码
HOSTPORT = 3306 ; 端口
CHARSET = utf8mb4 ; 字符集(支持 emoji)
DEBUG = true ; SQL 调试(显示执行的 SQL 语句)
PREFIX = think_ ; 表前缀
[JWT]
SECRET = rxthinkcmf_jwt_secret_key_2024 ; 签名密钥(生产环境务必修改)
ACCESS_TTL = 7200 ; access_token 有效期(秒),默认 2 小时
REFRESH_TTL = 604800 ; refresh_token 有效期(秒),默认 7 天
ISSUER = rxthinkcmf ; 签发者标识
[FILE]
UPLOAD_DIR = D:\xampp8.2\htdocs\RXThinkCMF_ThinkPhp6_NaiveVue\uploads ; 上传根目录(绝对路径)
DOMAIN_URL = http://file.thinkphp6.naivevue ; 文件访问域名
IMAGE_EXT = gif,jpg,jpeg,png,bmp,webp,svg ; 允许的图片后缀
FILE_EXT = gif,jpg,jpeg,png,bmp,webp,svg,doc,docx,xls,xlsx,ppt,pptx,pdf,zip,rar,txt,csv,mp3,mp4,sql,js,css ; 允许的文件后缀
MAX_SIZE = 10 ; 单文件最大大小(MB)
[CACHE]
DRIVER = file ; 缓存驱动(file=文件,redis=Redis)
REDIS_HOST = 127.0.0.1 ; Redis 地址(driver=redis 时生效)
REDIS_PORT = 6379 ; Redis 端口
REDIS_PASSWORD = ; Redis 密码(无密码留空)
REDIS_DB = 0 ; Redis 数据库编号
REDIS_PREFIX = rx: ; 缓存键前缀
[CORS]
ALLOW_ORIGIN = * ; 允许的来源(* = 所有)
[API]
CAMEL_SNAKE_CONVERT = true ; 驼峰/下划线自动转换
[CAPTCHA]
CAPTCHA_BYPASS_CODE = ; 万能验证码(开发用,生产务必留空)
CAPTCHA_LENGTH = 6 ; 验证码字符长度(4-6位)
CAPTCHA_EXPIRE = 300 ; 验证码过期时间(秒)
[LANG]
default_lang = zh-cn ; 默认语言
配置项详解
应用配置 [APP]
| 变量 | 默认值 | 说明 |
|---|---|---|
DEFAULT_TIMEZONE |
Asia/Shanghai |
默认时区 |
DEMO |
false |
演示模式,开启后拦截所有写操作 |
SHOW_ERROR_MSG |
true |
是否显示错误详情,生产环境设为 false |
全局变量(不属于任何分组):
| 变量 | 默认值 | 说明 |
|---|---|---|
APP_DEBUG |
true |
调试模式,生产环境设为 false |
数据库配置 [DATABASE]
| 变量 | 默认值 | 说明 |
|---|---|---|
TYPE |
mysql |
数据库类型:mysql / pgsql / sqlsrv / oracle / sqlite |
HOSTNAME |
127.0.0.1 |
数据库主机 |
DATABASE |
- | 数据库名称(SQLite 为文件路径) |
USERNAME |
root |
数据库用户名 |
PASSWORD |
- | 数据库密码 |
HOSTPORT |
3306 |
数据库端口 |
CHARSET |
utf8mb4 |
字符集 |
DEBUG |
true |
是否开启 SQL 调试 |
PREFIX |
think_ |
表前缀 |
JWT 配置 [JWT]
| 变量 | 默认值 | 说明 |
|---|---|---|
SECRET |
内置默认值 | 签名密钥,生产环境务必修改 |
ACCESS_TTL |
7200 |
access_token 有效期(秒),默认 2 小时 |
REFRESH_TTL |
604800 |
refresh_token 有效期(秒),默认 7 天 |
ISSUER |
rxthinkcmf |
签发者标识 |
文件上传配置 [FILE]
| 变量 | 默认值 | 说明 |
|---|---|---|
UPLOAD_DIR |
- | 上传根目录(绝对路径) |
DOMAIN_URL |
- | 文件访问域名 |
IMAGE_EXT |
gif,jpg,jpeg,png,bmp,webp,svg |
允许的图片后缀 |
FILE_EXT |
多种后缀 | 允许的文件后缀 |
MAX_SIZE |
10 |
单文件最大大小(MB) |
缓存配置 [CACHE]
| 变量 | 默认值 | 说明 |
|---|---|---|
DRIVER |
file |
缓存驱动:file 或 redis |
REDIS_HOST |
127.0.0.1 |
Redis 主机(driver=redis 时生效) |
REDIS_PORT |
6379 |
Redis 端口(driver=redis 时生效) |
REDIS_PASSWORD |
- | Redis 密码 |
REDIS_DB |
0 |
Redis 数据库编号 |
REDIS_PREFIX |
rx: |
缓存键前缀 |
CORS 配置 [CORS]
| 变量 | 默认值 | 说明 |
|---|---|---|
ALLOW_ORIGIN |
* |
允许的来源,* 表示所有 |
API 配置 [API]
| 变量 | 默认值 | 说明 |
|---|---|---|
CAMEL_SNAKE_CONVERT |
true |
驼峰/下划线自动转换开关 |
验证码配置 [CAPTCHA]
| 变量 | 默认值 | 说明 |
|---|---|---|
CAPTCHA_BYPASS_CODE |
(空) | 万能验证码,跳过验证。仅用于开发调试,生产环境务必留空 |
CAPTCHA_LENGTH |
6 |
验证码字符长度(4-6位) |
CAPTCHA_EXPIRE |
300 |
验证码过期时间(秒),默认 5 分钟 |
CAPTCHA_RATE_WINDOW |
60 |
防刷窗口期(秒) |
CAPTCHA_RATE_LIMIT |
20 |
窗口期内最大获取次数 |
CAPTCHA_CHARS |
ABCDEFGHJKLMNPQRSTUVWXYZ2346789 |
字符集(已排除 0O、1lI 等易混淆字符) |
CAPTCHA_FONT_PATH |
static/fonts/Vera.ttf |
字体路径 |
CAPTCHA_IMAGE_WIDTH |
160 |
图片宽度(像素) |
CAPTCHA_IMAGE_HEIGHT |
50 |
图片高度(像素) |
CAPTCHA_FONT_SIZE |
28 |
字体大小 |
CAPTCHA_NOISE_LINES |
8 |
干扰线数量 |
CAPTCHA_NOISE_DOTS |
500 |
噪点数量 |
国际化配置 [LANG]
| 变量 | 默认值 | 说明 |
|---|---|---|
default_lang |
zh-cn |
默认语言 |
代码生成器配置 [GENERATOR]
| 变量 | 默认值 | 说明 |
|---|---|---|
PARENT_MENU_ID |
189 |
生成模块的父菜单ID |
APP_NAME |
tool |
模块应用名(影响路由前缀和前端目录) |
多环境配置
开发环境
; 开发环境配置(调试开启,使用文件缓存)
APP_DEBUG = true ; 开启调试模式
[APP]
SHOW_ERROR_MSG = true ; 显示错误详情
[DATABASE]
DEBUG = true ; 显示执行的 SQL
[CACHE]
DRIVER = file ; 使用文件缓存(无需 Redis)
生产环境
; 生产环境配置(调试关闭,使用 Redis 缓存)
APP_DEBUG = false ; 关闭调试模式
[APP]
SHOW_ERROR_MSG = false ; 不显示错误详情(防止泄露)
[DATABASE]
DEBUG = false ; 不显示 SQL
[CACHE]
DRIVER = redis ; 使用 Redis 缓存
REDIS_HOST = 127.0.0.1 ; Redis 地址
REDIS_PORT = 6379 ; Redis 端口
REDIS_PASSWORD = <你的Redis密码> ; Redis 密码
[JWT]
SECRET = <随机生成的强密钥> ; 签名密钥(必须修改)
[CORS]
ALLOW_ORIGIN = https://admin.example.com ; 限制为实际域名
生成强密钥
# Linux / macOS:使用 OpenSSL 生成 32 字节随机 Base64 字符串
openssl rand -base64 32
# PHP:生成 32 字节随机十六进制字符串(64 个字符)
# random_bytes(32) → 32 字节密码学安全随机数
# bin2hex() → 转为十六进制字符串
php -r "echo bin2hex(random_bytes(32));"
前端环境变量
前端使用 Vite 的环境变量机制,配置文件位于 ui/ 目录:
.env.development(开发环境)
# API 接口基础路径(Vite 代理会将此路径的请求转发到后端)
VITE_GLOB_API_URL=/api
# API 前缀(一般留空)
VITE_GLOB_API_URL_PREFIX=
# 是否启用 Mock 数据(false = 使用真实后端 API)
VITE_USE_MOCK=false
.env.production(生产环境)
# API 接口基础路径(生产环境的实际后端地址)
VITE_GLOB_API_URL=/api
# API 前缀
VITE_GLOB_API_URL_PREFIX=
在代码中访问环境变量:
// 通过 import.meta.env 访问 Vite 环境变量
// VITE_ 前缀的变量才会被暴露给客户端代码
const apiUrl = import.meta.env.VITE_GLOB_API_URL