可行,但必须手动安装PHP 8.2+并启用mbstring/openssl/pdo等全部扩展、升级Composer至3.x、用--no-interaction初始化项目,并以新PHP路径执行artisan命令。

华为 EulerOS 2.9 上部署 Laravel 11 是可行的,但必须绕过默认系统包的限制——它自带的 PHP(通常是 7.4 或 8.0)和 Composer(2.x)均不满足 Laravel 11 要求。关键不是“能不能装”,而是必须手动安装 PHP 8.2+、启用全部扩展、升级 Composer 到 3.x,并用 --no-interaction 初始化项目。
确认 EulerOS 2.9 系统基础状态
EulerOS 2.9 基于 openEuler 22.03 LTS-SP3,内核稳定但软件源保守。默认 php -v 很可能输出 7.4.33 或 8.0.28,这直接导致 composer create-project laravel/laravel:^11.0 失败并报 Your requirements could not be resolved。不要尝试 yum install php 升级,官方源不提供 PHP 8.2+ RPM 包。
- 先执行
cat /etc/os-release | grep VERSION_ID确认是22.03系列 - 运行
php -v和composer --version,只要任一值低于8.2.0或3.0.0,就必须跳过系统包,走编译或第三方源 - 检查
which php和which composer,避免路径冲突(如同时存在/usr/bin/php和/opt/php82/bin/php)
手动安装 PHP 8.2+ 并启用全部必需扩展
Laravel 11 强制要求 mbstring、openssl、pdo、tokenizer、xml、ctype、json、bcmath、fileinfo、zip、curl 全部启用,缺一个,php artisan key:generate 或迁移就会中断。EulerOS 默认不装 php-intl 和 php-bcmath,且 php.ini 中多数 extension= 行被注释。
- 推荐从源码编译:下载 php-8.2.25.tar.gz,解压后
./configure --prefix=/opt/php82 --enable-mbstring --with-openssl --with-pdo-mysql --enable-tokenizer --enable-xml --enable-ctype --enable-json --enable-bcmath --enable-fileinfo --enable-zip --with-curl - 编译前确保已装
gcc、make、libxml2-devel、openssl-devel、sqlite-devel、oniguruma-devel(yum install -y gcc make libxml2-devel openssl-devel sqlite-devel oniguruma-devel) - 编译完成后,把
/opt/php82/bin加入PATH,并确认php --ini指向你新建的php.ini;打开该文件,取消注释所有extension=行(尤其extension=mbstring和extension=intl) - 验证:运行
/opt/php82/bin/php -m | grep -E "(mbstring|intl|pdo|bcmath)",每项都必须有输出
强制使用 Composer 3.x 并切腾讯云镜像
Composer 2.5.x 在 EulerOS 上执行 create-project 会卡死在 Resolving dependencies,不是网络问题,是 Laravel 11 的 composer.json 使用了 Composer 3 特有的插件解析语法。EulerOS 官方源的 composer 包仍是 2.x,必须卸载并重装。
- 先清理旧版:
rm -f /usr/bin/composer(或which composer找到位置后删) - 用官方脚本安装最新版:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && php composer-setup.php --install-dir=/usr/local/bin --filename=composer - 验证:
composer --version必须输出类似Composer version 3.0.4 - 立即设国内镜像(阿里云偶有滞后,优先腾讯云):
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 验证生效:
composer config -l | grep repo.packagist应返回你刚设置的 URL
创建项目时必须加 --no-interaction 并立刻生成密钥
在 EulerOS 终端(无 TTY 环境)下漏掉 --no-interaction,composer create-project laravel/laravel:^11.0 myapp 会静默卡住或生成空 .env,后续所有加密、Session、CSRF 都失效,但错误不明显,直到访问页面报 The only supported ciphers are AES-128-CBC and AES-256-CBC。
- 正确命令:
composer create-project laravel/laravel:^11.0 myapp --no-interaction - 进目录后第一件事:
cd myapp && /opt/php82/bin/php artisan key:generate(务必用你新装的 PHP 路径) - 接着清缓存:
/opt/php82/bin/php artisan config:clear && /opt/php82/bin/php artisan cache:clear - 测试启动:
/opt/php82/bin/php artisan serve --host=0.0.0.0 --port=8000;若提示Unable to load dynamic library 'pdo_mysql',说明pdo扩展没启对,回上一步查php.ini
最易被忽略的是:EulerOS 默认关闭 SELinux 但未禁用,某些扩展(如 fileinfo)加载失败时不会报错,只静默跳过。务必用 php -m 逐项核对,不能只信 php -v。另外,php artisan serve 只用于开发,生产必须配 Nginx + PHP-FPM,而 EulerOS 的 php-fpm 服务单元名是 php82-fpm(非 php-fpm),配置文件在 /opt/php82/etc/php-fpm.d/www.conf,这点常被跳过。



















