You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 17:28:11