Laravel 10在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)一致。

UpCloud 上 Rocky Linux 8 部署 Laravel 10,核心卡点不在安装命令本身,而在 PHP 扩展真实加载、Nginx root 路径指向 public/、以及 .env 必须在项目根目录而非 public 内——这三点错一个,500 或 403 就直接报给你看。
确认 PHP 8.1+ 已启用全部必需扩展
Rocky Linux 8 默认仓库的 PHP 是 7.4,必须手动启用 EPEL + Remi 仓库升级。只跑 php -v 看版本没用,php -m 才是真相:
sudo dnf install epel-release -ysudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -ysudo dnf module reset php && sudo dnf module enable php:remi-8.1sudo dnf install php php-fpm php-mysqlnd php-curl php-mbstring php-xml php-zip php-gd php-opcache php-intl -y- 验证:
php -m | grep -E "(mbstring|openssl|pdo|tokenizer|xml|ctype|json|intl)"—— 每项都必须有输出,缺intl会导致Carbon初始化失败
Nginx 配置必须绕过 public/ 入口陷阱
UpCloud 新建的 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,不是/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
composer install --no-dev 必须加 --optimize-autoloader
UpCloud 的 VPS 内存通常为 1–2GB,不加优化参数,composer install 极易 OOM 或超时失败,尤其在国内网络环境下。
- 先确保
.env已复制并填好数据库等信息:cp .env.example .env - 生成密钥:
php artisan key:generate - 执行安装:
COMPOSER_MEMORY_LIMIT=-1 composer install --no-dev --optimize-autoloader - 若仍卡在
Downloading packages,临时切回官方源:composer config repo.packagist composer https://packagist.org(腾讯云镜像偶尔同步延迟) - 最后清缓存:
php artisan config:clear && php artisan cache:clear
storage 和 bootstrap/cache 权限必须由 www-data 写入
Rocky Linux 8 默认 Web 用户是 nginx,但 PHP-FPM 默认池用户是 apache 或 www-data,不统一就会 500 报 “failed to open stream”。
- 查 PHP-FPM 当前用户:
grep "^user" /etc/php-fpm.d/www.conf(常见为nginx或apache) - 改权限(以
nginx为例):sudo chown -R nginx:nginx storage bootstrap/cache - 设可写:
sudo chmod -R 755 storage bootstrap/cache - 别用
777—— UpCloud 安全扫描会告警,且 Laravel 10+ 的storage/logs日志写入失败不会报错,只会静默丢请求
最常被忽略的是:Nginx 的 user、PHP-FPM 的 user、文件系统属主,这三个必须一致;否则哪怕 php artisan serve 能跑,Nginx 下永远 500。


















