在 Debian 上部署和优化 Laravel 项目,通常可以从系统层、PHP 层、Laravel 层、数据库层、缓存与队列、前端几个维度来做。下面给你一套比较实用、可落地的优化方案。
php -v
nginx -v
ulimit -n 65535
并在 /etc/security/limits.conf 中设置:
* soft nofile 65535
* hard nofile 65535
apt install php-cli php-fpm php-mysql php-redis php-opcache php-curl php-mbstring php-xml php-zip
/etc/php/8.3/fpm/conf.d/10-opcache.ini
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.validate_timestamps=0
生产环境
validate_timestamps=0
/etc/php/8.3/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
根据内存调整:
free -m
APP_ENV=production
APP_DEBUG=false
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache
修改代码后必须重新 cache
config/app.php
'providers' => [
// 注释掉开发用 provider
]
.env
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
安装 Redis:
apt install redis-server
php artisan queue:work --daemon
用 systemd 守护:
# /etc/systemd/system/laravel-queue.service
Schema::table('orders', function ($table) {
$table->index('user_id');
});
User::with('posts')->get();
SET slow_query_log = 1;
SET long_query_time = 1;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
include fastcgi_params;
fastcgi_cache_valid 200 1m;
}
启用 gzip:
gzip on;
gzip_types text/css application/javascript;
htop, iotop, mysqltuner| 问题 | 解决 |
|---|---|
| 页面慢 | route/config cache |
| CPU 高 | OPCache + FPM 调优 |
| 数据库慢 | 索引 + 队列 |
| 并发低 | Redis + Nginx |
如果你愿意,可以告诉我:
我可以给你针对性的配置模板。