Vendors в git

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Приложение - это opcode в памяти и php-бинарник с расширениями. Образ приложения меняется только с выходом версий php. Я не понимаю почему в контексте production deployment вы называете исходники приложением. Preload в 7.4 явно показывает, что файлы с кодом на PHP - это НЕ приложение, простая смена исходника на приложение в проде не влияет. А смена .so, для сравнения, повлияет сразу.
В PHP у нас скомпилированное приложение существует только в памяти процесса, компиляция выплняется на проде, один раз при старте, и собрать образ с приложением невозможно.
А если мы не можем собрать образ, если с приложением может быть только контейнер - зачем строить из себя джавистов?
Я не понимаю зачем вы в образ пишите исходники - приложением они не станут. Php-код не слинкован с системными либами, он соберется с любыми либами подходящего диапазона версий.
Fixxxr деплоит отдельным контейнером с volume - это понятно, средство доставки, но тащить исходники в образ php зачем? -)))
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
И дубль четыре, я никого не убеждаю, я прошу сравнительного опыта с vendors: не держу vendors в репозитории потому что это мешает _____ и создает проблемы с ____.

Вопрос включения исходников в образ php для меня очевиден, кушайте суп вилками без меня.
 

WMix

герр M:)ller
Партнер клуба
У нас есть такая штука, типа satis, ну то что хранит все запускаемые версии, под капотом гит. Смысл, иметь клон используемой библиотеки, не более, быстрый локальный деплой как сахар
 

dadoc

Новичок
в dev окружении на хост машине нету php, монтируем код в контейнер с php и так идет разработка. для composer install используем другой контейнер куда монтируем код по аналогии с https://docs.docker.com/samples/library/composer/, сам контейнер с composer собираем с FROM "контейнер c php"
для деплоя в прод начинали с того что код собирали в data only контейнер (за основу брали busybox) и в проде он монтировался как volume к php-fpm, сейчас для простоты базовый контейнер это apache+php7 (FROM), во время билда выполняется composer install и потом уже собирается контейнер и добавляем в него код. такой контейнер деплоим и он сидит за nginx -такой подход позволяет в registry иметь историю версий и легко можно откатится в случае чего
 

fixxxer

К.О.
Партнер клуба
Основная проблема (помимо идеологической, которую опустим) с сборкой php-кода в одном контейнере с тем же php-fpm в том, что php-fpm это не единственная точка входа. Есть всякие очереди, cron-задачи, вот это все. И получится, что надо собирать не один, а как минимум два контейнера. Либо делать entrypoint-ом не php-fpm, а какую-нибудь init-систему (что совсем уже ад).

Если рассматривать php-код как данные - это банально проще мейнтенить.
 

AmdY

Пью пиво
Команда форума
Основная проблема (помимо идеологической, которую опустим) с сборкой php-кода в одном контейнере с тем же php-fpm в том, что php-fpm это не единственная точка входа. Есть всякие очереди, cron-задачи, вот это все. И получится, что надо собирать не один, а как минимум два контейнера. Либо делать entrypoint-ом не php-fpm, а какую-нибудь init-систему (что совсем уже ад).

Если рассматривать php-код как данные - это банально проще мейнтенить.
можно юзать мультистейдж https://docs.docker.com/develop/develop-images/multistage-build/ как раз удобно делать инит систему, которую затем дообвешиваешь нужным софтом.
 

AnrDaemon

Продвинутый новичок
Основная проблема (помимо идеологической, которую опустим) с сборкой php-кода в одном контейнере с тем же php-fpm в том, что php-fpm это не единственная точка входа. Есть всякие очереди, cron-задачи, вот это все. И получится, что надо собирать не один, а как минимум два контейнера. Либо делать entrypoint-ом не php-fpm, а какую-нибудь init-систему (что совсем уже ад).
Что в очередной раз напоминает нам, что, начиная с некоторого уровня сложности, докер - не самое удачное решение для PHP приложения.
 

fixxxer

К.О.
Партнер клуба
С PHP как раз получается проще, чем с какой-нибудь Джавой со Спрингом. :)
 

WMix

герр M:)ller
Партнер клуба
Я вот вас не понимаю, запросы к пхп ассинхронны, все что у них общее это состояние, один процесс или несколько не имеет значения, до тех пор пока мы не говорим о изменении этого состояния. Но сессии какбы нет или шарится, а база атомарна. В чем проблема разнести на несколько контейнеров? Зачем сборку приложения туда пихать? (я не о dev, там хоть vm).
 

fixxxer

К.О.
Партнер клуба
Да можно что угодно, мне только непонятно, зачем создавать себе проблемы и потом героически решать их на пустом месте.
Достаточно всего _двух_ имеджей для php с нужными экстеншенами - fpm и cli.
С fpm-ным все понятно, cli-шному достаточно задавать разные entrypoints.
А откуда там берется data volume с кодом - вообще без разницы.
Нафига туда пихать php код - я не знаю. Может и базу данных тоже туда засунуть? Не ну а чо.
 

WMix

герр M:)ller
Партнер клуба
Все просто, создали мы релиз в контейнере с аппликацией, запустили локально, ок, дали тестерам, ок, передали на прод.. как и что там внутри всем пох, его с тем же успехом выставят онлайн, не задумываясь ни о чем. Вы же создаете проблему. Теперь необходимо знать, куда маунтить volume, и в каком контейнере запускать
 

fixxxer

К.О.
Партнер клуба
Что значит "дали"? Дискетку принесли?

Локально запустили docker-compose, на стейдж и на прод деплоится с circleci по хукам, один раз настроил - и вот вообще ничего делать не надо.
 

WMix

герр M:)ller
Партнер клуба
ну вы как хотите, а я за то чтоб у меня на любой пук было по контейнеру, чтоб любое изменение можно было запустить параллельно с 5ю другими изменениями других разработчиков,
 

WMix

герр M:)ller
Партнер клуба
На самом деле это ни на капельку не больше работы, у вас уже все написано, только несколько иначе разнести необходимо. А дальше тотже docker-compose up
 

fixxxer

К.О.
Партнер клуба
Да вроде все точно так же, на все по контейнеру. Ну, да, для очередей и scheduled задач один и тот же образ, отличающийся только entrypoint-ом в compose, код монтируется через data volume - ну так он и меняется на порядки чаще, чем конфигурация php (а при разработке вообще каждую секунду). Не вижу причин разносить как-то иначе, тем более что код - монолит с многолетней историей и кучей legacy.
 

AnrDaemon

Продвинутый новичок
Вот кстати что меня ещё в Докере беспокоит. Крон и подобные процессы непонятно как запускать правильно.
 
Сверху