Linode 上 Fedora 38 部署 Laravel 10 最常卡在 PHP 扩展未真实加载、Nginx root 指向错误、.env 位置或权限不当;须验证 php -m 输出必需扩展(含 intl、opcache),root 必设为 /var/www/myapp/public,.env 必位于项目根目录且 chmod 644,storage 和 bootstrap/cache 需 nginx 用户写权限。

Linode 上 Fedora 38 部署 Laravel 10,最常卡在 PHP 扩展未真实加载、Nginx root 指向错误、以及 .env 位置或权限不对——这三处任一出错,直接 500 或 403,不会给你机会看日志。
确认 PHP 8.1+ 及必需扩展已启用(不是装了就算)
Fedora 38 默认仓库的 PHP 是 8.2,但模块未必全启。只跑 php -v 不够,必须验证 CLI 和 FPM 用的是同一套,且扩展真在运行时加载:
-
php -m | grep -E "(mbstring|openssl|pdo|tokenizer|xml|ctype|json|intl)"—— 缺intl会导致 Carbon 初始化失败、php artisan tinker报错;缺opcache会让php artisan serve响应慢 3 倍以上 - Fedora 的 PHP-FPM 配置在
/etc/php-fpm.d/www.conf,确认user和group(通常是nginx)与 Nginx 进程一致 - 若
php -m里没intl,执行:sudo dnf install php-intl -y,然后sudo systemctl restart php-fpm
Nginx 配置必须严格指向 public/ 且含 try_files
常见错误是把 root 设成 /var/www/myapp(项目根目录),结果所有请求 403;或漏掉重写规则,导致路由 404。
- 站点配置路径:
/etc/nginx/conf.d/myapp.conf -
root必须为/var/www/myapp/public,不是/var/www/myapp - 关键三行不能少:
index index.php;、try_files $uri $uri/ /index.php?$query_string;、fastcgi_pass unix:/run/php-fpm/www.sock; - 检查语法:
sudo nginx -t,再sudo systemctl reload nginx
.env 必须在项目根目录,且权限不暴露
.env 若放在 public/ 下,会被直接 HTTP 访问;若权限太松(如 777),PHP-FPM 可能拒绝读取。
-
.env必须位于/var/www/myapp/.env(即public的上一级) - 运行
php artisan key:generate前,确保APP_KEY为空或为占位符;手输密钥或复制旧项目值会导致 session 加密失效 - 设权限:
sudo chown -R nginx:nginx /var/www/myapp,再sudo chmod -R 755 /var/www/myapp,最后sudo chmod 644 /var/www/myapp/.env
composer install --no-dev 要防 OOM 和镜像超时
Fedora 38 默认内存限制低,composer install 极易因内存不足中断,尤其在国内网络环境下。
- 先切国内镜像:
composer config -g repo.packagist composer https://packagist.org(注意:Fedora 上部分镜像源 DNS 解析慢,用官方源反而更稳) - 临时提内存:
COMPOSER_MEMORY_LIMIT=-1 composer install --no-dev --optimize-autoloader - 若仍卡在
Downloading packages,检查/etc/resolv.conf是否用了可靠 DNS(如114.114.114.114) -
composer.lock必须随代码一起上传——没它,install实际变成update,symfony/polyfill 等包小版本漂移会引发Declaration of ... must be compatible with
最难 debug 的其实是 PHP-FPM 和 Nginx 用户不一致,或者 storage 和 bootstrap/cache 目录没被 nginx 用户写入权限——这两个地方报错往往只显示空白页或 500,日志却没线索。


















