前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何部署企业内部Composer私有Packagist仓库

如何部署企业内部Composer私有Packagist仓库

作者头像
Tinywan
发布2024-01-02 16:50:03
2310
发布2024-01-02 16:50:03
举报
文章被收录于专栏:开源技术小栈开源技术小栈

正常情况使用PHP依赖包使用的都是官方公有仓库 https://packagist.org 公开可用的开源组件,但有时候如果公司使用内部开发的PHP组件,而基于许可证和安全方面的问题不能将其开源,就需要私有部署Packagist私有仓库。

假设你现在有一些需要在公司中被多个人使用的 package,但是并不想开源。OK,然后你看上了 Satis 来解决这个问题。那么首先你需要一个 JSON 格式的 Satis 配置文件,并在上面写明你的软件源。

Satis

Satis 是一个由Composer官方提供的开源工具,用于构建自定义的Composer仓库。通过Satis,你可以将你的私有依赖包和第三方依赖包打包成一个Composer仓库,使得你的项目可以从该仓库中获取依赖包,而不是从Packagist等公共仓库获取。

主要优点

  • 私有仓库: 你可以将自己的私有依赖包发布到Satis生成的Composer仓库中,这样可以确保你的私有依赖包不会被公开发布到Packagist等公共仓库中。
  • 加速依赖包下载: 通过Satis生成的Composer仓库,你可以将项目中需要的依赖包预先下载到本地或者内部网络中,从而加速项目的构建和部署过程。
  • 自定义仓库: 你可以根据自己的需求定制Composer仓库的内容,只包含项目需要的特定依赖包,避免下载无用的依赖包。

要使用Satis,你需要在服务器上搭建一个Satis仓库,并将你的依赖包发布到该仓库中。之后,在你的项目中配置Composer,指定使用该Satis仓库作为依赖包源。这样你的项目就可以从Satis生成的Composer仓库中获取依赖包了。

总的来说,Satis是一个非常有用的工具,特别适合需要管理私有依赖包或者加速依赖包下载的场景。

安装部署

1、创建项目

代码语言:javascript
复制
$ composer create-project composer/satis --stability=dev --keep-vcs
Creating a "composer/satis" project at "./satis"

Installing composer/satis (2.x-dev 4d42fc6cc24df214a3c52af8ae7ea4a629fded56)
  - Syncing composer/satis (2.x-dev 4d42fc6) into cache
  - Installing composer/satis (2.x-dev 4d42fc6): Cloning 4d42fc6cc2 from cache
Created project in D:\dnmp\www\satis

2、配置 satis.json

代码语言:javascript
复制
{
    "name": "tinywan/repository",
    "homepage": "http://composer.tinywan.com",
    "repositories": [
        {"type": "git", "url": "git@github.com:Tinywan/hello.git"}
    ],
    "require-all": true,
    "require-dependencies": true,
    "require-dev-dependencies": true
}

3、构建 Satis UI界面

代码语言:javascript
复制
$ php bin/satis build satis.json dist

Scanning packages
Wrote packages to dist/include/all$305cec9908b59ed21d95da084eda138a2c7e8189.json
Wrote packages to dist/p2/doctrine/instantiator.json
...
Writing packages.json
Pruning include directories
Writing web view

构建成功后,会生成一个全前端静态文件目录dist。上传该目录到服务器以下目录下

代码语言:javascript
复制
/home/www/build/composer/dist

目录结构如下所示

代码语言:javascript
复制
.
├── include
│   └── all$305cec9908b59ed21d95da084eda138a2c7e8189.json
├── index.html
├── p2
│   ├── doctrine
│   ├── myclabs
│   ├── nikic
│   ├── phar-io
│   ├── phpunit
│   ├── sebastian
│   ├── theseer
│   └── tinywan
└── packages.json

4、配置NGINX

composer.tinywan.com.conf 虚拟主机配置

代码语言:javascript
复制
server {
    listen 80;
    server_name composer.tinywan.com;
    root /home/www/build/composer/dist;

    location / {
        index index.html index.htm;
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-FOR $proxy_add_x_forwarded_for;
        expires 1h;
        try_files $uri $uri/ /index.html;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
        expires 30d;
    }

    location ~ .*\.(js|css)?$ {
        expires 12h;
    }

    location =/robots.txt {
        default_type text/html;
        add_header Content-Type "text/plain; charset=UTF-8";
        return 200 "User-Agent: *\nDisallow: /";
    }
}

访问域名http://composer.tinywan.com 就可以看到私有化部署的仓库啦!

5、项目中配置使用

在webman-admin项目的依赖包配置文件composer.json中配置私有仓库源

仅修改当前工程配置,仅当前工程可使用该镜像地址:

代码语言:javascript
复制
composer config repo.packagist composer http://composer.tinywan.com

查看当前项目配置源

代码语言:javascript
复制
D:\dnmp\www\webman-admin>composer config -l
[repositories.packagist.org.type] composer
[repositories.packagist.org.url] http://composer.tinywan.com

或者添加多个镜像源

代码语言:javascript
复制
// 省略其它配置....

"repositories": [
    {
        "type": "composer",
        "url": "http://composer.tinywan.com"
    },
    {
        "type": "composer",
        "url": "https://mirrors.aliyun.com/composer/"
    }
]

// 省略其它配置....

如果提示以下错误

代码语言:javascript
复制
In Config.php line 582:                                                                                                                                                    
  Your configuration does not allow connections to http://composer.tinywan.com/packages.json. See https://getcomposer.org/doc/06-config.md#secure-http for details.  

通过一下配置可以解决

代码语言:javascript
复制
composer config secure-http false

安装依赖包

代码语言:javascript
复制
D:\dnmp\www\webman-admin>composer require tinywan/hello
Warning: Accessing composer.tinywan.com over http which is an insecure protocol.
./composer.json has been updated
Running composer update tinywan/hello
Loading composer repositories with package information

Warning: Accessing composer.tinywan.com over http which is an insecure protocol.
Updating dependencies

Lock file operations: 0 installs, 1 update, 0 removals
  - Upgrading tinywan/hello (v0.1 c6f43d0 => v0.1)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 0 installs, 1 update, 0 removals
  - Syncing tinywan/hello (v0.1) into cache
  - Removing tinywan/hello (v0.1)
  - Installing tinywan/hello (v0.1): Cloning c6f43d0bfc from cache
Generating autoload files
30 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found
Using version ^0.1.0 for tinywan/hello

代码仓库私有化

1、新建私有化代码仓库

这里使用腾讯Coding为代码私有仓库。直接通过从 GitHub 导入代码库。

选择hello仓库进行导入

重命名仓库名称为hello-coding

设置仓库为私有仓库

2、修改私有化代码仓库composer.json

代码语言:javascript
复制
{
    "name": "tinywan/coding-hello",
    "description": "【Coding】【私有化部署】开源技术小栈如何构建自己的Composer依赖包",
    "type": "library",
    "autoload": {
        "psr-4": {
            "tinywan\\hello\\": "src/"
        }
    },
    "authors": [
        {
            "name": "Tinywan",
            "email": "756684177@qq.com"
        }
    ],
    "require-dev": {
        "phpunit/phpunit": "^9.6"
    }
}

打个新标签 tag v1.0

代码语言:javascript
复制
D:\dnmp\www\hello-coding>git tag v1.0

D:\dnmp\www\hello-coding>git push origin v1.0

Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To e.coding.net:wiot/cloud/hello-coding.git
 * [new tag]         v1.0 -> v1.0

PS:同时给Githubhello仓库打个标签tagv0.2。主要是为了区分公共和私有仓库

代码语言:javascript
复制
D:\dnmp\www\hello>git tag v0.2

D:\dnmp\www\hello>git push origin v0.2
To github.com:Tinywan/hello.git
 * [new tag]         v0.2 -> v0.2

3、配置文件satis.json

修改配置文件satis.json 添加以下内容

代码语言:javascript
复制
git@e.coding.net:wiot/cloud/hello-coding.git
代码语言:javascript
复制
{
    "name": "tinywan/repository",
    "homepage": "http://composer.tinywan.com",
    "repositories": [
        {"type": "git", "url": "git@github.com:Tinywan/hello.git"},
        {"type": "git", "url": "git@e.coding.net:wiot/cloud/hello-coding.git"}
    ],
    "require-all": true,
    "require-dependencies": true,
    "require-dev-dependencies": true
}

或者通过命令行添加一个coding私有仓库的新包

代码语言:javascript
复制
php bin/satis add git@e.coding.net:wiot/cloud/hello-coding.git satis.json dist

4、重新构建 Satis

代码语言:javascript
复制
// 构建指定的仓库包
// php bin/satis build --repository-url git@e.coding.net:wiot/cloud/hello-coding.git satis.json dist

php bin/satis build satis.json dist

5、预览和查看

访问域名 http://composer.tinywan.com

6、项目中使用私有包coding-hello

代码语言:javascript
复制
D:\dnmp\www\webman-admin>composer require tinywan/coding-hello
Warning: Accessing composer.tinywan.com over http which is an insecure protocol.
./composer.json has been updated
Running composer update tinywan/coding-hello
Loading composer repositories with package information
Warning: Accessing composer.tinywan.com over http which is an insecure protocol.
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
  - Locking tinywan/coding-hello (v1.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Syncing tinywan/coding-hello (v1.0) into cache
  - Installing tinywan/coding-hello (v1.0): Cloning 72c31d5fdf from cache
> support\Plugin::install
Generating autoload files
30 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found
Using version ^1.0 for tinywan/coding-hello

自动化

  • webhook
  • Jenkins

更多可以参考这里:https://github.com/Tinywan/webhooks

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Satis
  • 主要优点
  • 安装部署
  • 1、创建项目
  • 2、配置 satis.json
  • 3、构建 Satis UI界面
  • 4、配置NGINX
  • 5、项目中配置使用
  • 代码仓库私有化
  • 1、新建私有化代码仓库
  • 2、修改私有化代码仓库composer.json
  • 3、配置文件satis.json
  • 4、重新构建 Satis
  • 5、预览和查看
  • 6、项目中使用私有包coding-hello
  • 自动化
相关产品与服务
轻量应用服务器
轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档