使用 Satis 搭建私有的 Composer 包仓库
简述
iBrand 产品立项时是商业性质的项目,但是在搭建架构时考虑后续的通用性,因此每个模块都设计成一个 Package,作为公司内部用,因此这些包并不能提交到 packagist.org 上去。 所以就想是否能够搭建私有的包仓库,实现一个私有的 packagist 。
仔细翻阅 Composer 文档,发现官方有相应的解决方案:Handling private packages
这里推荐使用 Satis ,也正是我们目前使用的方案,目前运行一切良好。
Satis 是一个静态的 composer 资源库生成器。它像是一个超轻量级的、基于静态文件的 packagist 版本。
你给它一个包含 composer.json 的存储库,定义好 VCS 和 资源库。它会获取所有你列出的包,并打印 packages.json 文件,作为 composer 类型的资源库。
说明
服务器环境:
- centos7.2
- nginx
- php7.1
代码管理平台:码云
文章中尽量以一个真实的情况来撰写,但是文章的仓库地址,网页地址均是不可访问的,用虚拟信息替换了真实信息。
Create Private Git Project
既然为公司内部项目源码是不公开的,我们选择了码云,未选择 github,主要有两个原因:
github private project 是收费的,对于一个公司来说费用不高,但是加上以上两点原因后,所以未选择。
假设我们已经在码云上建立好了私有项目,并且已经编写好了所有的代码和单元测试。
ssh 地址: git@gitee.com:iBrand/test-private-composer.git
composer.json
{
"name": "iBrand/test-private-composer",
"type": "library",
"description": "iBrand test private composer",
"keywords": [
"iBrand crop",
"private composer",
],
"license": "MIT",
"authors": [
{
"name": "shjchen",
"email": "ibrand.shjchen@foxmail.com"
}
],
"require": {
"php": "^5.6|^7.0",
},
"autoload": {
"psr-4": {
"iBrand\\Prviate\\Composer\\": "src/"
}
},
"minimum-stability": "dev",
"prefer-stable": true
}
Create Satis Server
Install
$ cd /data/www/
$ composer create-project composer/satis company-private-composer --stability=dev --keep-vcs
Setup
$ cd /data/www/company-private-composer
$ vi satis.json
{
"name": "iBrand Private Composer Repository",
"homepage": "http://packagist.iBrand.com",
"repositories": [
{ "type": "vcs", "url": "git@gitee.com:iBrand/test-private-composer.git" }
// more vcs url.
],
"require": {
"ibrand/test-private-composer": "*",
// you more package.
},
"archive": {
"directory": "dist",
"format": "tar",
"prefix-url": "http://packagist.iBrand.com"
}
}
解释下 satis.json 配置文件
- name:仓库名称,可以随意定义
- homepage:仓库主页地址
- repositories:指定包源
- require:指定包源版本,* 代码编译所有版本,如果想获取所有包,使用 require-all: true,
- directory: required, the location of the dist files (inside the output-dir)
- format: optional, zip (default) or tar
- prefix-url: optional, location of the downloads, homepage (from satis.json) followed by directory by default
Authentication
在进行 Build 前,我们需要解决代码权限问题,因为前面的项目源码是私有的,所以服务器上需要有读取源码的权限,依然以码云举例:
生成ssh公钥
你可以按如下命令来生成 sshkey:
$ ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
# Generating public/private rsa key pair...
# 三次回车即可生成 ssh key
查看你的 public key,并把他添加到码云(Gitee.com) SSH key添加地址:https://gitee.com/profile/ssh...
$ cat ~/.ssh/id_rsa.pub
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....
Build
php bin/satis build satis.json public/
执行后会在 /data/www/company-private-composer/public 生成仓库列表
Setup Nginx
上一步已经生成了仓库列表,为了保证可访问需要通过 nginx or apache 把服务暴露出去,我们使用的是 nginx ,因此以 nginx 举例。
server {
listen 80;
server_name packagist.iBrand.com;
root /data/www/company-private-composer/public;
index index.php index.html;
access_log /data/logs/packages-access.log;
error_log /data/logs/packages-error.log error;
rewrite_log on;
location ~* \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
}
配置好后需要执行 service nginx reload ,然后就可以通过访问 http://packagist.iBrand.com 看到自己的仓库列表,如下图:
Usage
接下来就可以在项目中使用这个私有的 Composer 包仓库。
添加如下配置到项目中的 composer.json 文件中
"require": {
"iBrand/test-private-composer": "~1.0"
}
"config": {
"preferred-install": "dist",
"secure-http": false
},
"repositories": [
{
"type": "composer",
"url": "http://packagist.iBrand.com/"
}
]
待续
- 实现 webhooks 源码更新时自动 Build
参考资料
讨论交流
使用 Satis 搭建私有的 Composer 包仓库的更多相关文章
- 使用 satis 搭建一个私有的 Composer 包仓库
在我们的日常php开发中可能需要使用大量的composer包,大部份都可以直接使用,但在公司内部总有一小部份包是不能公开的,这时候我们就需要搭建一个公司内部使用的composer仓库,好在compos ...
- 使用 satis 搭建 composer 本地仓库
环境 windows nginx php composer 安装 拉取 satis 项目包,并拉取项目依赖 composer create-project composer/satis --stabi ...
- 在Dropbox上搭建私有的Git仓库的教程
导读 Git版本控制系统需要一个服务器端,而GitHub上要想创建私有的Git服务器端仓库则触及到收费项目,于是这里我们利用Dropbox的免费空间,来看一下在Dropbox上搭建私有的Git仓库的教 ...
- nexus3.14.0版本linux环境安装、启动、搭建私库
本文介绍的是nexus3.14.0版本在linux环境下安装.启动.搭建私库. nexus3以上的版本太新了,网上很少介绍安装细节的.据了解和2.X版本有所不同了. 1.前提 linux机器上需先安装 ...
- 动手开发自己的第一个 composer 包
原文:http://blog.jayxhj.com/2016/05/basic-composer-package-development/ composer 是 PHP 的依赖管理工具,本篇文章就来说 ...
- 在CentOS 6上搭建私有的Docker Registry
在CentOS 6上搭建私有的Docker Registry v2Registry概念 :Registry是一个无状态的, 高可扩展的服务器端应用程序, 用于存储和分发Docker Image. 依赖 ...
- 自行搭建私有云ownCloud,启用SSL,其他配置
ownCloud简介 ownCloud(官网)是一款开源的私有云框架,可以通过它实现个人网盘的功能,如果拥有一个性能不错的VPS,那么就可以摆脱奇慢无比的百度云等网盘啦!我花了大约一天的时间总算搭好了 ...
- composer包(发布到github上)同步到Packagist
在上一篇文章里面,探讨了如何一步步建立composer包–创建你的一个composer包 创建完成后,我们需要做的就是讲自建的包发布到Packagist上.至于说什么是Packagist,这个就不用我 ...
- 如何创建自己的composer包
composer中文网 :https://www.phpcomposer.com/ 一.前期准备: composer 安装 Windows安装: 1.下载安装包,https://getcomposer ...
随机推荐
- 网站后台登录asp 提示错误号:-2147467259
方法/步骤 1 asp 提示错误号:-2147467259 提示:[] 错误号:-2147467259 错误描述:操作必须使用一个可更新的查询. SQL错误 解决方法 把data文件夹的权限改下 ...
- POJ1058 The Gourmet Club
题目来源:http://poj.org/problem?id=1058 题目大意:ACM城的美食俱乐部有16位成员.他们连续了当地的法国餐厅Chatrau Java来安排连续5天的晚餐.晚餐时他们每4 ...
- kibana启动调试
在windows的命令行窗口中,将路径制定到kibana的源代码bin目录中,然后执行 kibana.bat --dev --no-base-path 需要注意的是kibana.yml中的配置文件需要 ...
- 主席树的各类模板(区间第k大数【动,静】,区间不同数的个数,区间<=k的个数)
取板粗 好东西来的 1.(HDOJ2665)http://acm.hdu.edu.cn/showproblem.php?pid=2665 (POJ2104)http://poj.org/probl ...
- 封装OkHttp,通过改造Callback接口实现
1:实现Callback回调接口import android.os.Handler;import android.os.Looper;import android.os.Message; import ...
- java课内容2019.3.1
java的相关了解博客:答疑 https://www.cnblogs.com/aishangJava/p/6862917.html 一.构造方法: 1.构造方法只能被编译器调用一次,并且是在创建对象时 ...
- vue+iview中的table表格导出excel表格
一.iveiw框架中table中有exportCsv()方法可以导出.csv后缀文件,类似于excel文件,但是并不是excel文件. 二.实现table表格导出excel文件利用Blob.js 和 ...
- 8597 石子划分问题 dpdp,只考虑第一次即可
8597 石子划分问题 时间限制:500MS 内存限制:1000K提交次数:155 通过次数:53 题型: 编程题 语言: G++;GCC;VC Description 给定n个石子,其重量分别 ...
- Unity脚本的生命周期 同一脚本/不同脚本/游戏对象激没激活/脚本激没激活,几种情况下的Awake,OnEnable,Start的执行顺序
可以自己在Unity里面试一下 游戏对象在Hierarchy面板不是激活的,它的脚本没作用,脚本中的函数不会执行; 游戏对象在Hierarchy面板是激活的,脚本没激活,Awake会执行,OnEnab ...
- .NET面试题5
常见面试题目: 1. const和readonly有什么区别? 2. 哪些类型可以定义为常量?常量const有什么风险? 3. 字段与属性有什么异同? 4. 静态成员和非静态成员的区别? 5. 自动属 ...