Первая ссылка: https://github.com/zencodex/c…
Образ композитора родился в марте 2017 года и существует уже более двух лет. Это не очень техническая вещь. Поэтому я хотел бы поговорить о некоторых идеях развития и решения проблем, надеясь вдохновить вас. Если вы считаете, что есть какие-то преимущества, пожалуйста, щелкните мышью и дайте мне звездочку на github. Спасибо.
- Безопасность, не изменяйте исходный json, zip, иначе это приведет к изменениям хэша, пересчет хэша не является проблемой (ранее это делали третьи лица). Проблема в том, что невозможно проверить безопасность пакетов. Если существует вредоносное черное зеркало, о данных нельзя судить, изменив их. Итак, образ композитора, все пакеты являются официальными у упаковщика. org, можно сравнить с хэшем без каких-либо изменений.
- Стабильность, потому что непрерывный сбор данных, загрузка данных, в середине ошибки есть ссылка, может привести к проблемам, поэтому необходимо завершить сбор пакетов, используя хэш-значение, чтобы выполнить проверку целостности. Иногда сторонние политики API или строки CDN могут вызывать проблемы. Таким образом, самая большая трудность в создании зеркального отражения-это гарантия стабильности.
- Вилка 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/…