Работа с частными пакетами

Private Packagist #

Private Packagist - это коммерческий пакет, предлагающий профессиональную поддержку и веб-управление частными и общедоступными пакетами, а также подробные разрешения доступа. Private Packagist обеспечивает зеркальное отображение ZIP-файлов пакетов, что делает установку более быстрой и независимой от сторонних систем - например,. Вы можете развернуть, даже если GitHub отключен, потому что ваши zip-файлы зеркально отражаются.

Частный Packagist доступен как размещенное решение SaaS или как локальный пакет на месте, предоставляя простой интерактивный опыт настройки.

Некоторые из доходов Private Packagist используются для оплаты разработки и хостинга Composer и Packagist.org, поэтому его использование является хорошим способом поддержки содержания этих проектов с открытым исходным кодом в финансовом отношении. Дополнительную информацию о том, как настроить собственный архив пакетов на сайте Packagist.com, можно найти здесь.

Satis #

Satis, с другой стороны, является открытым исходным кодом, но только генератором репозитория статического composer. Это немного похоже на ультралегкую статическую версию пакета packagist на основе файлов и может использоваться для размещения метаданных частных пакетов вашей компании или ваших собственных. Вы можете получить его из GitHub или установить через CLI:

php composer.phar create-project composer/satis --stability=dev --keep-vcs

Установка #

Например, предположим, что у вас есть несколько пакетов, которые вы хотите повторно использовать в своей компании, но на самом деле не хотите открывать исходный код. Сначала вы должны определить конфигурацию Satis: файл json с произвольным именем, в котором перечислены ваши кураторские репозитории.

Вот пример конфигурации: вы видите, что он содержит несколько репозиториев VCS, но это могут быть любые типы репозиториев. Затем используется "require-all": true, который выбирает все версии всех пакетов в репозиториях, которые вы определили.

По умолчанию файл Satis ищет файл satis.json в корневом каталоге репозитория.

{
 "name": "My Repository",
 "homepage": "http://packages.example.org",
 "repositories": [
 { "type": "vcs", "url": "https://github.com/mycompany/privaterepo" },
 { "type": "vcs", "url": "http://svn.example.org/private/repo" },
 { "type": "vcs", "url": "https://github.com/mycompany/privaterepo2" }
 ],
 "require-all": true
}

Если вы хотите выбрать нужные вам пакеты, вы можете перечислить все пакеты, которые вы хотите иметь в вашем репозитории satis внутри классического composer-ключа require, используя ограничение "*", чтобы убедиться, что выбраны все версии, или другое ограничение, если Вам нужны действительно конкретные версии.

{
 "repositories": [
 { "type": "vcs", "url": "https://github.com/mycompany/privaterepo" },
 { "type": "vcs", "url": "http://svn.example.org/private/repo" },
 { "type": "vcs", "url": "https://github.com/mycompany/privaterepo2" }
 ],
 "require": {
 "company/package": "*",
 "company/package2": "*",
 "company/package3": "2.0.0"
 }
}

Как только вы это сделаете, вы просто запустите:

php bin/satis build

Когда вы сгладили этот процесс, то, что вы обычно делаете, запускает эту команду как задание cron на сервере. Затем он будет обновлять всю вашу информацию о пакете так же, как это делает Packagist.

Обратите внимание, что если ваши частные пакеты размещены на GitHub, ваш сервер должен иметь ключ ssh, который дает ему доступ к этим пакетам, а затем вы должны добавить в команду флаг --no-interaction (или -n), чтобы убедиться в этом Возвращается к аутентификации ключа ssh вместо того, чтобы запрашивать пароль. Это также хороший прием для непрерывных серверов интеграции.

Настройте виртуальный хост, который указывает на эту папку /web, предположим, что это package.example.org. В качестве альтернативы, с PHP> = 5.4.0, вы можете использовать встроенный сервер CLI php -S localhost:port -t satis-output-dir/ для временного решения.

Частичные обновления #

Вы можете сказать Satis выборочно обновлять только определенные пакеты или обрабатывать только репозиторий с заданным URL. Это сокращает время, затрачиваемое на перекомпиляцию файла package.json, и полезно, если вы используете (нестандартные) webhooks для запуска перестроек всякий раз, когда код помещается в один из ваших репозиториев.

Чтобы перестроить только определенные пакеты, передайте имена пакетов в командной строке следующим образом:

php bin/satis build satis.json web/ this/package that/other-package

Обратите внимание, что для этого все равно потребуется извлечь и проверить все ваши репозитории VCS, так как любой репозиторий VCS может содержать (в любой ветке) один из выбранных пакетов.

Если вы хотите сканировать только один репозиторий и обновить все найденные в нем пакеты, передайте URL-адрес репозитория VCS в качестве необязательного аргумента:

php bin/satis build --repository-url https://only.my/repo.git satis.json web/

Применение #

В ваших проектах все, что вам нужно добавить сейчас, это ваше собственное репозитарий композиторов, использующий URL-адрес packages.example.org в качестве URL-адреса, тогда вы можете потребовать ваши частные пакеты, и все должно работать плавно. Вам больше не нужно копировать все свои репозитории в каждом проекте. Только это единственное уникальное хранилище, которое обновит себя.

{
 "repositories": [ { "type": "composer", "url": "http://packages.example.org/" } ],
 "require": {
 "company/package": "1.2.0",
 "company/package2": "1.5.2",
 "company/package3": "dev-master"
 }
}

Безопасность #

Чтобы обеспечить безопасность своего личного репозитория, вы можете разместить его через SSH или SSL, используя сертификат клиента. В своем проекте вы можете использовать options, чтобы указать параметры подключения к серверу.

Пример использования пользовательского репозитория с использованием SSH (требуется расширение PECL для SSH2):

{
 "repositories": [{
 "type": "composer",
 "url": "ssh2.sftp://example.org",
 "options": {
 "ssh2": {
 "username": "composer",
 "pubkey_file": "/home/composer/.ssh/id_rsa.pub",
 "privkey_file": "/home/composer/.ssh/id_rsa"
 }
 }
 }]
}
Совет. Для получения дополнительной информации см. Параметры контекста ssh2.

Пример использования HTTP через SSL с использованием сертификата клиента:

{
 "repositories": [{
 "type": "composer",
 "url": "https://example.org",
 "options": {
 "ssl": {
 "local_cert": "/home/composer/.ssl/composer.pem"
 }
 }
 }]
}
Совет. Для получения дополнительной информации см. Параметры контекста ssl.

Пример использования пользовательского поля заголовка HTTP для аутентификации токенов:

{
 "repositories": [{
 "type": "composer",
 "url": "https://example.org",
 "options": {
 "http": {
 "header": [
 "API-TOKEN: YOUR-API-TOKEN"
 ]
 }
 }
 }]
}

Аутентификация #

Когда ваши личные репозитории защищены паролем, вы можете сохранить данные аутентификации навсегда. В первый раз, когда Composer должен аутентифицироваться в отношении какого-либо домена, он запросит у вас имя пользователя/пароль, и тогда вас спросят, хотите ли вы сохранить его.

Хранение может быть выполнено либо глобально в файле COMPOSER_HOME/auth.json (по умолчанию COMPOSER_HOME - ~/.composer, или %APPDATA%/Composer в Windows), либо в директории проекта, непосредственно находящейся помимо вашего composer.json.

Вы также можете настроить их вручную с помощью команды config, если вам нужно настроить производственный компьютер, чтобы иметь возможность запускать неинтерактивную установку. Например, чтобы ввести учетные данные для example.org, можно ввести:

composer config http-basic.example.org username password

Это сохранит его в auth.json текущего каталога, но если вы хотите, чтобы он был доступен глобально, вы можете использовать флаг --global (-g).

Загрузки #

Когда репозитории GitHub, GitLab или BitBucket отражаются на вашем локальном сатисе, процесс сборки будет включать в себя местоположение загрузки, которое эти платформы предоставляют. Это означает, что репозиторий и ваша настройка зависят от доступности этих служб.

В то же время это означает, что весь код, размещенный где-то в другом месте (на другой службе или, например, в Subversion), не будет загружать файлы, поэтому установка обычно занимает намного больше времени.

Чтобы включить установку satis для создания загрузок для всех (Git, Mercurial и Subversion) ваших пакетов, добавьте следующее в файл satis.json:

{
 "archive": {
 "directory": "dist",
 "format": "tar",
 "prefix-url": "https://amazing.cdn.example.org",
 "skip-dev": true
 }
}

Разъяснение опций #

  • directory: обязательный, расположение dist-файлов (внутри каталога output-dir)
  • format: необязательный, zip (по умолчанию) или tar
  • prefix-url: необязательный, местоположение загрузок, домашняя страница (от satis.json), за которым следует directory по умолчанию
  • skip-dev: необязательный, false по умолчанию, когда enabled (true) satis не будет создавать загрузки для ветвей
  • absolute-directory: необязательный, локальный каталог, где dist файлы выгружаются вместо output-dir/directory
  • whitelist: необязательный, если он задан как список имен пакетов, satis будет выгружать только файлы dist этих пакетов
  • blacklist: необязательный, если он задан как список имен пакетов, satis не будет выгружать файлы dist этих пакетов
  • checksum: необязательный, true по умолчанию, когда disabled (false) satis не будет предоставлять контрольную сумму sha1 для файлов dist

После включения все загрузки (включая файлы GitHub и BitBucket) будут заменены на локальную версию.

prefix-url #

Префикс URL-адреса другому узлу особенно полезен, если загрузка завершается в отдельном сегменте Amazon S3 или на хосте CDN. CDN значительно увеличит время загрузки и, следовательно, установку пакета.

Пример: prefix-url для https://my-bucket.s3.amazonaws.comdirectory, установленный на dist) создает URL-адреса для загрузки, которые выглядят следующим образом: https://my-bucket.s3.amazonaws.com/dist/vendor-package-version-ref.zip.

Веб-выходы #

  • output-html: необязательный, true по умолчанию, когда disabled (false) satis не будет генерировать страницу output-dir/index.html.
  • twig-template: необязательный, путь к персонализированному шаблону Twig для страницы output-dir/index.html.

Заброшенные пакеты #

Чтобы включить вашу установку satis, чтобы указать, что некоторые пакеты были оставлены, добавьте следующее в файл satis.json:

{
 "abandoned": {
 "company/package": true,
 "company/package2": "company/newpackage"
 }
}

Значение true указывает, что пакет действительно отменен, а значение "company/newpackage" указывает, что пакет заменен пакетом company/newpackage.

Обратите внимание, что все пакеты, установленные как оставленные в их собственном файле composer.json, будут также отмечены как оставленные.

Разрешение зависимостей #

Можно сделать так, чтобы satis автоматически разрешал и добавлял все зависимости для ваших проектов. Это можно использовать с функцией загрузки, чтобы иметь полное локальное зеркало пакетов. Просто добавьте следующее в ваш satis.json:

{
 "require-dependencies": true,
 "require-dev-dependencies": true
}

При поиске пакетов satis попытается решить все необходимые пакеты из перечисленных репозиториев. Поэтому, если вам требуется пакет от Packagist, вам нужно определить его в вашем satis.json.

Зависимости Dev упаковываются, только если параметр require-dev-dependencies имеет значение true.

Другие варианты #

  • providers: необязательный, false по умолчанию, когда включено (true), каждый пакет будет сбрасываться в отдельный файл include, который будет загружен только компоновщиком, когда пакет действительно потребуется. Ускоряет обработку композиций для репозиториев с огромным количеством пакетов, таких как f.i. Упаковщик.
  • output-dir: необязательный, определяет, где вывести файлы репозитория, если не указано в качестве аргумента при вызове команды build.
  • config: необязательный, позволяет вам определять все параметры конфигурации из композитора, за исключением archive-format и archive-dir, поскольку конфигурация выполняется через архив. Дополнительные сведения см. В документации по схеме.
  • notify-batch: необязательный, укажите URL-адрес, который будет вызываться каждый раз, когда пользователь устанавливает пакет. См. Пакет уведомлений.