Files
rxthinkcmf-wiki/RXThinkCMF_Laravel13_NaiveVue/.vitepress/dist/assets/zh_quickstart_backend-start.md.CLJGSOAE.js
T
2026-10-11 19:06:33 +08:00

116 lines
35 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 n,a2 as l}from"./chunks/framework.BbmSSMjL.js";const c=JSON.parse('{"title":"2.3 后端服务启动","description":"","frontmatter":{},"headers":[],"relativePath":"zh/quickstart/backend-start.md","filePath":"zh/quickstart/backend-start.md"}'),t={name:"zh/quickstart/backend-start.md"};function p(e,s,h,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[l(`<h1 id="_2-3-后端服务启动" tabindex="-1">2.3 后端服务启动 <a class="header-anchor" href="#_2-3-后端服务启动" aria-label="Permalink to &quot;2.3 后端服务启动&quot;">​</a></h1><div class="warning custom-block"><p class="custom-block-title">特别提醒</p><p>官方精心制作本教程,目的在于方便用户快速掌握软件产品的使用和部署。通过此教程,刚入行的开发者也可以快速掌握并投入产品研发。本地部署时务必请耐心阅读文档操作。</p></div><h2 id="步骤一-获取源码" tabindex="-1">步骤一:获取源码 <a class="header-anchor" href="#步骤一-获取源码" aria-label="Permalink to &quot;步骤一:获取源码&quot;">​</a></h2><p>前往 <a href="https://www.rxthink.cn" target="_blank" rel="noreferrer">官方网站</a> 购买授权后,按以下步骤获取源码:</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>1. 登录[官方网站](https://www.rxthink.cn),进入「个人中心」→「我的订单」页面。</span></span>
<span class="line"><span>2. 在订单列表中找到已购买的授权订单,点击「下载」按钮。</span></span>
<span class="line"><span>3. 下载的压缩包包含完整的后端源码、数据库脚本及部署配置文件。</span></span>
<span class="line"><span>4. 将压缩包解压到本地开发目录(如 D:\\laragon\\www\\ 或 ~/www/)。</span></span></code></pre></div><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;"># 进入项目目录(以实际解压路径为准)</span></span>
<span class="line"><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;">cd</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> RXThinkCMF_Laravel13_NaiveVue</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">温馨提示</p><ol><li>源码包请务必从<a href="https://www.rxthink.cn" target="_blank" rel="noreferrer">官方网站</a>订单中心下载,确保获取的是正版授权的最新版本。</li><li>授权有效期内可无限次下载最新版本,版本更新后可重新下载获取最新源码。</li><li>解压后请先阅读根目录下的 <code>README.md</code> 了解项目概况与技术栈。</li></ol></div><h2 id="步骤二-安装-Composer-依赖" tabindex="-1">步骤二:安装 Composer 依赖 <a class="header-anchor" href="#步骤二-安装-Composer-依赖" aria-label="Permalink to &quot;步骤二:安装 Composer 依赖&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:#7B7F8B;--shiki-light:#A0ADA0;"># -----------------------------------------------------------------------------</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 安装项目依赖(从 composer.lock 精确安装,确保版本一致)</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;"># install → 读取 composer.lock,安装锁定版本的依赖</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 安装完成后生成 vendor/ 目录,包含所有第三方库</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">composer</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</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:#7B7F8B;--shiki-light:#A0ADA0;"># 如果国内下载慢,先配置阿里云镜像(加速依赖下载)</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;"># config -g → 修改全局配置(所有项目生效)</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># repo.packagist → 设置 Packagist 仓库的镜像地址</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">composer</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> config</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -g</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> repo.packagist</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> composer</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> https://mirrors.aliyun.com/composer/</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">composer</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span></span></code></pre></div><p>安装完成后,项目根目录会生成 <code>vendor/</code> 目录,包含所有第三方依赖。</p><div class="tip custom-block"><p class="custom-block-title">一键初始化</p><p>以上两步(含后续的环境文件、APP_KEY、数据库迁移、前端构建)可合并为一条命令:</p><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;">composer</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> setup</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 等价于:composer install → 复制 .env → key:generate → migrate --force → npm install → npm run build</span></span></code></pre></div></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:#7B7F8B;--shiki-light:#A0ADA0;"># 复制环境配置模板(.env.example 是模板文件,.env 是实际配置)</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">cp</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> .env.example</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> .env</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 生成应用加密密钥(APP_KEY,写入 .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;"> key:generate</span></span></code></pre></div><p>编辑 <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;"># 开启调试模式(开发环境 true,生产环境必须 false)</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>
<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.naivevue </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;"># JWT 签名密钥(必须 &gt;= 32 字符,应用启动 fail-close 校验)</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:#F6F6F4;--shiki-light:#393A34;">your_random_jwt_secret_key_at_least_32_bytes</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># Redis 配置(必需;设置了 requirepass 时必须同步)</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>
<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>
<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>
<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>
<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>
<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>
<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>
<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></code></pre></div><div class="danger custom-block"><p class="custom-block-title">生产环境务必修改</p><ol><li><code>JWT_SECRET</code> 必须修改为强随机字符串(&gt;= 32 字符),生成方式:<code>openssl rand -base64 32</code>。为空或长度不足时应用<strong>拒绝启动</strong>。</li><li><code>APP_DEBUG</code> 生产环境必须设为 <code>false</code>。</li><li><code>DB_PASSWORD</code> 必须修改为强密码。</li></ol></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:#7B7F8B;--shiki-light:#A0ADA0;"># -----------------------------------------------------------------------------</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 推荐:一键启动(同时启动 API 服务 + 队列 + 日志流 + Vite 四个进程)</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># -----------------------------------------------------------------------------</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">composer</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> dev</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:#7B7F8B;--shiki-light:#A0ADA0;"># 方式二:单独启动 API 服务(内置 PHP 开发服务器,默认监听 127.0.0.1:8000)</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;"># serve → 启动 Laravel 内置的 PHP 开发服务器</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 启动后浏览器访问 http://admin.laravel13.naivevue 即可</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;"> serve</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:#7B7F8B;--shiki-light:#A0ADA0;"># 指定端口(当 8000 被占用时更换端口)</span></span>
<span class="line"><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;"> serve</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> --port=8080</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:#7B7F8B;--shiki-light:#A0ADA0;"># 指定主机和端口(允许局域网其他设备访问)</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;"># --host=0.0.0.0 → 监听所有网络接口(默认只监听 127.0.0.1)</span></span>
<span class="line"><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;"> serve</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> --host=0.0.0.0</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> --port=8000</span></span></code></pre></div><p>启动成功后会看到:</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>INFO Server running on [http://127.0.0.1:8000].</span></span>
<span class="line"><span>INFO Press Ctrl-C to quit.</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">composer dev 四进程说明</p><table tabindex="0"><thead><tr><th>进程</th><th>命令</th><th>用途</th></tr></thead><tbody><tr><td>server</td><td><code>php artisan serve</code></td><td>API 服务</td></tr><tr><td>queue</td><td><code>php artisan queue:listen</code></td><td>队列消费(导入导出等异步任务)</td></tr><tr><td>logs</td><td><code>php artisan pail</code></td><td>实时日志流</td></tr><tr><td>vite</td><td><code>npm run dev</code></td><td>前端构建(HMR)</td></tr></tbody></table></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:#7B7F8B;--shiki-light:#A0ADA0;"># -----------------------------------------------------------------------------</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 健康检查(Laravel 内置 /up 路由)</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># -----------------------------------------------------------------------------</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">curl</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> http://admin.laravel13.naivevue/up</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># → {&quot;status&quot;:&quot;ok&quot;}</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:#7B7F8B;--shiki-light:#A0ADA0;"># 验证码接口(公开接口,同时验证 PHP → Redis 链路)</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># -----------------------------------------------------------------------------</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">curl</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> http://admin.laravel13.naivevue/api/captcha</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># → {&quot;code&quot;:0,&quot;ok&quot;:true,&quot;msg&quot;:&quot;操作成功&quot;,&quot;data&quot;:{&quot;key&quot;:&quot;...&quot;,&quot;captcha&quot;:&quot;data:image/png;base64,...&quot;}}</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:#7B7F8B;--shiki-light:#A0ADA0;"># 测试登录接口(POST 请求 + JSON 请求体)</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;"># -X POST → 使用 POST 方法</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># -H → 设置请求头(Content-Type: application/json)</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># -d → 发送 JSON 格式的请求体</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">curl</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -X</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> POST</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> http://admin.laravel13.naivevue/api/login</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;"> \\</span></span>
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -H</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> &quot;</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">Content-Type: application/json</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">&quot;</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;"> \\</span></span>
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -d</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> &#39;</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">{&quot;username&quot;:&quot;admin&quot;,&quot;password&quot;:&quot;123456&quot;}</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">&#39;</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:#7B7F8B;--shiki-light:#A0ADA0;"># {&quot;code&quot;:1,&quot;ok&quot;:false,&quot;msg&quot;:&quot;请输入验证码&quot;,&quot;data&quot;:null}</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">内置演示账号</p><table tabindex="0"><thead><tr><th>账号</th><th>密码</th><th>角色</th><th>说明</th></tr></thead><tbody><tr><td>admin</td><td>123456</td><td>超级管理员</td><td>平台管理,可管理所有租户</td></tr><tr><td>tenant001</td><td>123456</td><td>租户管理员(客户租户A)</td><td>租户视角,体验数据隔离效果</td></tr></tbody></table><p>登录成功后请立即修改默认密码。</p></div><h2 id="常见问题" tabindex="-1">常见问题 <a class="header-anchor" href="#常见问题" aria-label="Permalink to &quot;常见问题&quot;">​</a></h2><h3 id="_1-composer-install-报错内存不足" tabindex="-1">1. <code>composer install</code> 报错内存不足 <a class="header-anchor" href="#_1-composer-install-报错内存不足" aria-label="Permalink to &quot;1. \`composer install\` 报错内存不足&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;"># -d memory_limit=-1 → 取消 PHP 内存限制(-1 表示无限制)</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">php</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -d</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> memory_limit=</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;">-1</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /usr/local/bin/composer</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span></span></code></pre></div><h3 id="_2-vendor-目录权限问题" tabindex="-1">2. <code>vendor/</code> 目录权限问题 <a class="header-anchor" href="#_2-vendor-目录权限问题" aria-label="Permalink to &quot;2. \`vendor/\` 目录权限问题&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;"># 755 → owner 可读写执行,group/others 可读可执行</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">chmod</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -R</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;"> 755</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> vendor/</span></span></code></pre></div><h3 id="_3-应用拒绝启动-报-JWT-SECRET-错误" tabindex="-1">3. 应用拒绝启动,报 JWT_SECRET 错误 <a class="header-anchor" href="#_3-应用拒绝启动-报-JWT-SECRET-错误" aria-label="Permalink to &quot;3. 应用拒绝启动,报 JWT_SECRET 错误&quot;">​</a></h3><p><code>.env</code> 中 <code>JWT_SECRET</code> 为空或不足 32 字符(应用启动 fail-close 校验)。生成并重试:</p><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;">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 style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> # 或 php -r &quot;echo bin2hex(random_bytes(32));&quot;</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 将结果写入 .env 的 JWT_SECRET 后重新启动</span></span></code></pre></div><h3 id="_4-数据库连接失败" tabindex="-1">4. 数据库连接失败 <a class="header-anchor" href="#_4-数据库连接失败" aria-label="Permalink to &quot;4. 数据库连接失败&quot;">​</a></h3><p>检查 <code>.env</code> 中的数据库配置是否正确:</p><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;"># 1. 检查 .env 中 DB_* 配置:DB_HOST、DB_PORT、DB_USERNAME、DB_PASSWORD、DB_DATABASE 是否正确</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 2. 确认数据库服务已启动、数据库已创建并导入脚本</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 3. 用原生 SQL 测试连接是否正常(以 MySQL 为例)</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">mysql</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -h</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;"> 127.0.0.1</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -P</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;"> 3306</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -u</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> root</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -p</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -e</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> &quot;</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">SELECT 1;</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 4. 若报表不存在,检查 DB_PREFIX 是否为 laravel_</span></span></code></pre></div><h3 id="_5-端口被占用" tabindex="-1">5. 端口被占用 <a class="header-anchor" href="#_5-端口被占用" aria-label="Permalink to &quot;5. 端口被占用&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;"># Windows:查找占用 8000 端口的进程</span></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># findstr → Windows 版的 grep(过滤文本)</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">netstat</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -ano</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> |</span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> findstr</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> :8000</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># macOS / Linux:查找占用 8000 端口的进程</span></span>
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">lsof</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -i</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> :8000</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:#62E884;--shiki-light:#59873A;">php</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> artisan</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> serve</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> --port=8080</span></span></code></pre></div><h3 id="_6-验证码接口报-缓存服务-Redis-连接失败-" tabindex="-1">6. 验证码接口报&quot;缓存服务(Redis)连接失败&quot; <a class="header-anchor" href="#_6-验证码接口报-缓存服务-Redis-连接失败-" aria-label="Permalink to &quot;6. 验证码接口报&quot;缓存服务(Redis)连接失败&quot;&quot;">​</a></h3><p>Redis 未启动或密码不匹配(<code>.env</code> 中 <code>REDIS_PASSWORD</code> 与 Redis 实际 <code>requirepass</code> 不一致),接口返回「缓存服务(Redis)连接失败,请检查 Redis 配置(地址、端口、密码)后重试」,真实原因见日志 <code>验证码写入 Redis 失败</code>。验证:</p><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;">redis-cli</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> ping</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> # 输出 PONG</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:clear</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;"> tinker</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> --execute=</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">&quot;</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">try { \\Illuminate\\Support\\Facades\\Redis::setex(&#39;t&#39;, 5, &#39;ok&#39;); echo &#39;OK&#39;; } catch (\\Throwable </span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\$</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">e) { echo </span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\$</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">e-&gt;getMessage(); }</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">&quot;</span></span></code></pre></div><p>详见 <a href="/zh/quickstart/laragon.html">2.2 Laragon 环境搭建</a> 「Redis 密码配置」。</p>`,41)])])}const E=i(t,[["render",p]]);export{c as __pageData,E as default};