php版本需≥8.1且必须安装bcmath、curl、mbstring、openssl、pdo、tokenizer、xml扩展;ovh debian 12常缺bcmath和xml,需apt安装并重启服务;documentroot须指向public目录;.env中app_url不可含/public,app_key须生成;gmail发信需用app password、mail_port=587、mail_encryption=tls;storage和bootstrap/cache需www-data权限;apparmor可能拦截,可临时禁用验证;首要排查storage/logs/laravel.log。

php 版本必须 ≥ 8.1,ext-bcmath、ext-curl、ext-mbstring、ext-openssl、ext-pdo、ext-tokenizer、ext-xml 这些扩展缺一不可 —— OVH 默认的 Debian 12 LAMP 镜像常漏装 bc 和 xml,直接跑 php artisan serve 会报错或页面空白。
确认并补全 PHP 扩展
OVH 的 Debian 12 系统通常预装 PHP 8.2,但扩展不全。运行以下命令检查缺失项:
php -m | grep -E 'bcmath|curl|mbstring|openssl|pdo|tokenizer|xml'
若输出中缺 bcmath 或 xml,执行:
sudo apt update && sudo apt install php8.2-bcmath php8.2-xml -y- 重启 Web 服务(如 Apache:
sudo systemctl restart apache2;如 Nginx + PHP-FPM:sudo systemctl restart php8.2-fpm)
设置正确的 DocumentRoot 和 .env
Laravel 10 要求 Web 根目录指向 public/,不是项目根目录。OVH 控制面板里默认可能指向 /var/www/html,必须手动改:
- 把 Laravel 项目完整上传到例如
/var/www/myapp - 修改虚拟主机配置(Apache:编辑
/etc/apache2/sites-enabled/000-default.conf;Nginx:编辑/etc/nginx/sites-enabled/default),确保DocumentRoot或root指向/var/www/myapp/public -
.env中必须设APP_URL=https://yourdomain.com(不能带/public),且APP_KEY要用php artisan key:generate生成(别跳过)
Gmail 邮件发送失败?重点查 MAIL_PASSWORD 和 MAIL_ENCRYPTION
OVH 共享主机明确屏蔽 465/SSL,且 Gmail 已弃用 smtp.googlemail.com。Laravel 10 默认用 smtp 驱动,但容易配错:
-
MAIL_HOST=smtp.gmail.com(不是 googlemail) -
MAIL_PORT=587+MAIL_ENCRYPTION=tls(不是 ssl) -
MAIL_PASSWORD必须是 Google 账户里开启两步验证后生成的 16 位 App Password,**绝不能用登录密码** - 测试命令:
php artisan tinker→Mail::raw('test', function ($m) { $m->to('you@domain.com'); });
权限与 SELinux / AppArmor 干扰
OVH 的 Debian 12 默认启用 AppArmor,而 Laravel 的 storage/ 和 bootstrap/cache/ 目录需要写入权限。常见现象是 500 错误但无日志输出:
- 先确认目录权限:
sudo chown -R www-data:www-data /var/www/myapp/storage /var/www/myapp/bootstrap/cache - 再检查 AppArmor 是否拦截:
sudo aa-status | grep lsws(若用 OpenLiteSpeed)或apache2/nginx;如看到受限 profile,临时禁用测试:sudo aa-disable /etc/apparmor.d/usr.sbin.apache2 - 生产环境不建议永久关闭,应调整 profile 规则,但多数 OVH 用户可接受临时禁用以快速验证
storage/logs/laravel.log 是唯一真实信源,任何“页面空白”“500”“邮件不发”,第一件事就是看它。OVH 的日志路径有时被重定向到 /var/log/apache2/error.log 或 /var/log/nginx/error.log,但 Laravel 自己的日志永远优先。别猜,直接 tail。











