与Packeton的镜像作曲家依赖关系
#编程 #教程 #php #composer

介绍

Packeton是基于MIT许可证的开源私人作曲家存储库,基于Packagist.org和Satis。早在2018年,就没有私人Packagist packagist.com具有必要功能的免费替代方案,但是SATIS功能非常有限。我喜欢packagist.org的UI认为将其用于我自己的私人包装师会很酷,因此我对其进行了分配以使每个人都可以重复使用。源代码可在GitHub

上找到

镜子依赖性

镜像依赖项对于多种情况很有用:

  • 加速下载依赖项
  • 与您的团队和客户共享对私人作曲家存储库(例如Magento)的访问。
  • 防止依赖混乱attacks

packeton将创建远程存储库的本地副本,使您可以从本地副本而不是远程作曲家存储库中下载依赖项和元数据。

安装

要开始使用Packeton,您首先需要安装该应用程序。您可以通过创建具有以下配置的docker-compose.yml文件来使用Docker来执行此操作:

version: '3.6'

services:
    packeton:
        image: packeton/packeton:latest
        container_name: packeton
        hostname: packeton
        environment:
            ADMIN_USER: admin
            ADMIN_PASSWORD: 123456 # Default password
            ADMIN_EMAIL: admin@example.com
            TRUSTED_PROXIES: 172.16.0.0/12
            # Default SQLite
            # DATABASE_URL: "mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8&charset=utf8mb4"
        ports:
            - '127.0.0.1:8081:80'
        volumes:
            - .docker:/data

运行以下命令启动容器:docker-compose up -d然后将在http://127.0.0.1:8081中访问应用程序。

接下来,您可能需要安装NGINX反向代理,以使应用程序在自定义域名处可用。这是一个示例配置:

server {
    listen *:443 http2;

    server_name packages.example.org;

    ssl_certificate /etc/nginx/ssl/example.org.crt;
    ssl_certificate_key /etc/nginx/ssl/example.org.key;
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4';

    ssl_protocols TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_session_timeout  5m;

    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 16k;
    gzip_http_version 1.1;
    gzip_min_length 2048;
    gzip_types text/css application/javascript text/javascript application/json;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8081/;
    }
}

现在您可以在packages.example.org

上登录

配置作曲家代理

要配置作曲家代理,您需要在配置级别上添加它。例如,对于Docker安装,这是卷中的文件config.yaml。对于源代码安装,将配置文件带有任何名称the Directory {project dir}/config/packages

packeton:
    mirrors:
        orocrm:
            url: https://satis.oroinc.com/

            # SSH keys for create ZIP archive from Git source.
            git_ssh_keys:
                git@github.com:oroinc: '/var/www/.ssh/private_key'
#            logo: 'https://example.com/logo.png'
#            http_basic:
#                username: user
#                password: pass

            # Allow public access, default false
#            public_access: true
            # default false
#            sync_lazy: true
#            enable_dist_mirror: false

            # Additional restriction, but you can restrict it in UI
#            available_package_patterns:
#                - 'vend1/*'
#            available_packages:
#                - 'pack1/name1' # but you can restrict it in UI
            # JSON. auth.json to pass composer opts.
#            composer_auth: '{"auth.json..."}'

            # default auto.
            sync_interval: ~
            # Console info message
            info_cmd_message: ~

现在,您需要重新启动Docker容器才能应用配置。

现在的代理信息将由url https://packages.example.com/proxies/orocrm
显示 元数据的同步是由Cron启动的,为了在创建代理后更新数据,您需要通过控制台或UI运行更新。如果一切都没有错误,那么您将看到同步的结果

Job Result

要使用此代理,您需要将此行添加到composer.json。

  "repositories": [
    {
      "type": "composer",
      "url": "https://packages.example.org/mirror/orocrm"
    }
  ]

默认情况下,此资源仅可用aurization提供,因此您需要为Composer composer config --global --auth http-basic.packages.example.org {username} {apitoken}启用Auth 6,您可以在Profile页面上看到apitoken

依赖项批准。

默认情况下,当您第一次运行composer update时,默认情况下将自动启用。在上面的示例中,我使用了具有第三方依赖性的存储库https://satis.oroinc.com。使用此仓库的application的示例。

根文件packages.json不包含available_package_patterns的限制。根据SATIS设置的不同,如果启用了require-all,则第三方供应商可以以任何供应商名称发布包裹。例如symfony/process。因此,攻击者可以替换您的依赖项,因为如果在此自定义软件包存储库中找到了软件包名称,则根本只加载了这些版本。

要选择您在项目中使用的特定软件包并删除不需要的软件包,则可以打开严格的模式。转到代理设置,然后选择“严格模式”

Image description

然后,使用大型镜像动作,您可以启用并批准包装。将作曲家信息输出如下所示。

Image description

根据用户代理,元数据一次以两种格式用于作曲家2和1。但是,原始存储库仅为作曲家提供元数据。

{
    "providers-lazy-url": "/mirror/orocrm/pkg/%package%.json",
    "mirrors": [
        {
            "dist-url": "/mirror/orocrm/zipball/%package%/%version%/%reference%.%type%",
            "preferred": true
        }
    ],
    "metadata-url": "/mirror/orocrm/p2/%package%.json",
    "available-packages": [
        "oro/platform-enterprise",
        "oro/crm-enterprise",
        "oro/api-doc-bundle",
        "oro/crm-pro-ldap-bundle"
    ]
}

如果用户代理标题与作曲家1匹配,则所有软件包将合并到一个快照includes中,以支出Composer 1下载。

当用户代理标题与Composer1匹配时,Packeton将将所有软件包合并到一个快照includes中,以加快Composer 1下载。因为作曲家1无法执行并行下载,因此通过将所有软件包合并到一个快照中,Packeton可以减少请求的作曲家1。

{
    "includes": {
        "include-packeton/all$6150da03358e44ebc3b99713c643e98dc06a221e.json": {
            "sha1": "6150da03358e44ebc3b99713c643e98dc06a221e"
        }
    },
    "mirrors": [
        {
            "dist-url": "/mirror/orocrm/zipball/%package%/%version%/%reference%.%type%",
            "preferred": true
        }
    ]
}

链接