126 lines
48 KiB
JavaScript
126 lines
48 KiB
JavaScript
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 "2.6 环境变量配置""></a></h1><div class="tip custom-block"><p class="custom-block-title">概述</p><p>项目使用 <code>.env</code> 文件管理环境变量,支持开发、测试、生产等多环境切换。配置优先级:<strong>真实环境变量 > <code>.env</code> > <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 ".env 文件结构""></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;"># 优先级:真实环境变量 > .env > 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;"> # 签名密钥(必须 >= 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 "配置文件映射""></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 "配置项详解""></a></h2><h3 id="应用配置" tabindex="-1">应用配置 <a class="header-anchor" href="#应用配置" aria-label="Permalink to "应用配置""></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 "数据库配置""></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 "JWT 配置""></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>>= 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 "Redis / 缓存配置""></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 "文件上传配置""></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 "CORS / API 配置""></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 "验证码配置""></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 "代码生成器配置""></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 "多环境配置""></a></h2><h3 id="开发环境" tabindex="-1">开发环境 <a class="header-anchor" href="#开发环境" aria-label="Permalink to "开发环境""></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 "生产环境""></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;"><强密码></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;"><openssl rand -base64 32 生成的随机值> </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 "生成强密钥""></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;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">echo bin2hex(random_bytes(32));</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span></code></pre></div><h2 id="配置缓存管理" tabindex="-1">配置缓存管理 <a class="header-anchor" href="#配置缓存管理" aria-label="Permalink to "配置缓存管理""></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 "前端环境变量""></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 "\`.env.development\`(开发环境)""></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 "\`.env.production\`(生产环境)""></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};
|