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

126 lines
48 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 o=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 l(e,s,d,p,k,r){return a(),t("div",null,[...s[0]||(s[0]=[n(`<h1 id="_2-6-环境变量配置" tabindex="-1">2.6 环境变量配置 <a class="header-anchor" href="#_2-6-环境变量配置" aria-label="Permalink to &quot;2.6 环境变量配置&quot;">​</a></h1><div class="tip custom-block"><p class="custom-block-title">概述</p><p>项目使用 <code>.env</code> 文件管理环境变量,支持开发、测试、生产等多环境切换。配置优先级:<strong>真实环境变量 &gt; <code>.env</code> &gt; <code>config/*.php</code> 中的默认值</strong>。模板文件为 <code>.env.example</code>,首次部署复制为 <code>.env</code> 后修改。</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> 采用 Laravel 标准的 <code>KEY=VALUE</code> 扁平格式(无分组),每个键按前缀对应一个 <code>config/*.php</code> 配置文件,通过 <code>env()</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 环境变量配置文件(Laravel 标准格式)</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;"># 格式:KEY=VALUE 扁平结构,按前缀映射到 config/*.php(如 JWT_* → config/jwt.php)</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 优先级:真实环境变量 &gt; .env &gt; config/*.php 默认值</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 修改后执行 php artisan config:clear 清除配置缓存</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_NAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">Laravel </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 应用名称</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">APP_ENV</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">local </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 环境标识(local / production)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">APP_KEY</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> # 应用加密密钥(php artisan key:generate 生成)</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 style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">APP_URL</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">http://localhost </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 应用访问地址</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">APP_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;"># 应用时区(写入时间字段用,需与 MySQL、PHP 一致)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">APP_LOCALE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">en </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 默认语言</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">BCRYPT_ROUNDS</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">12 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># bcrypt 成本因子(与 PasswordService 一致)</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;">LOG_CHANNEL</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">stack </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 日志通道</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">LOG_LEVEL</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">debug </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 日志级别(生产改为 info)</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;">DB_CONNECTION</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 / sqlite)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_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;"># 数据库地址</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_PORT</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;">DB_DATABASE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">rxthinkcmf.laravel13.elevue </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 数据库名</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_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;">DB_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;">DB_PREFIX</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">laravel_ </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 表前缀(脚本使用 laravel_ 前缀,必须保留)</span></span>
<span class="line"></span>
<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;">SESSION_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;"># 会话驱动</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">SESSION_LIFETIME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">120 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 会话有效期(分钟)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">QUEUE_CONNECTION</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;"># 队列驱动</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">CACHE_STORE</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;"># 缓存驱动</span></span>
<span class="line"></span>
<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;">REDIS_CLIENT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">phpredis </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 客户端(phpredis 扩展)</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_PASSWORD</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">null </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># Redis 密码(设置了 requirepass 时必须同步)</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>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># ─── JWT ──────────────────────────────────────────────────</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">JWT_SECRET</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> # 签名密钥(必须 &gt;= 32 字符,启动 fail-close 校验)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">JWT_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;">JWT_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;">JWT_PERMS_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;"># 权限缓存 TTL(秒),建议不小于 refresh_ttl</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">JWT_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:#7B7F8B;--shiki-light:#A0ADA0;"># ─── 文件上传 ─────────────────────────────────────────────</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">FILE_UPLOAD_DIR</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">uploads </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 上传根目录(相对 public/)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">FILE_DOMAIN_URL</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;">FILE_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 style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">FILE_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 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 允许的图片后缀(svg 已移除:XSS 风险)</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,doc,docx,xls,xlsx,ppt,pptx,pdf,zip,rar,txt,csv </span><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;"># ─── CORS 跨域 ────────────────────────────────────────────</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">CORS_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:#7B7F8B;--shiki-light:#A0ADA0;"># ─── API ──────────────────────────────────────────────────</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">API_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:#7B7F8B;--shiki-light:#A0ADA0;"># ─── 多租户 ───────────────────────────────────────────────</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DEFAULT_TENANT_ID</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">1 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 平台用户新增数据时的默认租户 ID</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;">DEMO_MODE</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=拦截写操作(POST/PUT/DELETE/PATCH),#[DemoAllow] 例外</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;">TRUSTED_PROXIES</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> # 逗号分隔的代理 IP 或 CIDR(CDN/负载均衡场景)</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;">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;"># 字符长度</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">CAPTCHA_CHARS</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">ABCDEFGHJKLMNPQRSTUVWXYZ2346789 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 字符集(已排除 0O、1lI 易混淆字符)</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 style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">CAPTCHA_RATE_WINDOW</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">60 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 防刷窗口期(秒)</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">CAPTCHA_RATE_LIMIT</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;"># 窗口期内最大获取次数</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;"> # 万能验证码(仅 APP_DEBUG=true 生效,生产务必留空)</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;">GENERATOR_PARENT_MENU_ID</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">189 </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 生成模块的父菜单 ID</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">GENERATOR_APP_NAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">tool </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 应用名(路由前缀、前端目录)</span></span></code></pre></div><div class="danger custom-block"><p class="custom-block-title">重要键说明</p><ol><li><code>JWT_SECRET</code> 为空或不足 32 字符时,应用<strong>拒绝启动</strong>(fail-close)。生成:<code>openssl rand -base64 32</code>。</li><li><code>DB_PREFIX=laravel_</code> 必须保留,漏配会报表不存在。</li><li><code>REDIS_PASSWORD</code> 与 Redis 实际密码必须一致,否则验证码、登录全部失败。</li><li><code>APP_DEBUG</code> 生产环境必须为 <code>false</code>(否则异常堆栈泄露给前端)。</li></ol></div><h2 id="配置文件映射" tabindex="-1">配置文件映射 <a class="header-anchor" href="#配置文件映射" aria-label="Permalink to &quot;配置文件映射&quot;">​</a></h2><table tabindex="0"><thead><tr><th>.env 键前缀</th><th>配置文件</th><th>说明</th></tr></thead><tbody><tr><td><code>APP_*</code></td><td><code>config/app.php</code></td><td>应用名称 / 环境 / 调试 / 密钥</td></tr><tr><td><code>DB_*</code></td><td><code>config/database.php</code></td><td>数据库连接 + Redis 连接</td></tr><tr><td><code>SESSION_*</code></td><td><code>config/session.php</code></td><td>会话</td></tr><tr><td><code>CACHE_*</code> / <code>QUEUE_*</code></td><td><code>config/cache.php</code> / <code>config/queue.php</code></td><td>缓存 / 队列</td></tr><tr><td><code>JWT_*</code></td><td><code>config/jwt.php</code> ★</td><td>JWT 密钥与有效期</td></tr><tr><td><code>FILE_*</code></td><td><code>config/file.php</code> ★</td><td>文件上传</td></tr><tr><td><code>CORS_ALLOW_ORIGIN</code></td><td><code>config/cors.php</code> ★</td><td>跨域</td></tr><tr><td><code>API_*</code></td><td><code>config/api.php</code> ★</td><td>驼峰转换开关</td></tr><tr><td><code>CAPTCHA_*</code></td><td><code>config/captcha.php</code> ★</td><td>验证码</td></tr><tr><td><code>DEFAULT_TENANT_ID</code></td><td><code>config/tenant.php</code> ★</td><td>多租户</td></tr><tr><td><code>GENERATOR_*</code></td><td><code>config/generator.php</code></td><td>代码生成器</td></tr><tr><td><code>TRUSTED_PROXIES</code></td><td><code>config/app.php</code></td><td>受信代理</td></tr><tr><td><code>LOG_*</code></td><td><code>config/logging.php</code></td><td>日志</td></tr><tr><td><code>MAIL_*</code></td><td><code>config/mail.php</code></td><td>邮件</td></tr></tbody></table><p>标 ★ 为本项目独立维护的配置文件(见 <a href="/zh/directory.html">1.3 目录结构</a>)。</p><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><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>APP_NAME</code></td><td>Laravel</td><td>应用名称</td></tr><tr><td><code>APP_ENV</code></td><td>local</td><td>环境标识</td></tr><tr><td><code>APP_KEY</code></td><td>(空)</td><td>应用加密密钥,<code>key:generate</code> 生成</td></tr><tr><td><code>APP_DEBUG</code></td><td>true</td><td>调试模式,<strong>生产必须 false</strong></td></tr><tr><td><code>APP_URL</code></td><td><a href="http://localhost" target="_blank" rel="noreferrer">http://localhost</a></td><td>应用访问地址</td></tr><tr><td><code>APP_TIMEZONE</code></td><td>Asia/Shanghai</td><td>应用时区,<code>create_time</code> / <code>update_time</code> 等时间字段按此写入,需与 MySQL、PHP 时区一致</td></tr><tr><td><code>BCRYPT_ROUNDS</code></td><td>12</td><td>密码哈希成本因子</td></tr><tr><td><code>DEMO_MODE</code></td><td>false</td><td>演示模式,开启后拦截所有写操作</td></tr><tr><td><code>DEFAULT_TENANT_ID</code></td><td>1</td><td>平台用户新增数据的默认租户 ID</td></tr><tr><td><code>TRUSTED_PROXIES</code></td><td>(空)</td><td>受信代理 IP/CIDR,CDN 后取真实 IP 用</td></tr></tbody></table><h3 id="数据库配置" tabindex="-1">数据库配置 <a class="header-anchor" href="#数据库配置" aria-label="Permalink to &quot;数据库配置&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>DB_CONNECTION</code></td><td>sqlite</td><td>数据库类型:mysql / pgsql / sqlsrv / sqlite</td></tr><tr><td><code>DB_HOST</code></td><td>127.0.0.1</td><td>数据库主机</td></tr><tr><td><code>DB_PORT</code></td><td>3306</td><td>数据库端口</td></tr><tr><td><code>DB_DATABASE</code></td><td>-</td><td>数据库名(SQLite 为文件路径)</td></tr><tr><td><code>DB_USERNAME</code></td><td>root</td><td>用户名</td></tr><tr><td><code>DB_PASSWORD</code></td><td>-</td><td>密码</td></tr><tr><td><code>DB_PREFIX</code></td><td>laravel_</td><td>表前缀</td></tr></tbody></table><h3 id="JWT-配置" tabindex="-1">JWT 配置 <a class="header-anchor" href="#JWT-配置" aria-label="Permalink to &quot;JWT 配置&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>JWT_SECRET</code></td><td>(必填)</td><td>签名密钥,<strong>&gt;= 32 字符,否则拒绝启动</strong></td></tr><tr><td><code>JWT_ACCESS_TTL</code></td><td>7200</td><td>access_token 有效期(秒),默认 2 小时</td></tr><tr><td><code>JWT_REFRESH_TTL</code></td><td>604800</td><td>refresh_token 有效期(秒),默认 7 天</td></tr><tr><td><code>JWT_PERMS_TTL</code></td><td>7200</td><td>权限缓存 TTL(秒)</td></tr><tr><td><code>JWT_ISSUER</code></td><td>rxthinkcmf</td><td>签发者标识</td></tr></tbody></table><h3 id="Redis-缓存配置" tabindex="-1">Redis / 缓存配置 <a class="header-anchor" href="#Redis-缓存配置" aria-label="Permalink to &quot;Redis / 缓存配置&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>REDIS_CLIENT</code></td><td>phpredis</td><td>客户端(需 PHP redis 扩展)</td></tr><tr><td><code>REDIS_HOST</code></td><td>127.0.0.1</td><td>Redis 主机</td></tr><tr><td><code>REDIS_PASSWORD</code></td><td>null</td><td>Redis 密码(无密码保持 null)</td></tr><tr><td><code>REDIS_PORT</code></td><td>6379</td><td>Redis 端口</td></tr><tr><td><code>SESSION_DRIVER</code></td><td>redis</td><td>会话驱动</td></tr><tr><td><code>CACHE_STORE</code></td><td>redis</td><td>缓存驱动</td></tr><tr><td><code>QUEUE_CONNECTION</code></td><td>redis</td><td>队列驱动</td></tr></tbody></table><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>会话 / 缓存 / 队列驱动<strong>不要改回 <code>database</code></strong>——数据库脚本不含 Laravel framework 表(<code>sessions</code> / <code>cache</code> / <code>jobs</code>),改回后登录与缓存会直接报表不存在。</p></div><h3 id="文件上传配置" tabindex="-1">文件上传配置 <a class="header-anchor" href="#文件上传配置" aria-label="Permalink to &quot;文件上传配置&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>FILE_UPLOAD_DIR</code></td><td>uploads</td><td>上传根目录(相对 <code>public/</code>)</td></tr><tr><td><code>FILE_DOMAIN_URL</code></td><td>(空)</td><td>文件访问域名前缀,空则返回相对路径</td></tr><tr><td><code>FILE_MAX_SIZE</code></td><td>10</td><td>单文件大小上限(MB)</td></tr><tr><td><code>FILE_IMAGE_EXT</code></td><td>gif,jpg,...</td><td>允许的图片后缀(<strong>svg 已移除</strong>:内嵌 JS 导致 XSS 风险)</td></tr><tr><td><code>FILE_EXT</code></td><td>多种后缀</td><td>允许的文件后缀</td></tr></tbody></table><h3 id="CORS-API-配置" tabindex="-1">CORS / API 配置 <a class="header-anchor" href="#CORS-API-配置" aria-label="Permalink to &quot;CORS / API 配置&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>CORS_ALLOW_ORIGIN</code></td><td>*</td><td>允许来源,逗号分隔;凭证模式下会回显具体 Origin</td></tr><tr><td><code>API_CAMEL_SNAKE_CONVERT</code></td><td>true</td><td>请求/响应键名驼峰与下划线自动转换</td></tr></tbody></table><h3 id="验证码配置" tabindex="-1">验证码配置 <a class="header-anchor" href="#验证码配置" aria-label="Permalink to &quot;验证码配置&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>仅 APP_DEBUG=true 时生效,生产务必留空</strong></td></tr><tr><td><code>CAPTCHA_LENGTH</code></td><td>6</td><td>验证码字符长度(4-6 位)</td></tr><tr><td><code>CAPTCHA_EXPIRE</code></td><td>300</td><td>验证码过期时间(秒),默认 5 分钟</td></tr><tr><td><code>CAPTCHA_RATE_WINDOW</code></td><td>60</td><td>防刷窗口期(秒)</td></tr><tr><td><code>CAPTCHA_RATE_LIMIT</code></td><td>10</td><td>窗口期内最大获取次数</td></tr><tr><td><code>CAPTCHA_CHARS</code></td><td>ABCDEFGHJKLMNPQRSTUVWXYZ2346789</td><td>字符集(已排除 0O、1lI 等易混淆字符)</td></tr><tr><td><code>CAPTCHA_FONT_PATH</code></td><td>static/fonts/Vera.ttf</td><td>字体路径</td></tr><tr><td><code>CAPTCHA_IMAGE_WIDTH</code></td><td>160</td><td>图片宽度(像素)</td></tr><tr><td><code>CAPTCHA_IMAGE_HEIGHT</code></td><td>50</td><td>图片高度(像素)</td></tr><tr><td><code>CAPTCHA_FONT_SIZE</code></td><td>28</td><td>字体大小</td></tr><tr><td><code>CAPTCHA_NOISE_LINES</code></td><td>6</td><td>干扰线数量</td></tr><tr><td><code>CAPTCHA_NOISE_DOTS</code></td><td>300</td><td>噪点数量</td></tr></tbody></table><h3 id="代码生成器配置" tabindex="-1">代码生成器配置 <a class="header-anchor" href="#代码生成器配置" aria-label="Permalink to &quot;代码生成器配置&quot;">​</a></h3><table tabindex="0"><thead><tr><th>变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>GENERATOR_PARENT_MENU_ID</code></td><td>189</td><td>生成模块挂载的父菜单 ID</td></tr><tr><td><code>GENERATOR_APP_NAME</code></td><td>tool</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:#F286C4;--shiki-light:#1E754F;">APP_ENV</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">local</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:#F286C4;--shiki-light:#1E754F;">DB_CONNECTION</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">mysql</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_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>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_DATABASE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">rxthinkcmf.laravel13.elevue</span></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_PREFIX</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">laravel_</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">CORS_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;"># 允许所有来源(Vite 代理/直连均可用)</span></span>
<span class="line"></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;"> # 可设置万能验证码(仅 debug 下生效)</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:#F286C4;--shiki-light:#1E754F;">APP_ENV</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">production</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:#F286C4;--shiki-light:#1E754F;">DB_PASSWORD</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">&lt;强密码&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">JWT_SECRET</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">&lt;openssl rand -base64 32 生成的随机值&gt; </span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 必须修改</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">CORS_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>
<span class="line"></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;">DEMO_MODE</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 style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">TRUSTED_PROXIES</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> # 部署在 CDN/负载均衡后时配置</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 / Windows(Git Bash):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><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:#62E884;--shiki-light:#59873A;">php</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> artisan</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> config:clear</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> # 清除配置缓存(修改 .env 后执行)</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">php</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> artisan</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> config:cache</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> # 缓存配置(生产环境提升性能)</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">php</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> artisan</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> config:show</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> jwt.secret</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> # 查看解析后的配置值(调试用,自动脱敏)</span></span></code></pre></div><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>生产执行 <code>config:cache</code> 后,<code>.env</code> 的修改<strong>不再生效</strong>,需重新 <code>config:cache</code>。Docker 部署通过容器环境变量注入配置(优先级高于 <code>.env</code>),见 <a href="/zh/quickstart/docker.html">2.8 Docker 快速体验</a>。</p></div><h2 id="前端环境变量" tabindex="-1">前端环境变量 <a class="header-anchor" href="#前端环境变量" aria-label="Permalink to &quot;前端环境变量&quot;">​</a></h2><p>前端使用 Vite 的环境变量机制,配置文件位于前端仓库目录:</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><p>详细说明见 <a href="/zh/quickstart/frontend-start.html">2.4 前端服务启动</a>。</p>`,46)])])}const F=i(h,[["render",l]]);export{o as __pageData,F as default};