如何将Artifactory用作Packagist PHP Composer依赖的缓存代理
实现Artifactory全量Composer依赖镜像的步骤
你不需要手动逐个维护依赖条目,Artifactory的Composer远程仓库默认支持自动缓存首次代理拉取的所有依赖,结合Composer自带的能力就能一次性完成所有直接、间接依赖的镜像同步:
1. 确认全量依赖信息
你项目根目录下的composer.lock已经完整记录了所有直接、间接依赖的精确版本信息,无需额外手动梳理。如果你需要导出依赖清单做核对,可以执行以下命令:
composer show --locked --name-only > all-dependencies.txt
生成的all-dependencies.txt文件中会列出当前项目用到的所有依赖包名。
2. 批量触发Artifactory缓存
方案1:通用方案(适配所有Artifactory版本)
- 先配置本地Composer全局源为你已经创建好的Artifactory Composer远程仓库:
composer config -g repos.packagist composer https://<你的Artifactory域名>/artifactory/api/composer/<你的远程仓库名称> - 清空本地已有的Composer缓存,避免本地已有缓存跳过代理请求:
composer clear-cache - 新建一个空白目录,将原项目的
composer.json和composer.lock复制到该目录下,执行安装命令触发全量依赖拉取:
该命令仅下载依赖包、不会执行项目安装脚本也不会生成自动加载文件,所有依赖请求都会走Artifactory代理,Artifactory会自动将拉取到的依赖永久缓存到本地。composer install --no-scripts --no-autoloader
方案2:企业版Artifactory专用方案
如果你使用的是企业版Artifactory,可以通过JFrog CLI批量触发缓存,无需本地下载依赖:
- 安装并配置好JFrog CLI和Artifactory实例的连通性
- 遍历第一步导出的
all-dependencies.txt中的所有包名,执行以下命令触发远程缓存:jfrog rt composer-install --repo <你的远程仓库名称>
3. 验证缓存结果
- 登录Artifactory管理后台,进入对应的Composer远程仓库的「工件浏览器」页面,即可看到所有已经成功缓存的依赖包
- 用一台未拉取过该项目依赖的设备,配置好Artifactory Composer源后执行
composer install,确认所有依赖都从Artifactory拉取、无Packagist请求即可。
注意事项
- 如果你的项目有多个分支、对应不同的
composer.lock版本,将所有分支的lock文件按上述步骤执行一次,即可覆盖所有用到的依赖版本 - 你可以根据需要调整Artifactory远程仓库的缓存过期策略,默认配置下缓存的依赖会永久保留,不会重复请求Packagist
- 如需强制所有依赖都走Artifactory,只需在本地Composer配置中移除所有其他源,仅保留Artifactory的Composer源即可,不会出现漏缓存的情况。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

