Files
rxthinkcmf-wiki/RXThinkCMF_ThinkPhp8_EleVue/.vitepress/dist/assets/zh_quickstart_env-vars.md.CRDwk5l1.js
T
2026-10-25 18:52:36 +08:00

109 lines
39 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
import{_ as i,o as a,c as t,a2 as n}from"./chunks/framework.B-QBKwc1.js";const c=JSON.parse('{"title":"环境变量配置","description":"项目使用 .env 文件管理环境变量,支持开发、测试、生产等多环境切换。","frontmatter":{},"headers":[],"relativePath":"zh/quickstart/env-vars.md","filePath":"zh/quickstart/env-vars.md"}'),h={name:"zh/quickstart/env-vars.md"};function e(l,s,d,p,k,r){return a(),t("div",null,[...s[0]||(s[0]=[n(`<h1 id="_2-5-环境变量配置" tabindex="-1">2.5 环境变量配置 <a class="header-anchor" href="#_2-5-环境变量配置" aria-label="Permalink to &quot;2.5 环境变量配置&quot;">​</a></h1><div class="tip custom-block"><p class="custom-block-title">概述</p><p>项目使用 <code>.env</code> 文件管理环境变量,支持开发、测试、生产等多环境切换。配置优先级:<code>.env</code> &gt; <code>config/*.php</code> &gt; 代码默认值。</p></div><h2 id="-env-文件结构" tabindex="-1">.env 文件结构 <a class="header-anchor" href="#-env-文件结构" aria-label="Permalink to &quot;.env 文件结构&quot;">​</a></h2><p>项目 <code>.env</code> 文件采用 INI 分组格式,每个分组对应一个 <code>config/*.php</code> 配置文件:</p><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; =============================================================================</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; .env 环境变量配置文件</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; =============================================================================</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 格式:INI 分组格式,[分组] 下的键值对通过 env() 函数读取</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 优先级:.env &gt; config/*.php &gt; 代码默认值</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; =============================================================================</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 全局开关(不属于任何分组)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">APP_DEBUG</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> true </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 调试模式(开发 true,生产 false)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">APP</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DEFAULT_TIMEZONE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> Asia/Shanghai </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 默认时区</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DEMO</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> false </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 演示模式(true=拦截所有写操作)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">SHOW_ERROR_MSG</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> true </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 显示错误详情(生产环境设为 false)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">DATABASE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">TYPE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> mysql </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 数据库类型(mysql / pgsql / sqlsrv / oracle / sqlite)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">HOSTNAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 127.0.0.1 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 数据库服务器地址</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DATABASE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> rxthinkcmf.thinkphp8.elevue </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 数据库名</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">USERNAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> root </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 用户名</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">PASSWORD</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> root </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 密码</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">HOSTPORT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 3306 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 端口</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">CHARSET</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> utf8mb4 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 字符集(支持 emoji)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DEBUG</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> true </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; SQL 调试(显示执行的 SQL 语句)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">PREFIX</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_ </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 表前缀</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">JWT</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">SECRET</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> rxthinkcmf_jwt_secret_key_2024 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 签名密钥(生产环境务必修改)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ACCESS_TTL</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 7200 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; access_token 有效期(秒),默认 2 小时</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">REFRESH_TTL</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 604800 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; refresh_token 有效期(秒),默认 7 天</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ISSUER</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> rxthinkcmf </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 签发者标识</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">FILE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">UPLOAD_DIR</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> D:\\xampp8.2\\htdocs\\RXThinkCMF_ThinkPhp8_EleVue\\uploads </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 上传根目录(绝对路径)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DOMAIN_URL</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> http://file.thinkphp8.elevue </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 文件访问域名</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">IMAGE_EXT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> gif,jpg,jpeg,png,bmp,webp,svg </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 允许的图片后缀</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">FILE_EXT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> gif,jpg,jpeg,png,bmp,webp,svg,doc,docx,xls,xlsx,ppt,pptx,pdf,zip,rar,txt,csv,mp3,mp4,sql,js,css </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 允许的文件后缀</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">MAX_SIZE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 10 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 单文件最大大小(MB)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">CACHE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DRIVER</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> file </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 缓存驱动(file=文件,redis=Redis)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">REDIS_HOST</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 127.0.0.1 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; Redis 地址(driver=redis 时生效)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">REDIS_PORT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 6379 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; Redis 端口</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">REDIS_PASSWORD</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> ; Redis 密码(无密码留空)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">REDIS_DB</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 0 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; Redis 数据库编号</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">REDIS_PREFIX</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> rx: </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 缓存键前缀</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">CORS</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALLOW_ORIGIN</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> * </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 允许的来源(* = 所有)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">API</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">CAMEL_SNAKE_CONVERT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> true </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 驼峰/下划线自动转换</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">CAPTCHA</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">CAPTCHA_BYPASS_CODE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> ; 万能验证码(开发用,生产务必留空)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">CAPTCHA_LENGTH</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 6 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 验证码字符长度(4-6位)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">CAPTCHA_EXPIRE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 300 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 验证码过期时间(秒)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">LANG</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">default_lang</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> zh-cn </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 默认语言</span></span></code></pre></div><h2 id="配置项详解" tabindex="-1">配置项详解 <a class="header-anchor" href="#配置项详解" aria-label="Permalink to &quot;配置项详解&quot;">​</a></h2><h3 id="应用配置-APP-" tabindex="-1">应用配置 <code>[APP]</code> <a class="header-anchor" href="#应用配置-APP-" aria-label="Permalink to &quot;应用配置 \`[APP]\`&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>DEFAULT_TIMEZONE</code></td><td><code>Asia/Shanghai</code></td><td>默认时区</td></tr><tr><td><code>DEMO</code></td><td><code>false</code></td><td>演示模式,开启后拦截所有写操作</td></tr><tr><td><code>SHOW_ERROR_MSG</code></td><td><code>true</code></td><td>是否显示错误详情,生产环境设为 <code>false</code></td></tr></tbody></table><p>全局变量(不属于任何分组):</p><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>APP_DEBUG</code></td><td><code>true</code></td><td>调试模式,生产环境设为 <code>false</code></td></tr></tbody></table><h3 id="数据库配置-DATABASE-" tabindex="-1">数据库配置 <code>[DATABASE]</code> <a class="header-anchor" href="#数据库配置-DATABASE-" aria-label="Permalink to &quot;数据库配置 \`[DATABASE]\`&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>TYPE</code></td><td><code>mysql</code></td><td>数据库类型:mysql / pgsql / sqlsrv / oracle / sqlite</td></tr><tr><td><code>HOSTNAME</code></td><td><code>127.0.0.1</code></td><td>数据库主机</td></tr><tr><td><code>DATABASE</code></td><td>-</td><td>数据库名称(SQLite 为文件路径)</td></tr><tr><td><code>USERNAME</code></td><td><code>root</code></td><td>数据库用户名</td></tr><tr><td><code>PASSWORD</code></td><td>-</td><td>数据库密码</td></tr><tr><td><code>HOSTPORT</code></td><td><code>3306</code></td><td>数据库端口</td></tr><tr><td><code>CHARSET</code></td><td><code>utf8mb4</code></td><td>字符集</td></tr><tr><td><code>DEBUG</code></td><td><code>true</code></td><td>是否开启 SQL 调试</td></tr><tr><td><code>PREFIX</code></td><td><code>think_</code></td><td>表前缀</td></tr></tbody></table><h3 id="JWT-配置-JWT-" tabindex="-1">JWT 配置 <code>[JWT]</code> <a class="header-anchor" href="#JWT-配置-JWT-" aria-label="Permalink to &quot;JWT 配置 \`[JWT]\`&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>SECRET</code></td><td>内置默认值</td><td>签名密钥,<strong>生产环境务必修改</strong></td></tr><tr><td><code>ACCESS_TTL</code></td><td><code>7200</code></td><td>access_token 有效期(秒),默认 2 小时</td></tr><tr><td><code>REFRESH_TTL</code></td><td><code>604800</code></td><td>refresh_token 有效期(秒),默认 7 天</td></tr><tr><td><code>ISSUER</code></td><td><code>rxthinkcmf</code></td><td>签发者标识</td></tr></tbody></table><h3 id="文件上传配置-FILE-" tabindex="-1">文件上传配置 <code>[FILE]</code> <a class="header-anchor" href="#文件上传配置-FILE-" aria-label="Permalink to &quot;文件上传配置 \`[FILE]\`&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>UPLOAD_DIR</code></td><td>-</td><td>上传根目录(绝对路径)</td></tr><tr><td><code>DOMAIN_URL</code></td><td>-</td><td>文件访问域名</td></tr><tr><td><code>IMAGE_EXT</code></td><td><code>gif,jpg,jpeg,png,bmp,webp,svg</code></td><td>允许的图片后缀</td></tr><tr><td><code>FILE_EXT</code></td><td>多种后缀</td><td>允许的文件后缀</td></tr><tr><td><code>MAX_SIZE</code></td><td><code>10</code></td><td>单文件最大大小(MB)</td></tr></tbody></table><h3 id="缓存配置-CACHE-" tabindex="-1">缓存配置 <code>[CACHE]</code> <a class="header-anchor" href="#缓存配置-CACHE-" aria-label="Permalink to &quot;缓存配置 \`[CACHE]\`&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>DRIVER</code></td><td><code>file</code></td><td>缓存驱动:<code>file</code> 或 <code>redis</code></td></tr><tr><td><code>REDIS_HOST</code></td><td><code>127.0.0.1</code></td><td>Redis 主机(driver=redis 时生效)</td></tr><tr><td><code>REDIS_PORT</code></td><td><code>6379</code></td><td>Redis 端口(driver=redis 时生效)</td></tr><tr><td><code>REDIS_PASSWORD</code></td><td>-</td><td>Redis 密码</td></tr><tr><td><code>REDIS_DB</code></td><td><code>0</code></td><td>Redis 数据库编号</td></tr><tr><td><code>REDIS_PREFIX</code></td><td><code>rx:</code></td><td>缓存键前缀</td></tr></tbody></table><h3 id="CORS-配置-CORS-" tabindex="-1">CORS 配置 <code>[CORS]</code> <a class="header-anchor" href="#CORS-配置-CORS-" aria-label="Permalink to &quot;CORS 配置 \`[CORS]\`&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>ALLOW_ORIGIN</code></td><td><code>*</code></td><td>允许的来源,<code>*</code> 表示所有</td></tr></tbody></table><h3 id="API-配置-API-" tabindex="-1">API 配置 <code>[API]</code> <a class="header-anchor" href="#API-配置-API-" aria-label="Permalink to &quot;API 配置 \`[API]\`&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>CAMEL_SNAKE_CONVERT</code></td><td><code>true</code></td><td>驼峰/下划线自动转换开关</td></tr></tbody></table><h3 id="验证码配置-CAPTCHA-" tabindex="-1">验证码配置 <code>[CAPTCHA]</code> <a class="header-anchor" href="#验证码配置-CAPTCHA-" aria-label="Permalink to &quot;验证码配置 \`[CAPTCHA]\`&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>CAPTCHA_BYPASS_CODE</code></td><td>(空)</td><td>万能验证码,跳过验证。仅用于开发调试,<strong>生产环境务必留空</strong></td></tr><tr><td><code>CAPTCHA_LENGTH</code></td><td><code>6</code></td><td>验证码字符长度(4-6位)</td></tr><tr><td><code>CAPTCHA_EXPIRE</code></td><td><code>300</code></td><td>验证码过期时间(秒),默认 5 分钟</td></tr><tr><td><code>CAPTCHA_RATE_WINDOW</code></td><td><code>60</code></td><td>防刷窗口期(秒)</td></tr><tr><td><code>CAPTCHA_RATE_LIMIT</code></td><td><code>20</code></td><td>窗口期内最大获取次数</td></tr><tr><td><code>CAPTCHA_CHARS</code></td><td><code>ABCDEFGHJKLMNPQRSTUVWXYZ2346789</code></td><td>字符集(已排除 0O、1lI 等易混淆字符)</td></tr><tr><td><code>CAPTCHA_FONT_PATH</code></td><td><code>static/fonts/Vera.ttf</code></td><td>字体路径</td></tr><tr><td><code>CAPTCHA_IMAGE_WIDTH</code></td><td><code>160</code></td><td>图片宽度(像素)</td></tr><tr><td><code>CAPTCHA_IMAGE_HEIGHT</code></td><td><code>50</code></td><td>图片高度(像素)</td></tr><tr><td><code>CAPTCHA_FONT_SIZE</code></td><td><code>28</code></td><td>字体大小</td></tr><tr><td><code>CAPTCHA_NOISE_LINES</code></td><td><code>8</code></td><td>干扰线数量</td></tr><tr><td><code>CAPTCHA_NOISE_DOTS</code></td><td><code>500</code></td><td>噪点数量</td></tr></tbody></table><h3 id="国际化配置-LANG-" tabindex="-1">国际化配置 <code>[LANG]</code> <a class="header-anchor" href="#国际化配置-LANG-" aria-label="Permalink to &quot;国际化配置 \`[LANG]\`&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>default_lang</code></td><td><code>zh-cn</code></td><td>默认语言</td></tr></tbody></table><h3 id="代码生成器配置-GENERATOR-" tabindex="-1">代码生成器配置 <code>[GENERATOR]</code> <a class="header-anchor" href="#代码生成器配置-GENERATOR-" aria-label="Permalink to &quot;代码生成器配置 \`[GENERATOR]\`&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>PARENT_MENU_ID</code></td><td><code>189</code></td><td>生成模块的父菜单ID</td></tr><tr><td><code>APP_NAME</code></td><td><code>tool</code></td><td>模块应用名(影响路由前缀和前端目录)</td></tr></tbody></table><h2 id="多环境配置" tabindex="-1">多环境配置 <a class="header-anchor" href="#多环境配置" aria-label="Permalink to &quot;多环境配置&quot;">​</a></h2><h3 id="开发环境" tabindex="-1">开发环境 <a class="header-anchor" href="#开发环境" aria-label="Permalink to &quot;开发环境&quot;">​</a></h3><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 开发环境配置(调试开启,使用文件缓存)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">APP_DEBUG</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> true </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 开启调试模式</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">APP</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">SHOW_ERROR_MSG</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> true </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 显示错误详情</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">DATABASE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DEBUG</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> true </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 显示执行的 SQL</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">CACHE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DRIVER</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> file </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 使用文件缓存(无需 Redis)</span></span></code></pre></div><h3 id="生产环境" tabindex="-1">生产环境 <a class="header-anchor" href="#生产环境" aria-label="Permalink to &quot;生产环境&quot;">​</a></h3><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 生产环境配置(调试关闭,使用 Redis 缓存)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">APP_DEBUG</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> false </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 关闭调试模式</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">APP</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">SHOW_ERROR_MSG</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> false </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 不显示错误详情(防止泄露)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">DATABASE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DEBUG</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> false </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 不显示 SQL</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">CACHE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DRIVER</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> redis </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 使用 Redis 缓存</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">REDIS_HOST</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 127.0.0.1 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; Redis 地址</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">REDIS_PORT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 6379 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; Redis 端口</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">REDIS_PASSWORD</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> &lt;你的Redis密码&gt; </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; Redis 密码</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">JWT</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">SECRET</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> &lt;随机生成的强密钥&gt; </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 签名密钥(必须修改)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">CORS</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALLOW_ORIGIN</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> https://admin.example.com </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 限制为实际域名</span></span></code></pre></div><h3 id="生成强密钥" tabindex="-1">生成强密钥 <a class="header-anchor" href="#生成强密钥" aria-label="Permalink to &quot;生成强密钥&quot;">​</a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># Linux / macOS:使用 OpenSSL 生成 32 字节随机 Base64 字符串</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">openssl</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> rand</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -base64</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;"> 32</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># PHP:生成 32 字节随机十六进制字符串(64 个字符)</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># random_bytes(32) → 32 字节密码学安全随机数</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># bin2hex() → 转为十六进制字符串</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">php</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -r</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> &quot;</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">echo bin2hex(random_bytes(32));</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">&quot;</span></span></code></pre></div><h2 id="前端环境变量" tabindex="-1">前端环境变量 <a class="header-anchor" href="#前端环境变量" aria-label="Permalink to &quot;前端环境变量&quot;">​</a></h2><p>前端使用 Vite 的环境变量机制,配置文件位于 <code>ui/</code> 目录:</p><h3 id="-env-development-开发环境-" tabindex="-1"><code>.env.development</code>(开发环境) <a class="header-anchor" href="#-env-development-开发环境-" aria-label="Permalink to &quot;\`.env.development\`(开发环境)&quot;">​</a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># API 接口基础路径(Vite 代理会将此路径的请求转发到后端)</span></span>
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-light:#B07D48;">VITE_GLOB_API_URL</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">/api</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># API 前缀(一般留空)</span></span>
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-light:#B07D48;">VITE_GLOB_API_URL_PREFIX</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 是否启用 Mock 数据(false = 使用真实后端 API)</span></span>
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-light:#B07D48;">VITE_USE_MOCK</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">false</span></span></code></pre></div><h3 id="-env-production-生产环境-" tabindex="-1"><code>.env.production</code>(生产环境) <a class="header-anchor" href="#-env-production-生产环境-" aria-label="Permalink to &quot;\`.env.production\`(生产环境)&quot;">​</a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># API 接口基础路径(生产环境的实际后端地址)</span></span>
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-light:#B07D48;">VITE_GLOB_API_URL</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">/api</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># API 前缀</span></span>
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-light:#B07D48;">VITE_GLOB_API_URL_PREFIX</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span></span></code></pre></div><p>在代码中访问环境变量:</p><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">// 通过 import.meta.env 访问 Vite 环境变量</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">// VITE_ 前缀的变量才会被暴露给客户端代码</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">const</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;"> apiUrl</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> import</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">.</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#998418;">meta</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">.</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">env</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">.</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#B07D48;">VITE_GLOB_API_URL</span></span></code></pre></div>`,43)])])}const o=i(h,[["render",e]]);export{c as __pageData,o as default};