Laravel Forge部署报错:HTTP URL需传入HttpDownloader实例
Laravel Forge部署Laravel应用时Composer报错排查与解决
问题详情
部署Laravel应用时,日志出现以下Composer错误:
Thu Jul 20 22:14:23 UTC 2023 From github.com:jas0123uah/noted_laravel * branch main -> FETCH_HEAD Already up to date. Running 2.5.8 (2023-06-09 17:13:21) with PHP 8.2.8 on Linux / 5.15.0-76-generic Reading ./composer.json (/home/forge/default/composer.json) Reading ./composer.json (/home/forge/default/composer.json) In JsonFile.php line 65: [InvalidArgumentException] http urls require a HttpDownloader instance to be passed Exception trace: at phar:///usr/local/bin/composer/src/Composer/Json/JsonFile.php:65 Composer\Json\JsonFile->__construct() at phar:///usr/local/bin/composer/src/Composer/Factory.php:181 Composer\Factory::createConfig() at phar:///usr/local/bin/composer/src/Composer/Factory.php:460 Composer\Factory::createGlobal() at phar:///usr/local/bin/composer/src/Composer/Command/BaseCommand.php:235 Composer\Command\BaseCommand->initialize() at phar:///usr/local/bin/composer/vendor/symfony/console/Command/Command.php:264 Symfony\Component\Console\Command\Command->run() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:1040 Symfony\Component\Console\Application->doRunCommand() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:301 Symfony\Component\Console\Application->doRun() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:378 Composer\Console\Application->doRun() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:171 Symfony\Component\Console\Application->run() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:141 Composer\Console\Application->run() at phar:///usr/local/bin/composer/bin/composer:88 require() at /usr/local/bin/composer:29
此前部署正常,问题出现前刚将仓库默认分支从master改为main。手动更新Composer时执行结果正常:
Loading composer repositories with package information Updating dependencies Nothing to modify in lock file Installing dependencies from lock file (including require-dev) Nothing to install, update or remove Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi INFO Discovering packages. laravel/sail ........................................................................ DONE laravel/sanctum ..................................................................... DONE laravel/tinker ...................................................................... DONE laravel/ui .......................................................................... DONE nesbot/carbon ....................................................................... DONE nunomaduro/collision ................................................................ DONE nunomaduro/termwind ................................................................. DONE spatie/laravel-ignition ............................................................. DONE 81 packages you are using are looking for funding. Use the `composer fund` command to find out more! > @php artisan vendor:publish --tag=laravel-assets --ansi --force INFO No publishable resources for tag [laravel-assets]. No security vulnerability advisories found
当前使用的部署脚本:
cd /home/forge/default git pull origin $FORGE_SITE_BRANCH $FORGE_COMPOSER install --no-dev --no-interaction --prefer-dist --optimize-autoloader ( flock -w 10 9 || exit 1 echo 'Restarting FPM...'; sudo -S service $FORGE_PHP_FPM reload ) 9>/tmp/fpmlock if [ -f artisan ]; then $FORGE_PHP artisan migrate --force fi npm i npm run build rm -rf node_modules
解决方向
1. 检查全局Composer配置
错误源于Composer加载HTTP协议的配置文件时缺少下载器实例。检查服务器上的全局配置文件(~/.composer/config.json或/etc/composer/config.json):
- 若存在HTTP形式的仓库地址,替换为HTTPS地址
- 确保配置引用的是本地文件路径而非远程URL
2. 重装Composer修复损坏文件
执行以下命令重新安装Composer,修复可能损坏的Phar文件:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');" sudo mv composer.phar /usr/local/bin/composer
3. 验证分支环境变量
在部署脚本开头添加echo $FORGE_SITE_BRANCH,确认Laravel Forge的环境变量是否正确指向main分支,避免拉取分支异常导致的连锁问题。
4. 清理Composer缓存
执行缓存清理命令,避免缓存的旧配置干扰:
$FORGE_COMPOSER clear-cache
之后重新执行部署脚本中的Composer安装步骤。
5. 检查部署用户权限
确认Forge部署用户对/home/forge/default目录及Composer相关配置文件有读写权限,避免因权限不足导致配置加载失败。
内容的提问来源于stack exchange,提问作者jas123
相关产品推荐
相关产品推荐

