资讯专栏INFORMATION COLUMN

使用 Satis 搭建私有的 Composer 包仓库

lovXin / 1295人阅读

摘要:说明服务器环境代码管理平台码云文章中尽量以一个真实的情况来撰写,但是文章的仓库地址,网页地址均是不可访问的,用虚拟信息替换了真实信息。比如码云,是收费的,对于一个公司来说费用不高,但是加上以上两点原因后,所以未选择。

简述

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 因为是国外服务器,国内偶尔会抽风。

国内也有比较优秀的 git 代码托管平台,免费支持 Private Project。比如:码云,Coding

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": {
       "iBrandPrviateComposer": "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

参考资料

Handling private packages

Hosting your own package

使用私有资源库

讨论交流

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28253.html

相关文章

  • 使用 Satis 搭建私有仓库

    摘要:此时我们就需要一个工具,能够搭建私有源,里面都是私有仓库,对内不对外。就是官方提供的建立私有源的工具。在其它项目中使用私有源只需要在项目的文件的根上添加仓库地址之后再通过或者想要的仓库就可以了。 现在我们常用 Composer 进行依赖管理。和其它语言的包管理工具一样,Composer 使用 GitHub 托管代码,可以根据配置文件管理依赖,也可以建立各种脚本,执行特定任务。总之好处很...

    gityuan 评论0 收藏0
  • composer私有仓库搭建

    摘要:安装包添加配置文件添加类似如下内容配置文件详解仓库名字主页地址包所在地址指定获取哪些包及对应的版本,获取所有包使用,与包中中的名称相同,不同会出现问题必需要的,表示生成的压缩包存放的目录,会在时的目录中压缩包格式默认和 安装satis包 cd /home/wwwroot/ composer create-project composer/satis --stability=dev -...

    h9911 评论0 收藏0
  • 使用 satis 搭建 composer 本地仓库

    摘要:如果需要定时更新,则需要配置定时任务去定时更新设置本地仓库设置虚拟主机使用本地仓库中的包文件中添加以下拉取,即可获取本地库了如果本地仓库不存在且有网络会去网络中获取。 环境 windows nginx php composer 安装 拉取 satis 项目包,并拉取项目依赖 composer create-project composer/satis --stability=de...

    张率功 评论0 收藏0
  • 使用satis自建私有镜像

    摘要:假设同一个包有多个开发人员则将其他人员设置为组成员,在同一台跳板机上部署项目,并且设置项目的为。这样在开发环境中通过登陆来判断权限。在跳板机上则通过添加该机器的公钥到来判断权限这样就算其他人有仓库地址也不能拉到代码,目的基本达成。 建立目的 为了不让代码公开,能够让项目基于gitlab快速自动化部署,简化单个composer.json文件配置内容 安装 使用composer compo...

    lscho 评论0 收藏0
  • 这两年多我写PHP业务代码方式是如何进化

    摘要:曾今谁都有过迷茫期,下面是我开始开发中,不断改变的代码组织方式。 曾今 谁都有过迷茫期,下面是我开始PHP开发中,不断改变的代码组织方式。 初期:所有代码一股脑控制器controller 曾今只是简单的理解MVC 中期:业务代码抽象一部分到模型层model 开始觉得model层是否该做点什么了 后期:业务代码控制器,模型层只写db的curd方法 复杂的业务代码使contro...

    qqlcbb 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<