четверг, 16 июня 2016 г.

Кеширующий прокси для композера

Есть у композера одна беда - он постоянно лазает на гитхаб за исходниками или тарболами. За тарболами он, кстати, лазает по апи. И тут вырисовывается сразу несколько проблем:

  • А что если гитхаб забанит ip за большое кол-во запросов? (актуально, например, для офиса)
  • А что если органы опять забанят гитхаб за непотребство какое-нибудь?
  • А что если автор какой-нибудь либы решит её удалить, а у вас на неё полсайта завязано?
Искал разные решения. На тот момент на том же гитхабе было несколько дохлых и полудохлых проектов, которые к тому же делают не совсем то (или совсем не то), что хочется. А хочется странного чтобы в кеш этого "прокси" попадали кроме явно указанных библиотек ещё и их зависимости и зависимости их зависимостей и зависимости этих зависимостей и так далее.

Первоначально внедрил и какое-то время использовали satis. Но он очень неудобен тем, что как раз не умеет зависимости зависимостей. И вообще надо вручную добавлять все либы, а потом ещё и компилить метаданные. Обновление аналогично. Худо бедно автоматизировалось запихиванием в бамбу и отслеживанием изменений во внешних репозиториях библиотек. Но когда библиотек стало много процесс обновления стал непростительно долгим.

В результате решил переходить на toranproxy. Первые эксперименты показали, что это именно то, что нужно. Сначала установил старым добрым дедовским способом прямо на один из серваков. Подключил к своим проектам. Ок, работает как надо.

Дальше больше. Почему бы не запихнуть toranproxy в docker ? Естественно я не первый, кто это решил сделать - cedvan. Попользовал немного этот образ, но несколько вещей не устроили: не работало зеркалирование репозиториев (на случай, если подключается либа в dev-режиме), слишком толстый образ из-за неоптимального написания Dockerfile. Решил сделать свой образ на основе этого, но с преферансом и поэтессами. А заодно и перевести на php 7, так как он даёт хороший прирост производительности. Чтобы раздавать зеркала репозиториев внедрил git daemon.

В итоге вот образ на докер хабе. Его фишки:
  1. последняя на текущий момент версия toranproxy - 1.4.4
  2. php 7
  3. встроенный git daemon для раздачи зеркал репозиториев
  4. оптимизирован размер образа (уменьшено количество слоёв)
Исходники образа на гитхабе: bankiru/docker-toran-proxy
Лицензия MIT