在 Debian 上部署 Laravel(尤其是生产环境)时,常见的“坑”主要集中在系统依赖、权限、PHP 版本、Web 服务器、队列/定时任务、缓存与安全等方面。下面按实际部署顺序梳理:
Debian 稳定版(如 Debian 11/12)自带 PHP 可能较旧。
✅ 解决:
sudo apt install php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-mbstring php8.2-xml php8.2-curl php8.2-zip php8.2-gd php8.2-bcmath
或使用 surury / ondrej 第三方源(Debian 上较少用,Ubuntu 更常见)。
很多错误是扩展没装:
常见缺失:
mbstringxmlbcmathgdzipcurlintl✅ 验证:
php -m
PHP Fatal error: Allowed memory size exhausted
✅ 解决:
COMPOSER_MEMORY_LIMIT=-1 composer install
或:
php -d memory_limit=-1 /usr/local/bin/composer install
composer install 而不是 composer install --no-dev生产环境一定要:
composer install --optimize-autoloader --no-dev
否则:
报错:
The stream or file "/var/www/laravel/storage/logs/laravel.log" could not be opened
✅ 正确做法(推荐 www-data):
sudo chown -R www-data:www-data /var/www/laravel
sudo chmod -R 755 /var/www/laravel
sudo chmod -R 775 storage bootstrap/cache
❌ 不要直接 chmod 777
Debian 默认没有 SELinux(有 AppArmor),但如果你从 CentOS 迁移经验过来,别被误导。
public/错误:
404 / 500
✅ 正确 root:
root /var/www/laravel/public;
缺少:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
否则路由全 404。
Nginx 中:
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
版本要对应。
.env 没复制或没生成 keycp .env.example .env
php artisan key:generate
否则:
No application encryption key has been specified.
.env:
APP_ENV=production
APP_DEBUG=false
否则会泄露堆栈信息。
php artisan queue:work
退出终端就停了。
✅ 生产用:
supervisorsystemd示例 systemd:
[Service]
ExecStart=/usr/bin/php /var/www/laravel/artisan queue:work
Laravel 调度需要:
* * * * * www-data php /var/www/laravel/artisan schedule:run
php artisan config:clear
php artisan route:clear
php artisan view:clear
部署后建议:
php artisan config:cache
php artisan route:cache
推荐:
DB_CONNECTION=mysql
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci
否则 emoji 存不进。
.envNginx 中:
location ~ /\.env {
deny all;
}
php artisan --versionphp -mtail -f storage/logs/laravel.lognginx error.logphp-fpm.logDebian 部署 Laravel 的坑,80% 是 PHP 版本 + 权限 + Nginx 配置 + 队列没跑。
如果你愿意,我可以: