Files
rxthinkcmf-wiki/RXThinkCMF_ThinkPhp6_AntdVue/zh/quickstart/env-vars.md
T
2026-10-10 12:20:37 +08:00

265 lines
9.2 KiB
Markdown
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.
# 2.5 环境变量配置
:::tip 概述
项目使用 `.env` 文件管理环境变量,支持开发、测试、生产等多环境切换。配置优先级:`.env` > `config/*.php` > 代码默认值。
:::
## .env 文件结构
项目 `.env` 文件采用 INI 分组格式,每个分组对应一个 `config/*.php` 配置文件:
```ini
; =============================================================================
; .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.antdvue ; 数据库名
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_AntdVue\uploads ; 上传根目录(绝对路径)
DOMAIN_URL = http://file.thinkphp6.antdvue ; 文件访问域名
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` | 模块应用名(影响路由前缀和前端目录) |
## 多环境配置
### 开发环境
```ini
; 开发环境配置(调试开启,使用文件缓存)
APP_DEBUG = true ; 开启调试模式
[APP]
SHOW_ERROR_MSG = true ; 显示错误详情
[DATABASE]
DEBUG = true ; 显示执行的 SQL
[CACHE]
DRIVER = file ; 使用文件缓存(无需 Redis)
```
### 生产环境
```ini
; 生产环境配置(调试关闭,使用 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 ; 限制为实际域名
```
### 生成强密钥
```bash
# 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`(开发环境)
```bash
# API 接口基础路径(Vite 代理会将此路径的请求转发到后端)
VITE_GLOB_API_URL=/api
# API 前缀(一般留空)
VITE_GLOB_API_URL_PREFIX=
# 是否启用 Mock 数据(false = 使用真实后端 API)
VITE_USE_MOCK=false
```
### `.env.production`(生产环境)
```bash
# API 接口基础路径(生产环境的实际后端地址)
VITE_GLOB_API_URL=/api
# API 前缀
VITE_GLOB_API_URL_PREFIX=
```
在代码中访问环境变量:
```typescript
// 通过 import.meta.env 访问 Vite 环境变量
// VITE_ 前缀的变量才会被暴露给客户端代码
const apiUrl = import.meta.env.VITE_GLOB_API_URL
```