签入版本

This commit is contained in:
2026-10-08 17:50:29 +08:00
parent 809750b47e
commit e213a9b31d
444 changed files with 39366 additions and 37533 deletions
@@ -21,7 +21,7 @@ opcache.memory_consumption = 256 ; OPcache 共享内存大小(MB),
opcache.interned_strings_buffer = 16 ; 驻留字符串内存(MB),减少重复字符串存储
opcache.max_accelerated_files = 10000 ; 最大缓存文件数(需大于项目 PHP 文件总数)
opcache.validate_timestamps = 0 ; 不检查文件修改时间(性能最优,更新代码后需重启 PHP-FPM)
opcache.save_comments = 1 ; 保留注释(ThinkPHP 注解依赖此配置)
opcache.save_comments = 1 ; 保留注释(反射文档注释、调试栈追踪依赖此配置)
```
:::warning OPcache 注意事项
@@ -33,8 +33,7 @@ opcache.save_comments = 1 ; 保留注释(ThinkPHP 注解依赖
```ini
; =============================================================================
; PHP-FPM 进程池配置
; =============================================================================
; 配置路径:/etc/php/8.2/fpm/pool.d/www.conf
; 配置路径:/etc/php/8.3/fpm/pool.d/www.conf
; 根据服务器内存和并发量调整参数
; =============================================================================
@@ -50,35 +49,46 @@ pm.max_requests = 500 ; 单进程最大请求数(达到后重启,
```bash
# 生产环境安装依赖
# --no-dev → 排除开发依赖(symfony/var-dumper、think-trace 等)
# --no-dev → 排除开发依赖(phpunit/phpunit、laravel/pint 等)
# --optimize-autoloader → 优化自动加载器(生成 classmap,减少文件查找)
composer install --no-dev --optimize-autoloader
```
### Laravel 缓存命令
```bash
# 生产环境把配置、路由、视图编译进缓存,避免每次请求重新解析
php artisan config:cache
php artisan route:cache
php artisan view:cache
```
## 缓存层
### 使用 Redis
```ini
; .env — Redis 缓存配置
[CACHE]
DRIVER = redis ; 缓存驱动改为 redis(默认为 file)
REDIS_HOST = 127.0.0.1 ; Redis 服务器地址
REDIS_PORT = 6379 ; Redis 端口
REDIS_PASSWORD = your_redis_password ; Redis 密码
; .env — Redis 缓存配置(本项目默认即为 redis 驱动)
CACHE_STORE=redis ; 缓存驱动
SESSION_DRIVER=redis ; 会话驱动
QUEUE_CONNECTION=redis ; 队列驱动
REDIS_CLIENT=phpredis ; Redis PHP 扩展
REDIS_HOST=127.0.0.1 ; Redis 服务器地址
REDIS_PORT=6379 ; Redis 端口
REDIS_PASSWORD=your_redis_password ; Redis 密码
```
:::tip 缓存效果
DictService 和 ParamService 采用两级缓存(请求级 + 持久缓存),使用 Redis 后:
- 字典查询:首次查库 + 写入 Redis,后续直接读缓存(1小时过期)
- 参数查询:同上
- 减少 80%+ 的数据库查询
- **DictCacheService(字典)**:两级缓存(请求级 + Laravel Cache),使用 Redis 后首次查库并写入 Redis,后续直接读缓存(TTL 3600 秒 / 1 小时),可减少 80%+ 的字典查询
- **ParamService(参数)**:仅请求级缓存(数据量小、变更即时生效,不落持久缓存)
:::
## 数据库层
### 索引优化
项目 SQL 脚本已内置大量索引(`uk_tenant_*` 唯一索引、`idx_*` 普通索引,覆盖租户隔离、用户名、手机号、状态、分类等高频查询)。**新增业务表或新增查询字段时**,再按需补充索引:
```sql
-- =============================================================================
-- 为常用查询字段添加索引(提升查询速度)
@@ -87,16 +97,14 @@ DictService 和 ParamService 采用两级缓存(请求级 + 持久缓存),
-- 注意:索引会占用额外存储空间,且降低写入速度,只在高频查询字段上创建
-- =============================================================================
-- 用户表:用户名登录查询、租户隔离查询
ALTER TABLE think_user ADD INDEX idx_username (username);
ALTER TABLE think_user ADD INDEX idx_tenant_id (tenant_id);
-- 新增业务表:租户隔离 + 状态筛选(本项目标准索引命名习惯)
ALTER TABLE laravel_example ADD INDEX idx_tenant_status (tenant_id, status);
-- 文章表:状态筛选、分类筛选
ALTER TABLE think_article ADD INDEX idx_status (status);
ALTER TABLE think_article ADD INDEX idx_category_id (category_id);
-- 操作日志表:按时间范围查询(当前 SQL 脚本未建此索引,日志量大时建议补充)
ALTER TABLE laravel_operation_log ADD INDEX idx_create_time (create_time);
-- 操作日志表:按时间范围查询(最频繁的查询模式)
ALTER TABLE think_operation_log ADD INDEX idx_create_time (create_time);
-- 用户表:平台侧按用户名直查(租户内查询已有 uk_tenant_username 覆盖)
ALTER TABLE laravel_user ADD INDEX idx_username (username);
```
### 慢查询日志
@@ -145,15 +153,16 @@ location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
### CDN 加速
将静态资源(JS/CSS/图片)部署到 CDN,减轻服务器压力。
将静态资源(JS/CSS/图片)部署到 CDN,减轻服务器压力。CDN 场景下注意配置 `.env` 的 `TRUSTED_PROXIES` 以获取真实客户端 IP(见 [11.4 后端部署](/zh/deploy/backend.html))。
## 性能检查清单
| 检查项 | 生产环境 | 开发环境 |
|--------|----------|----------|
| OPcache | 启用 | 可选 |
| Redis 缓存 | 推荐 | 可选 |
| Redis 缓存 | 必需(缓存/会话/队列) | 必需 |
| Laravel 缓存(config/route/view) | 缓存(`php artisan *:cache`) | 清除状态(`*:clear`) |
| Gzip 压缩 | 启用 | 可选 |
| 慢查询日志 | 启用 | 启用 |
| Composer 优化 | `--no-dev --optimize` | 默认 |
| Composer 优化 | `--no-dev --optimize-autoloader` | 默认 |
| 静态资源缓存 | 30天 | 不缓存 |