Skip to content

13 部署运维

生产部署概要

  1. 上传代码到服务器(或 git clone)
  2. composer install --no-dev
  3. 配置 .env 与 Nginx
  4. frontend/homefrontend/admin 执行 npm run build
  5. 访问 /setup 完成安装(或导入 SQL + install.lock)
  6. 设置目录权限:runtime/public/ 可写

详细宝塔步骤见 kede-finance/INSTALL-BAOTA.md


Nginx 要点

  • 根目录指向 public/
  • PHP 走 FastCGI
  • /admin API 与 SPA 分流(参考 deploy/nginx-baota.conf
  • /tpl/* 魔方主题 SSR 转发到 /index.php?s=/home/theme_tpl/page&path=...
  • 静态资源 /themes//plugins/ 直接访问

注意 /admin SPA 的 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 官方包;本地开发通常留空或指向自建更新站。


插件安装(生产环境)

不支持插件市场离线部署。 生产/内网请使用 压缩包安装

  1. 将插件 zip 解压到 public/plugins/{type}/{name}/
  2. 后台 插件管理 → 本地插件安装
  3. 官方插件随系统分发的,文件已在 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 分包manualChunksarco / 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::setforget)。前台每页省去 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.phpdefault 改为 redis 并配置连接,配置缓存即自动跨进程共享。

异步与扩展

当前版本 无独立队列 Worker:开通、上游同步等为同步 HTTP 调用。
高并发场景建议:

  • 支付回调幂等已内置
  • 大流量短信/邮件可后续接 Redis 队列(预留扩展点)

安全 checklist

  • [ ] 生产关闭 APP_DEBUG
  • [ ] 修改默认管理员密码
  • [ ] HTTPS + HSTS
  • [ ] 限制 /setup 访问(安装后)
  • [ ] 支付密钥仅存数据库/config,不进 git
  • [ ] 定期 composer update 安全补丁

返回 文档站首页

KeDe Finance · 纯 PHP 自研财务系统