28 lines
9.1 KiB
JavaScript
28 lines
9.1 KiB
JavaScript
import{_ as a,o as s,c as n,a2 as e}from"./chunks/framework.BbmSSMjL.js";const u=JSON.parse('{"title":"11.2 环境规划","description":"","frontmatter":{},"headers":[],"relativePath":"zh/deploy/env-plan.md","filePath":"zh/deploy/env-plan.md"}'),d={name:"zh/deploy/env-plan.md"};function p(i,t,l,o,r,c){return s(),n("div",null,[...t[0]||(t[0]=[e(`<h1 id="_11-2-环境规划" tabindex="-1">11.2 环境规划 <a class="header-anchor" href="#_11-2-环境规划" aria-label="Permalink to "11.2 环境规划""></a></h1><div class="tip custom-block"><p class="custom-block-title">概述</p><p>本节提供不同规模项目的服务器配置建议和环境规划方案。</p></div><h2 id="推荐配置" tabindex="-1">推荐配置 <a class="header-anchor" href="#推荐配置" aria-label="Permalink to "推荐配置""></a></h2><table tabindex="0"><thead><tr><th>组件</th><th>版本</th><th>说明</th></tr></thead><tbody><tr><td>PHP</td><td>8.3+</td><td>必需(Laravel 13 要求)</td></tr><tr><td>Laravel</td><td>13.x</td><td>后端框架</td></tr><tr><td>MySQL</td><td>8.0+</td><td>主数据库(也支持 PostgreSQL、SQL Server、Oracle、SQLite)</td></tr><tr><td>Redis</td><td>6.0+</td><td>缓存 / 会话 / 队列 / JWT 会话存储(<strong>必需</strong>,phpredis 扩展)</td></tr><tr><td>Nginx</td><td>1.18+</td><td>Web 服务器</td></tr><tr><td>Node.js</td><td>18+(建议 22 LTS)</td><td>前端构建(<code>ui/</code> 为 Vite 3;根目录资源构建为 Vite 7)</td></tr><tr><td>Composer</td><td>2.x</td><td>PHP 依赖</td></tr><tr><td>pnpm</td><td>9+</td><td>前端依赖(<code>ui/</code> 目录,含 pnpm-lock.yaml)</td></tr></tbody></table><div class="warning custom-block"><p class="custom-block-title">Redis 为强依赖</p><p>本项目 <code>.env.example</code> 默认 <code>SESSION_DRIVER=redis</code>、<code>CACHE_STORE=redis</code>、<code>QUEUE_CONNECTION=redis</code>、<code>REDIS_CLIENT=phpredis</code>,JWT 双令牌也依赖 Redis。生产环境必须部署 Redis,否则无法登录、无法缓存、队列不可用。</p></div><h2 id="服务器配置建议" tabindex="-1">服务器配置建议 <a class="header-anchor" href="#服务器配置建议" aria-label="Permalink to "服务器配置建议""></a></h2><table tabindex="0"><thead><tr><th>规模</th><th>CPU</th><th>内存</th><th>磁盘</th><th>说明</th></tr></thead><tbody><tr><td>小型</td><td>2核</td><td>4GB</td><td>50GB</td><td>单机部署,日活 < 1000(数据库初始化导入约 226MB,建议 ≥4GB)</td></tr><tr><td>中型</td><td>4核</td><td>8GB</td><td>100GB</td><td>单机部署,日活 1000~10000</td></tr><tr><td>大型</td><td>8核+</td><td>16GB+</td><td>200GB+</td><td>分离部署,日活 > 10000</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-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>┌─────────────────────────────┐</span></span>
|
||
<span class="line"><span>│ 单台服务器 │</span></span>
|
||
<span class="line"><span>│ │</span></span>
|
||
<span class="line"><span>│ Nginx + PHP-FPM + MySQL │</span></span>
|
||
<span class="line"><span>│ + Redis(必需) │</span></span>
|
||
<span class="line"><span>│ + 前端静态文件 │</span></span>
|
||
<span class="line"><span>└─────────────────────────────┘</span></span></code></pre></div><h3 id="中型项目-单机优化-" tabindex="-1">中型项目(单机优化) <a class="header-anchor" href="#中型项目-单机优化-" aria-label="Permalink to "中型项目(单机优化)""></a></h3><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>┌─────────────────────────────┐</span></span>
|
||
<span class="line"><span>│ 单台服务器 │</span></span>
|
||
<span class="line"><span>│ │</span></span>
|
||
<span class="line"><span>│ Nginx(前端 + API 代理) │</span></span>
|
||
<span class="line"><span>│ PHP-FPM(多进程) │</span></span>
|
||
<span class="line"><span>│ MySQL(主库) │</span></span>
|
||
<span class="line"><span>│ Redis(缓存/队列) │</span></span>
|
||
<span class="line"><span>│ Supervisor(队列/守护进程) │</span></span>
|
||
<span class="line"><span>└─────────────────────────────┘</span></span></code></pre></div><h3 id="大型项目-分离部署-" tabindex="-1">大型项目(分离部署) <a class="header-anchor" href="#大型项目-分离部署-" aria-label="Permalink to "大型项目(分离部署)""></a></h3><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>┌──────────┐ ┌──────────┐ ┌──────────┐</span></span>
|
||
<span class="line"><span>│ Nginx │ │ Nginx │ │ Nginx │</span></span>
|
||
<span class="line"><span>│ 前端CDN │ │ API-1 │ │ API-2 │</span></span>
|
||
<span class="line"><span>└──────────┘ └──────────┘ └──────────┘</span></span>
|
||
<span class="line"><span> │ │</span></span>
|
||
<span class="line"><span> └──────┬───────┘</span></span>
|
||
<span class="line"><span> │</span></span>
|
||
<span class="line"><span> ┌──────┴──────┐</span></span>
|
||
<span class="line"><span> ▼ ▼</span></span>
|
||
<span class="line"><span> ┌──────────┐ ┌──────────┐</span></span>
|
||
<span class="line"><span> │ MySQL │ │ Redis │</span></span>
|
||
<span class="line"><span> │ 主从 │ │ 集群 │</span></span>
|
||
<span class="line"><span> └──────────┘ └──────────┘</span></span></code></pre></div><h2 id="环境变量规划" tabindex="-1">环境变量规划 <a class="header-anchor" href="#环境变量规划" aria-label="Permalink to "环境变量规划""></a></h2><p>本项目 <code>.env</code> 为扁平键名(无分段式配置),核心项规划如下:</p><table tabindex="0"><thead><tr><th>环境</th><th>APP_DEBUG</th><th>APP_ENV</th><th>CACHE_STORE / SESSION_DRIVER</th><th>JWT_SECRET</th><th>CORS_ALLOW_ORIGIN</th></tr></thead><tbody><tr><td>开发</td><td>true</td><td>local</td><td>redis</td><td>开发密钥</td><td>*</td></tr><tr><td>测试</td><td>true</td><td>testing</td><td>redis</td><td>测试密钥</td><td>*</td></tr><tr><td>生产</td><td><strong>false</strong></td><td><strong>production</strong></td><td>redis</td><td><strong>强随机密钥(≥32 字符)</strong></td><td><strong>指定域名</strong></td></tr></tbody></table><p>生成强随机 JWT 密钥:</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;">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><div class="tip custom-block"><p class="custom-block-title">其它生产必检项</p><ul><li><code>DB_PREFIX=laravel_</code> 与 SQL 脚本表前缀一致,不要随意修改</li><li><code>FILE_DOMAIN_URL</code> 留空时按当前请求域名补全文件地址;跨域部署时应配置为前端可访问的文件域名</li><li><code>TRUSTED_PROXIES</code> 按反向代理层级配置(默认信任 127.0.0.1 / ::1)</li><li>队列常驻进程:<code>php artisan queue:work</code>(生产用 Supervisor 托管)</li></ul></div>`,20)])])}const b=a(d,[["render",p]]);export{u as __pageData,b as default};
|