根本原因是PHP扩展未真实启用、Composer镜像未切国内、Laravel版本未显式锁定、.env修改后未清缓存;须依次验证php -m输出全部必需扩展、配置腾讯云镜像源、指定laravel/laravel:^10.0安装、生成APP_KEY并执行config:clear/cache:clear/view:clear。

根本原因不是 Vultr 或 Debian 11 本身有问题,而是 Laravel 10 安装流程在该环境上默认跳过了四道必须人工确认的关卡:PHP 扩展未真实启用、Composer 镜像仍走海外源、版本未显式锁定、.env 初始化后没清缓存。
PHP 扩展看似安装了,但没在 CLI 模式下加载
Debian 11 默认装的是 php 包,但常只启用 Apache 或 FPM 模块,CLI(命令行)用的其实是另一套配置。运行 php -v 看到 8.1+ 不代表扩展就可用。
- 执行
php -m | grep -E "(mbstring|openssl|pdo|tokenizer|xml|ctype|json|intl)",缺任何一项都会在laravel new或artisan key:generate时直接报错 - Debian 上 intl 扩展常缺失:
sudo apt install php-intl,装完必须重启 CLI 配置:删掉/etc/php/*/cli/conf.d/20-intl.ini(若存在),再重装php-intl - 关键验证:运行
php --ini,确认输出的Loaded Configuration File路径下,对应extension=行已取消注释
Composer 还在连 packagist.org,超时或 404 就卡死
Vultr 默认没配镜像源,composer create-project laravel/laravel 会直连海外,而 Laravel 10 的依赖元数据(如 provider-2024-xx.json)在国内经常 404 或响应极慢。
- 立刻执行:
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/(腾讯云最稳,阿里云近期有滞后) - 验证是否生效:
composer config -l | grep repo.packagist,输出必须是刚设的 URL - 若之前失败过,先清缓存:
rm -rf ~/.composer/cache,否则 Composer 可能复用损坏的元数据
没锁版本,拉到 Laravel 11 或 dev 分支直接崩
Debian 11 自带的 PHP 版本多为 8.1.x(Laravel 10 要求),但 composer create-project laravel/laravel 默认会尝试拉最新稳定版——而 Laravel 11 要求 PHP ≥ 8.2,一跑就报 Your requirements could not be resolved 或静默卡在 Installing dependencies。
- 必须显式指定:
composer create-project laravel/laravel:^10.0 myapp - 如果仍卡住,加内存限制再试:
COMPOSER_MEMORY_LIMIT=-1 composer create-project laravel/laravel:^10.0 myapp - 别用
laravel new命令——它底层调用的也是create-project,但不支持传^10.0,容易踩坑
.env 改完不清理缓存,500 错误查到怀疑人生
很多人改完 .env 里的 DB_HOST 或 APP_DEBUG=true 就直接 php artisan serve,结果还是 500 页面——因为 Laravel 从第二次请求起全走缓存,.env 变更完全不生效。
- 初始化项目后第一件事:
cd myapp && cp .env.example .env && php artisan key:generate - 紧接着必须清三缓存:
php artisan config:clear && php artisan cache:clear && php artisan view:clear - 如果用 Nginx,还要确认
root指向的是public/目录,不是项目根目录——否则.env文件可能被直接暴露
真正卡住的地方,往往不是“哪步没做”,而是“哪步做了但没验证是否真生效”。比如 php -m 看到 intl,但 php --ini 显示 CLI 加载的是另一个 php.ini;又比如镜像源设了,但 composer config -l 没验证,缓存里还存着旧地址。这些细节不手动戳穿,错误就会一直以不同形态复现。


















