Composer/satis 极速搭建 Composer 私有源

前置操作(satis安装)

#这里的 /var/www/packagist.satis.cc 只是举个例子,以自己实际的文件夹为准
git clone https://github.com/composer/satis.git  /var/www/packagist.satis.cc

然后 在 nginx 加一个 packagist.satis.cc 的配置,指向 /var/www/packagist.satis.cc/public(略)

例示配置

对里面的 /var/www/packagist.satis.cc/satis.json 文件的配置

{
  "name": "Easy Repository",
  "homepage": "http://packagist.satis.cc",
  "repositories": [
    {"type": "vcs","url": "https://gitlab.local.com/aBigPackage/helloWorld"},
    {"type": "composer", "url": "https://packagist.laravel-china.org"}
  ],
  "archive": {
    "directory": "dist",
    "format": "tar",
    "skip-dev": true,
    "prefix-url": "http://packagist.satis.cc"
  },
  "abandoned":{
    "lastcraft/simpletest" : "simpletest/simpletest"
  },
  "require":{
    "monolog/monolog": "*",
    "darkaonline/l5-swagger": "~5.4",
    "laravel/laravel":"~5.4",
    "league/flysystem-aws-s3-v3":"*",
    "zircote/swagger-php":"*",
    "simpletest/simpletest":"*"
  },
  "require-all": false,
  "require-dependencies": true,
  "require-dev-dependencies": true
}

配置解释

// Composer 私有源的名称,可随意
"name": "Easy Repository",

// 建立之后home页面的地址(用于查看这个源有哪些package)
"homepage": "http://packagist.satis.cc",

// 获取package的地址
/** 
  这里如果你是需要从私有的git源获取package的话,就参照如下这样写就可以了
  (带.git和不带.git似乎都ok)
  {"type": "vcs","url": "https://gitlab.local.com/aBigPackage/helloWorld"}

  如果你是需要构建内网的源,且内外网分离的情况下从外网获取package到内网,就参照下面这样写就好了
  (没有必要挨个去写需要引用的package的github地址)
  {"type": "composer", "url": "https://packagist.laravel-china.org"}
*/
"repositories": [
  {"type": "vcs","url": "https://gitlab.local.com/aBigPackage/helloWorld"},
  {"type": "composer", "url": "https://packagist.laravel-china.org"}
],

//如果需要satis将package下载到本地,直接从本地拉取,则需要配置这一项
//(内网源必须配置此项)
"archive": {
  "directory": "dist",

  //tar or zip
  "format": "tar",

  //是否需要为分支创建下载(默认只对有tag的提交创建下载)
  "skip-dev": false,
  "prefix-url": "http://packagist.satis.cc"
},

// 被抛弃或替换的package
"abandoned":{
  //true表示这个 package 真正的被抛弃
  "lox/simpletest":true
  //表示 lastcraft/simpletest 被 simpletest/simpletest 替换
  "lastcraft/simpletest" : "simpletest/simpletest"
},

// 需要 satis 的全部的 package
"require":{
  "monolog/monolog": "*",
  "darkaonline/l5-swagger": "~5.4",
  "laravel/laravel":"~5.4",
  "league/flysystem-aws-s3-v3":"*",
  "zircote/swagger-php":"*",
  "simpletest/simpletest":"*"
},

//是否需要将配置的源的全部的package都拉取
"require-all": false,
//是否自动解决依赖
"require-dependencies": true
//是否自动解决dev依赖
"require-dev-dependencies": true

build

/var/www/packagist.satis.cc 文件夹下执行命令:

// 全部需要的package重新检查更新并构建
// 强烈推荐追加 --skip-errors 参数,否则碰到某些已经被放弃的 package 会卡住构建
php bin/satis build satis.json public/ --skip-errors

// 仅仅重新检查更新并构建指定的几个包
php bin/satis build satis.json public/ A/package B/other-package

// 如果只想扫描单个存储库并更新其中找到的所有包,请将VCS存储库URL作为可选参数传递:
php bin/satis build --repository-url https://only.my/repo.git satis.json public/

使用 Composer 私有源

有两种方法可以让composer去使用私有源

局部

  1. 在 composer.json 里添加
    "repositories": [
    {
    "type": "composer",
    "url": "http://packagist.satis.cc"
    }
    ],

全局

  1. 将composer全局的源换成私有源
    composer config -g repo.packagist composer https://packagist.laravel-china.org

引入

在引入的时候,如果因为其他 package 已经被改的面目全非导致报错 无法引入你需要的package,推荐 --ignore-platform-reqs参数

composer require xxx/xxxpackage --ignore-platform-reqs

FAQ

  1. composer 报 SSL 相关问题

    • 这个可以网上找一下解决方案,错误信息搜一下就有了。。。
  2. 对 satis 执行 build 的时候的参数有没有什么文档可以看啊!

    • 推荐直接在命令行下使用以下命令看参数列表,快捷方便
      php bin/satis build --help
      //---- or ----
      php bin/satis --help
  3. 待补充

more

个人认为主要的配置项大概是这么些,如果有更多需求,例如需要http验证,ssl验证等的配置请查阅 官方文档

参考来源:

在此基础上进行 修改,整理,编辑


links:

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 3年前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4

什么情况下会用上私有源呢

5年前 评论
Kurisu

@mingyun 主要是公司有一些私有package 不希望公开时使用吧. 我的情况是之前的公司是内外网开发, 获取新的 package 有点麻烦, 于是就在内网搭了个内网源

5年前 评论
qinplain 2年前

file这个报错是什么意思

3年前 评论
Kurisu (楼主) 3年前
Kurisu (楼主) 3年前

自建源,composer install 时需要输入账号密码,这里的账号密码是什么

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!