Laravel 10在Linode的Rocky Linux 8上部署失败主因是PHP扩展未真实加载、Nginx root未指向public/目录、.env未置于项目根目录;需启用EPEL+Remi仓库升级PHP至8.1+,用php -m验证mbstring、intl等扩展全启用,Nginx配置root设为/var/www/myapp/public并配全try_files,storage和bootstrap/cache权限须与PHP-FPM用户(如nginx)一致。

Laravel 10 在 Linode 的 Rocky Linux 8 上部署失败,90% 是因为 PHP 扩展没真正加载、Nginx root 指向了项目根目录而非 public/、或 .env 被放错位置——这三点任一出错,直接 500 或 403,不给你试错机会。
确认 PHP 8.1+ 及必需扩展已真实启用
Linode 默认镜像里的 Rocky Linux 8 自带 PHP 7.4,php -v 看到 8.1 不代表 Nginx 实际在用它;php-fpm 和 CLI 必须一致,且所有扩展得真加载进进程里。
- 先启用 EPEL 和 Remi 仓库:
sudo dnf install epel-release -y sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y sudo dnf module reset php && sudo dnf module enable php:remi-8.1- 安装完整扩展包(缺
intl 会导致 Carbon 初始化失败,缺 mbstring 会卡在 composer install):
sudo dnf install php php-fpm php-mysqlnd php-curl php-mbstring php-xml php-zip php-gd php-opcache php-intl -y- 验证是否全部生效(不是看 php.ini,是看运行时模块):
php -m | grep -E "(mbstring|openssl|pdo|tokenizer|xml|ctype|json|intl)"每行都必须有输出;若漏项,检查
/etc/php-fpm.d/www.conf 中的 php_admin_value[extension] 是否被注释,或 /etc/php.d/ 下对应 .ini 文件是否被加载。
Nginx 配置必须绕过 public/ 入口陷阱
Linode 新建的 Rocky 8 实例默认没启 Nginx,且常见错误是把root 设成 /var/www/myapp,结果所有请求 403;或漏掉 try_files,导致路由全 404。
- 启动服务:
sudo systemctl enable --now nginx php-fpm- 站点配置路径为
/etc/nginx/conf.d/myapp.conf,关键三行不能少:
root /var/www/myapp/public; index index.php; try_files $uri $uri/ /index.php?$query_string;-
fastcgi_pass 必须匹配实际 socket 路径(Rocky 8 默认是 unix:/run/php-fpm/www.sock,不是 /var/run/);
- 检查语法并重载:
sudo nginx -t && sudo systemctl reload nginx
composer install --no-dev 必须加 --optimize-autoloader
Linode 常见配置是 1–2GB 内存,不加优化参数,composer install 极易 OOM 或卡死在 Downloading packages。
- 先确保 .env 已就位(必须在项目根目录,**不能**放在 public/ 下):
cp .env.example .env- 生成密钥:
php artisan key:generate- 执行安装(加内存豁免和自动加载优化):
COMPOSER_MEMORY_LIMIT=-1 composer install --no-dev --optimize-autoloader- 若仍卡住,临时切回官方源:
composer config repo.packagist https://packagist.org
storage 和 bootstrap/cache 权限必须与 PHP-FPM 用户对齐
Rocky 8 默认 PHP-FPM 运行用户是nginx(不是 www-data),而 Laravel 默认假设是 www-data,权限错位会导致日志写不进、缓存生成失败、500 报错无日志。
- 查当前 PHP-FPM 用户:
grep "^user" /etc/php-fpm.d/www.conf- 修改目录所有权(假设用户是
nginx):
sudo chown -R nginx:nginx storage bootstrap/cache- 确保可写(不用 777):
sudo chmod -R 755 storage bootstrap/cache- 最后跑一次缓存命令(别跳过):
php artisan config:cache && php artisan route:cache && php artisan view:cache
最常被忽略的是:PHP-FPM 用户和目录 owner 不一致,以及 .env 放在 public/ 下还反复刷新页面等报错——它根本读不到 APP_KEY,连 php artisan 都会直接炸。


















