Рубрики
Uncategorized

Композитор Китай Полное Зеркало С Открытым Исходным Кодом, Вместе Сделаем Сообщество PHP Более Процветающим

Автор оригинала: David Wong.

Первая ссылка: https://github.com/zencodex/c…

Образ композитора родился в марте 2017 года и существует уже более двух лет. Это не очень техническая вещь. Поэтому я хотел бы поговорить о некоторых идеях развития и решения проблем, надеясь вдохновить вас. Если вы считаете, что есть какие-то преимущества, пожалуйста, щелкните мышью и дайте мне звездочку на github. Спасибо.

  1. Безопасность, не изменяйте исходный json, zip, иначе это приведет к изменениям хэша, пересчет хэша не является проблемой (ранее это делали третьи лица). Проблема в том, что невозможно проверить безопасность пакетов. Если существует вредоносное черное зеркало, о данных нельзя судить, изменив их. Итак, образ композитора, все пакеты являются официальными у упаковщика. org, можно сравнить с хэшем без каких-либо изменений.
  2. Стабильность, потому что непрерывный сбор данных, загрузка данных, в середине ошибки есть ссылка, может привести к проблемам, поэтому необходимо завершить сбор пакетов, используя хэш-значение, чтобы выполнить проверку целостности. Иногда сторонние политики API или строки CDN могут вызывать проблемы. Таким образом, самая большая трудность в создании зеркального отражения-это гарантия стабильности.
  3. Вилка Webysther/packagist-mirror (официально рекомендуемое зеркало с открытым исходным кодом) происходит от hirak/packagist-crawler, но эти зеркальные открытые исходники не обрабатывают пакеты dist, которые являются крупнейшими/крупнейшими и наиболее достойными обработки CDN. Composer с открытым исходным кодом-это полномасштабное зеркало, включающее обработку части dist. У пакетов Dist также есть проблема с количеством подкаталогов с верхней границей 65 000. За один год количество посылок удвоилось. Схема мягкого подключения изначально была создана мной. Возможно, с неограниченным увеличением пакетов необходимо разработать другие схемы.

Установка и развертывание образа композитора

Рекомендуем запустить конфигурацию хоста:

  • [x] Объем памяти должен быть не менее 4G
  • [x] Оставшееся место на диске не менее 30 г
$ apt install beanstalkd
$ cd composer-mirror
$ composer install

Изменение параметров конфигурации

Обычно в соответствии с фактической средой их собственного развертывания изменяют параметры. Подробные инструкции по настройке можно найти в разделе конфигурация. по умолчанию. php .

cp config.default.php config.php Для изменения следующих параметров в конфигурации. PHP

/**
     * distdir for storing zip packages
     */
    'distdir' => __DIR__ . '/dist/',

    /**
     * Point to the actual web directory corresponding to mirrorUrl
     */
    'cachedir' => __DIR__ . '/cache/',

    /**
     * PaagistUrl: Official Collection Source
     */
    'packagistUrl' => 'https://packagist.org',

    /**
     * Mirror Pack Publishing Site, Pages.json Entry Root Domain Name
     */
    'mirrorUrl' => 'https://packagist.laravel-china.org',

    /**
     * CDN domain name for dist to distribute zip packages in.Json
     */
    'distUrl' => 'https://dl.laravel-china.org/',

Конфигурация супервизора

sudo vim/etc/супервизор/супервизор.conf Добавьте следующую информацию о конфигурации:

[program:crawler]
command=php ./bin/console app:crawler
Directory=/home/zencodex/composer-mirror/; Deploy the location of the code and replace it by yourself
autostart=true
autorestart=true
Redirect_stderr = true; redirect stderr to stdout, default false
Stdout_logfile_maxbytes = 10MB; stdout log file size, default 50MB
Stdout_logfile_backups = 5; backup number of stdout log files
stdout_logfile = /tmp/composer_crawler_stdout.log

[program:composer_daemon]
command=php ./bin/console app:daemon
Directory=/home/zencodex/composer-mirror/; Deploy the location of the code and replace it by yourself
autostart=true
autorestart=true
Redirect_stderr = true; redirect stderr to stdout, default false
Stdout_logfile_maxbytes = 10MB; stdout log file size, default 50MB
Stdout_logfile_backups = 5; backup number of stdout log files
stdout_logfile = /tmp/composer_daemon_stdout.log

Задача Хронометража Кронтаба

# sudo crontab -e
# Replace / home / zencodex / composer-mirror according to the location of your environment code 
# getcomposer is to get the latest composer and upload it to CDN cloud storage

0 */2 * * * /usr/bin/php /home/zencodex/composer-mirror/bin/console app:clear --expired=json
0 1 * * * /usr/bin/php /home/zencodex/composer-mirror/getcomposer.php

Общие команды

# Implementing Grab Tasks
$ php ./bin/console app:crawler

# Background multi-process model synchronization and cloud shooting
$ php ./bin/console app:daemon

# Clean up expired garbage files
$ php ./bin/console app:clear --expired=json

# Scanning and verifying hash 256 of all JSON and zip files
$ php ./bin/console app:scan

Для Разработчиков

  • Хранилище базы данных не используется. Он полностью хранится в структуре каталогов.
  • В файле dist/zip каждого пакета хранится адрес загрузки, соответствующий URL-адресу GitHub. Из-за ограниченного дискового пространства он не хранится локально и перемещается непосредственно в облако.
  • Очистите файлы с истекшим сроком действия, определите, есть ли обновления, зависит ли срок действия от метки времени файла, поэтому не прикасайтесь к файлу вручную или не вносите изменения в операцию с меткой времени.

Если вы используете другие платформы, которые не находятся в облаке, вам необходимо обратить внимание на следующий код, который необходимо реализовать самостоятельно.

  • Плагин ClientHandler требует, чтобы соответствующий адаптер файловой системы имел соответствующий интерфейс. В этом случае реализован только zencodex/flysystem-upyun. Другие сторонние пакеты могут быть реализованы сами по себе со ссылкой на образец.
  • Облако:: обновление удаленного файла, которое обновляет кэшированные файлы CDN. Это ограничение на ежедневную частоту звонков, поэтому оно используется только при обновлении пакета. джсон.
  • Облако:: обновите удаленный файл, если вы используете платформу, не использующую облачную съемку, вам необходимо заменить ее обновляющим кодом для вашей платформы. Или по ссылке Кодировка\Поддержка\Flysystem\Адаптер\UpyunAdapter Инкапсулируйте getClientHandler.
  • Cloud:: PreetchDistFile похож на удаленный файл обновления в том, что он вызывает специальный интерфейс облачной платформы и не может быть равномерно инкапсулирован в Flysystem, поэтому он также обрабатывается getClientHandler

Обратите внимание на ямы в максимальном количестве подкаталогов

Смотрите Подробную информацию о Коде src/Commands/PatchCommand.php

/*
|--------------------------------------------------------------------------
| The maximum number of subdirectories supported by Linux ext4 is up to 64000 to 65000, and the number of packages has exceeded the ceiling.
|--------------------------------------------------------------------------
|
| There are three solutions, the first two are basically unrealistic. So by trying, I found 3 (countless soft connection schemes)
|
| 1. Replace filesystems without subfolder restrictions, such as XFS 
| 2. Or change the code and recompile the ext4 kernel
| 3. Cut large folders and scatter files with different letters. Soft Connections are used in the main folder. Soft Connections are not counted.
|
*/

Composer Mirror был впервые задуман @Summer и был решительно поддержан @overture и партнерами сообщества LC. Открытый исходный код также является предложением Увертюры. Спасибо вам за вашу поддержку и поддержку. Первый конгресс Laravel Conf China в Китае состоится 3-4 августа 2019 года. Это грандиозное собрание экспертов и экспертов с горы Хуашань. Зарегистрируйтесь через официальный сайт как можно скорее: http://laravelconf.cn.

Статья была впервые опубликована на https://learnku.com/articles/…