composer config, GitLab (parallel, прокси, backoff), COMPOSER_CACHE_DIR, FAQ. Ссылки: главная, блог, Gradle/Maven CI, стабильность pull, зеркала Git/npm.
Сценарии и узкие места: трансграничный pull, аутентификация и целостность lock
На раннере в другом регионе узкое место — RTT к Packagist и CDN: много параллельных HTTPS, один обрыв запускает лавину повторов.
- Прокси:
HTTPS_PROXYбезNO_PROXYдля GitLab Registry ломает приватный…/packages/composer/, кажется «медленным Packagist». - Auth: просроченный token или неверный хост в
COMPOSER_AUTH→ 401 после успешных публичных пакетов. - Lock: update на зеркале A и CI на Packagist B меняет content-hash; общий кеш без сброса после смены зеркала даёт битые zip.
Решение: один утверждённый источник метаданных, изолированный кеш на pipeline, лимит параллельных HTTP и матрицы.
Packagist, региональное зеркало и корпоративный simple: цепочка и исполняемые composer config
Примеры для глобального config раннера; в Docker job лучше project-local config или переменные в .gitlab-ci.yml.
| Роль в цепочке | Типовой endpoint | Команда (пример) | Заметка для CI на Mac |
|---|---|---|---|
| Канонический Packagist | https://repo.packagist.org |
composer config -g repos.packagist composer https://repo.packagist.org |
Базовая линия; следите за rate limit при многих воркерах. |
| Региональное зеркало (пример КНР) | https://mirrors.aliyun.com/composer/ |
composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/ |
Комплаенс; после смены URL — новый подкаталог кеша. |
| Satis / Nexus Composer | https://composer.corp.example |
composer config repositories.corp composer https://composer.corp.example |
Приватные репозитории выше публичного в composer.json. |
| GitLab Registry | https://gitlab.com/api/v4/group/ID/-/packages/composer/ |
composer config repositories.gitlab composer "https://gitlab.com/api/v4/group/ID/-/packages/composer/" |
Self-managed хост, group id; токен в COMPOSER_AUTH. |
export COMPOSER_NO_INTERACTION=1
export COMPOSER_ALLOW_SUPERUSER=1
composer config -g process-timeout 2000
composer config -g github-protocols https ssh
# Пример аутентификации GitLab (токен из CI Variables, маскированный):
# export COMPOSER_AUTH='{"gitlab-token":{"gitlab.com":"'"$CI_JOB_TOKEN"'"}}'
Зафиксируйте порядок repositories в репо; случайные локальные override ломают согласованность lock.
Параллель с GitLab CI: воркфлоу, HTTP-прокси и чеклист повторов с backoff
| Параметр / механизм | Назначение | Стартовое значение на общем Mac |
|---|---|---|
parallel:matrix / несколько job |
Несколько версий PHP или наборов флагов | Лимит concurrent на runner, иначе зеркало получит шторм запросов. |
resource_group |
Серия записи в общий том | Например composer-$CI_PROJECT_ID. |
HTTPS_PROXY / NO_PROXY |
Прокси и прямой GitLab | NO_PROXY для хоста registry обязателен. |
COMPOSER_MAX_PARALLEL_HTTP |
Потолок загрузок | Старт 6–12 на слабом канале. |
| Повторы | 502 / обрыв | До 3× composer install, паузы 2 / 4 / 8 с. |
variables:
COMPOSER_CACHE_DIR: "$CI_PROJECT_DIR/.composer-cache"
COMPOSER_NO_INTERACTION: "1"
cache:
key:
files:
- composer.lock
prefix: "${CI_JOB_NAME}"
paths:
- .composer-cache/
php-install:
script:
- for delay in 2 4 8; do composer install --prefer-dist --no-progress && break; sleep $delay; done
См. FAQ пула Mac при общем диске с Git/Docker.
Удалённый Mac: каталог кеша, COMPOSER_CACHE_DIR и ключи кеша GitLab
| Каталог / переменная | Пример | Рекомендация |
|---|---|---|
COMPOSER_HOME |
export COMPOSER_HOME="$HOME/.composer-ci" |
Отдельно от интерактивного home раннера. |
COMPOSER_CACHE_DIR |
$CI_PROJECT_DIR/.composer-cache |
Предпочтительно NVMe, не сетевой том без политики блокировок. |
cache:key |
composer.lock + CI_JOB_NAME |
При смене зеркала добавьте суффикс источника. |
| Очистка | composer clear-cache |
После сбоя — каталог job, не весь глобальный кеш. |
Пять шагов: от политики зеркал до зелёного pipeline
composer.lock в VCS.composer.json; токены только из CI Variables.HTTPS_PROXY, NO_PROXY, process-timeout для больших dist.COMPOSER_CACHE_DIR в workspace, GitLab cache с ключом от lock.COMPOSER_MAX_PARALLEL_HTTP и матрицы; backoff 2/4/8 с.Три опорных факта для дизайн-дока
2000 с для process-timeout — разумный потолок для крупных dist на трансокеанском канале до оптимизации зеркала.
6–12 одновременных HTTP от Composer на общем раннере часто стабильнее максимума по умолчанию при пиках нескольких проектов.
Ключ кеша от composer.lock обязателен: иначе job переиспользует файлы от другой ветки и получает скрытые расхождения версий.
FAQ: 401, rate limit и ошибки проверки хеша
401. Токен, хост в COMPOSER_AUTH, scope; для fork — доступ к registry группы.
429. Меньше COMPOSER_MAX_PARALLEL_HTTP и одновременных pipeline; Satis/прокси; Retry-After.
Хеш / content-hash. Сброс кеша job, lock на том же зеркале, избегать лишнего --prefer-source.
Итог
Итог для 2026: один маршрут к Packagist, отдельный GitLab registry для приватных пакетов, изолированный кеш, лимит параллельных HTTP и повторы с backoff — стабильнее lock и меньше хвостов задержек.
Дальше без входа: главная MacPull, тарифы, покупка удалённого Mac, центр помощи.
Нужен выделенный узел Apple Silicon под GitLab Runner и стабильный диск под кеш Composer — выберите конфигурацию на сайте и продолжите чтение смежных материалов в блоге.
Удалённый Mac для PHP и Composer CI
Узлы под GitLab Runner, SSH и предсказуемый NVMe для кеша. Главная, покупка и помощь доступны без обязательного логина.