介绍
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运行更新。如果一切都没有错误,那么您将看到同步的结果
要使用此代理,您需要将此行添加到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
。因此,攻击者可以替换您的依赖项,因为如果在此自定义软件包存储库中找到了软件包名称,则根本只加载了这些版本。
要选择您在项目中使用的特定软件包并删除不需要的软件包,则可以打开严格的模式。转到代理设置,然后选择“严格模式”
然后,使用大型镜像动作,您可以启用并批准包装。将作曲家信息输出如下所示。
根据用户代理,元数据一次以两种格式用于作曲家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
}
]
}