主题
13 部署运维
生产部署概要
- 上传代码到服务器(或 git clone)
composer install --no-dev- 配置
.env与 Nginx frontend/home与frontend/admin执行npm run build- 访问
/setup完成安装(或导入 SQL + install.lock) - 设置目录权限:
runtime/、public/可写
详细宝塔步骤见 kede-finance/INSTALL-BAOTA.md。
Nginx 要点
- 根目录指向
public/ - PHP 走 FastCGI
/adminAPI 与 SPA 分流(参考deploy/nginx-baota.conf)/tpl/*魔方主题 SSR 转发到/index.php?s=/home/theme_tpl/page&path=...- 静态资源
/themes/、/plugins/直接访问
注意
/adminSPA 的location不能加^~,否则/admin/auth/login等 POST 接口会被当成静态目录返回 403。
本地用php -S 127.0.0.1:8800 public/router.php(或scripts/dev-all.sh)启动,不要用php think run:后者不加载public/router.php,会与public/admin/静态目录冲突导致/admin/*API 全部 404。
系统更新
后台 系统更新 或 API:
POST /admin/upgrade/check
POST /admin/upgrade/apply
POST /admin/upgrade/rollback依赖 UPGRADE_SERVER 官方包;本地开发通常留空或指向自建更新站。
插件安装(生产环境)
不支持插件市场离线部署。 生产/内网请使用 压缩包安装:
- 将插件 zip 解压到
public/plugins/{type}/{name}/ - 后台 插件管理 → 本地插件 → 安装
- 官方插件随系统分发的,文件已在
public/plugins/,安装系统后直接在本地插件页启用即可
若需在市场 Tab 一键安装,须在 开发环境 配置 MARKETPLACE_SERVER 并保证服务器可访问插件 CDN。详见 05-插件市场。
备份建议
| 对象 | 方式 |
|---|---|
| 数据库 | mysqldump 定时任务 |
| 代码 | git + 更新前 UpgradeService 自动 backup zip |
| 上传/自定义 | public/plugins/、extend/、public/themes/ |
日志
- 应用日志:ThinkPHP
runtime/log/ - 钩子异常:
trace()写入日志 - 支付/通知错误:
GatewayException/NotifyException带错误码
性能说明
前端构建优化
- Arco 组件/图标按需引入:
vite.config.ts使用unplugin-vue-components+ArcoResolver({ resolveIcons: true }),main.ts不再app.use(ArcoVue)/app.use(ArcoVueIcon),仅打包实际用到的组件与图标。 - 整包
arco.css保留:换取样式零回归(命令式Message、动态组件的样式都完整)。 - vendor 分包:
manualChunks将arco/vue-vendor/vendor拆为独立 chunk,便于浏览器长期缓存与并行加载。 - 效果:首屏 JS(gzip)后台约 369KB→273KB、前台约 361KB→217KB,且少变动的
arco/vue-vendor跨版本命中缓存。
改动后需重新
npm run build(两个前端)。新增依赖unplugin-vue-components(devDependency)。
后端查询与缓存
- 批量定价:
ProductService::getPricingBatch()一次查询取多商品/子选项定价,消除商店目录、商品组、配置选项的 N+1。商店目录catalogGroups()查询数从「1 + 分组数 + 商品数」降为常数级(约 3 条)。 - 配置缓存:
SettingService在请求级静态缓存之上增加跨请求持久缓存(config/cache.php的 file/redis 驱动),站点/外观配置写入时按组失效(SettingService::set→forget)。前台每页省去general/site两次查库。 - 自动索引:
SchemaPatch::ensureIndexes()首次运行时为高频查询补加复合索引(kd_pricing(type,rel_id)、kd_products(group_id,hidden,retired)、kd_config_options(group_id)、kd_config_suboptions(config_id)、kd_upstream_products(product_id/upstream_id)、kd_orders(user_id)、kd_invoices(user_id)),并写入system.index_patch=1标记,后续请求不再执行SHOW INDEX检查。
启用 Redis 缓存:将
config/cache.php的default改为redis并配置连接,配置缓存即自动跨进程共享。
异步与扩展
当前版本 无独立队列 Worker:开通、上游同步等为同步 HTTP 调用。
高并发场景建议:
- 支付回调幂等已内置
- 大流量短信/邮件可后续接 Redis 队列(预留扩展点)
安全 checklist
- [ ] 生产关闭
APP_DEBUG - [ ] 修改默认管理员密码
- [ ] HTTPS + HSTS
- [ ] 限制
/setup访问(安装后) - [ ] 支付密钥仅存数据库/config,不进 git
- [ ] 定期
composer update安全补丁
返回 文档站首页