温馨提示×

Ubuntu下Laravel项目如何优化

小樊
39
2026-01-07 02:56:18
栏目: 智能运维

Ubuntu下Laravel项目优化实战清单

一 基础环境优化

  • 启用并正确配置 OPcache(生产建议关闭时间戳检查):
    • 安装:sudo apt-get install php-opcache
    • 配置 php.ini(示例值可按内存调优):
      • opcache.enable=1
      • opcache.memory_consumption=256
      • opcache.max_accelerated_files=10000
      • opcache.validate_timestamps=0(生产环境建议关闭,代码发布后执行 php-fpm 重载)
      • opcache.revalidate_freq=60
  • 使用 PHP-FPM + Nginx(优于 mod_php/Apache 的并发与内存表现):
    • 安装:sudo apt install php-fpm nginx
    • Nginx 站点根目录指向 public,PHP 请求转发到 php-fpm.sock,示例:
      • fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
      • fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    • 进程池建议:按内存与 CPU 选择 static/dynamic,并设定 pm.max_requests=500~1000 防止内存泄漏累积。

二 应用层缓存与队列

  • 配置 Redis(高性能缓存/会话/队列后端):
    • 安装:sudo apt update && sudo apt install redis-server
    • .env:REDIS_HOST=127.0.0.1REDIS_PORT=6379REDIS_PASSWORD=null
    • Composer:composer require predis/predis
  • 缓存策略与用法:
    • 数据缓存:Cache::remember('key', 60, fn() => Model::all());
    • 页面缓存:控制器 Cache::remember('home', 3600, fn() => view('home'));;Blade @cache('home') ... @endcache
    • 驱动配置:.env 设置 CACHE_DRIVER=redisSESSION_DRIVER=redis
  • 队列异步化耗时任务:
    • 队列连接(config/queue.php):'driver' => 'redis', 'retry_after' => 90
    • 任务:php artisan make:job SendEmail;分发:SendEmail::dispatch($user);
    • 常驻消费:php artisan queue:work --daemon(生产建议使用 Supervisor 托管)

三 部署与构建优化

  • 生产环境基线:
    • .env 设置 APP_ENV=productionAPP_DEBUG=false
    • 依赖安装:composer install --optimize-autoloader --no-dev
    • 生成密钥:php artisan key:generate
    • 目录权限:chmod -R 755 storage bootstrap/cachechown -R www-data:www-data storage bootstrap/cache
  • Laravel 优化命令(发布后执行):
    • php artisan config:cache
    • php artisan route:cache
    • php artisan view:cache
    • composer dump-autoload --optimize
  • 前端与静态资源:
    • 资源构建:npm run production(Laravel Mix)
    • 传输与网络:启用 HTTP/2、开启 Gzip、接入 CDN 加速静态资源。

四 数据库与查询优化

  • 索引与查询:为高频查询字段建立合适索引,避免全表扫描;在 Eloquent 中使用 预加载 解决 N+1 问题(如 with('relation'))。
  • 分页与只取所需字段:列表页使用 分页,查询时仅选择需要的列,减少 IO 与内存占用。
  • 缓存查询结果:对命中稳定且计算/IO 成本高的数据使用 Cache::remember 等策略,降低数据库压力。

五 高并发与系统层面调优

  • 进程与并发:结合 PHP-FPMpm.max_childrenpm.start_serverspm.min_spare_serverspm.max_spare_servers 与业务内存预算进行压测调优;必要时采用 Laravel Octane(Swoole/RoadRunner)提升吞吐。
  • 文件句柄与网络参数(示例,按实际压测微调):
    • 句柄数:ulimit -n 655360,并在 /etc/security/limits.conf 设置 * soft/hard nofile 655360
    • TCP 优化(/etc/sysctl.conf):
      • net.ipv4.tcp_syncookies=1
      • net.ipv4.tcp_tw_reuse=1
      • net.ipv4.tcp_fin_timeout=30
      • net.ipv4.ip_local_port_range=10240 60999
      • net.ipv4.tcp_keepalive_time=1200
      • net.ipv4.tcp_max_syn_backlog=8192
      • net.ipv4.tcp_max_tw_buckets=5000
      • 执行 sysctl -p 使参数生效
  • 监控与定位:开发/预发环境接入 Laravel DebugbarBlackfire 等工具定位慢查询与瓶颈,再在生产用更轻量的日志/指标方案观测。

0