红旗linux 8部署laravel 10需四步闭环:一配remi 8.1源并实装mbstring、intl等全部php扩展;二nginx root指向public且用semanage/restorecon修复selinux上下文;三composer install加--no-dev --optimize-autoloader并设composer_memory_limit=-1;四.env必须置于项目根目录并执行php artisan key:generate生成密钥。

红旗Linux 8 是基于 RHEL 8 的国产操作系统,内核、包管理(dnf)、SELinux 行为与 Rocky Linux 8 高度一致。部署 Laravel 10 的核心路径完全复用,但需注意红旗特有的仓库策略和默认禁用项。
确认 PHP 8.1+ 已真实启用全部必需扩展
红旗Linux 8 默认源只提供 PHP 7.4,不满足 Laravel 10 最低要求。仅运行 php -v 看到 8.1 不代表扩展已加载——必须用 php -m 实锤:
- 缺
intl:Carbon 初始化失败,php artisan tinker直接报错 - 缺
mbstring或xml:视图编译、配置加载阶段崩溃 -
openssl和pdo缺一不可,否则数据库连接、HTTPS 请求全挂
执行以下命令启用 Remi 8.1 模块并安装扩展:
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 sudo 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)"
每行都应有输出,缺任何一项都要重装对应包(如 php-intl)。
Nginx root 必须指向 public/,且 SELinux 上下文要放行
红旗 Linux 默认启用 SELinux,这是和普通 CentOS/Rocky 最大差异点。即使 root /var/www/myapp/public 写对了,Nginx 仍会 403 —— 因为 public/ 目录的上下文可能是 default_t,而非 Nginx 允许读取的 httpd_sys_content_t。
关键三步不能跳:
-
root值必须是项目内public/子目录的绝对路径,例如/var/www/myapp/public -
try_files $uri $uri/ /index.php?$query_string;必须存在,否则所有路由 404 - 运行后立即修复 SELinux 上下文:
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/myapp(/.*)?",再sudo restorecon -Rv /var/www/myapp
漏掉 restorecon,日志里只会看到模糊的 “Permission denied”,不会提示 SELinux。
composer install --no-dev 必须加 --optimize-autoloader 且设内存上限
红旗 Linux 8 默认 VPS 内存常为 1–2GB,composer install 在无限制下极易 OOM。尤其国内网络波动时,解压缓存包会反复重试,内存占用飙升。
正确命令组合:
COMPOSER_MEMORY_LIMIT=-1 composer install --no-dev --optimize-autoloader
注意:
-
--no-dev不只是省空间,还避免开发依赖(如phpunit)触发 PHP 扩展冲突 -
--optimize-autoloader强制生成静态映射,否则首次请求可能超时或 500 - 若仍卡在
Downloading packages,先清缓存:rm -rf ~/.composer/cache,再切腾讯云镜像:composer config -g repo.packagist composer @#@#@#@#@#@#@#@#@#@0
.env 文件位置和 APP_KEY 生成必须在项目根目录操作
常见错误:把 .env 放进 public/ 下,或从别处复制过来但没运行 php artisan key:generate。
必须严格按顺序:
-
.env文件只能位于项目根目录(如/var/www/myapp/.env),不能在public/或上级 - 进入项目根目录后执行:
cp .env.example .env && php artisan key:generate -
APP_KEY必须由该命令生成,手输、复制旧值、留空都会导致 session 失效、CSRF 报错、邮件签名失败
如果已部署但页面空白或登录态无法保持,第一反应就是检查 .env 是否在对的位置、APP_KEY 是否真实生成。
实际部署中,最易被忽略的是 SELinux 上下文重置和 php -m 的逐项验证。版本号和路径写对了,不代表环境真就绪;报错信息往往藏在 /var/log/nginx/error.log 或 journalctl -u php-fpm -n 50 里,而不是浏览器 500 页面。











