Страница 1 из 1

CI/CD Docker. Как шарить web/assets между nginx/php-fpm?

Добавлено: 2019.04.22, 22:26
Corpsepk
Здравствуйте!

Как было раньше.
Условно говоря, на хостовой машине поднималось два контейнера:
  • php-fpm
  • nginx
В них пробрасывался “volume” /app:/app
При деплое Capistrano или тот же Deployer делал симлинк на новую ревизию на директорию /app, котнейнеры обновлялись, всё работало как часики.

Сейчас «лучшие практики» говорят о том, что нужно собирать полноценные контейнеры, класть в них ВСЁ что может понадобиться и деплоить целиком контейнеры.

В такой схеме всё хорошо, вроде всё понятно, но столкнулся со следующим вопросом, а что делать ассетами (которые создаются в web/assets)? Ведь статику отдает nginx, как собрать контейнер со всеми ассетами?

Мне видится три варианта:
1. Сгенерировать их на этапе сборки, но если за свой код я могу как то отвечать и собрать ассеты на этапе сборки, то помнить обо всех сторонних модулях – проблема
2. Класть ассеты на S3. Вариант годный, но в малобюджетном проекте это дорого
3. Создать volume «assets» и шарить его между php-fpm и nginx

Подскажите пожалуйста, я что то упускаю и возможно есть какой то простой вариант?
Спасибо.

Re: CI/CD Docker. Как шарить web/assets между nginx/php-fpm?

Добавлено: 2019.04.22, 23:51
samdark
Если ассеты одинаковы, почему важно чтобы они были общими?

Re: CI/CD Docker. Как шарить web/assets между nginx/php-fpm?

Добавлено: 2019.04.23, 12:58
Corpsepk
Если ассеты одинаковы, почему важно чтобы они были общими?
Им не обязательно быть общими, дело в том, что я не вижу способа сгенерировать все ассеты на этапе сборки докер контейнера.
Получается что ассеты генерируются динамически, в таком случае их как то нужно прокидывать в nginx...

Re: CI/CD Docker. Как шарить web/assets между nginx/php-fpm?

Добавлено: 2019.04.23, 13:15
ElisDN
Либо заморочиться со сборкой ассетов, всё же перечислив все бандлы сторонних модулей. И собранную в php-cli папку web/assets через multistage building забрать в образ nginx.

Либо можно объявить вольюм assets и подключить его в оба контейнера:

Код: Выделить всё

services:
    nginx:
        ...
        volumes:
            - assets:/app/public/assets:ro
    php-fpm:
        ...
        volumes:
            - assets:/app/public/assets
volumes:
    assets:
При этом не включать linkAssets в конфиге у assetManager.

Re: CI/CD Docker. Как шарить web/assets между nginx/php-fpm?

Добавлено: 2019.04.23, 13:21
Corpsepk
Либо заморочиться со сборкой ассетов, всё же перечислив все бандлы сторонних модулей. И собранную в php-cli папку web/assets через multistage building забрать в образ nginx.
В каком-то из докладов говорили, что этот функционал будет выпилен из yii3. Наверное не стоит на него полагаться.
Либо оставить всё как есть и просто кешировать динамически в Nginx как здесь вроде
А это интересный вариант, почитаю, спасибо!

Re: CI/CD Docker. Как шарить web/assets между nginx/php-fpm?

Добавлено: 2019.04.23, 15:17
samdark
В каком-то из докладов говорили, что этот функционал будет выпилен из yii3. Наверное не стоит на него полагаться.
Почему? Полагайтесь, раз он есть.

Re: CI/CD Docker. Как шарить web/assets между nginx/php-fpm?

Добавлено: 2019.04.23, 16:15
Corpsepk
Да, судя по всему сборщик ассетов для меня будет лучшим вариантом.
Почему? Полагайтесь, раз он есть.
П.с.
Логика была такая - если сборщик ассетов выпилят, значит при переезде на yii3 _еще_ что то придется заменять, если можно этого избежать, то лучше избегать :)

Re: CI/CD Docker. Как шарить web/assets между nginx/php-fpm?

Добавлено: 2019.05.31, 20:21
masson
Corpsepk писал(а): 2019.04.22, 22:26 Сейчас «лучшие практики» говорят о том, что нужно собирать полноценные контейнеры, класть в них ВСЁ что может понадобиться и деплоить целиком контейнеры.
Киньте пожалуйста ссылок на лучшие практики. Я только недавно начал осваивать докер, и не совсем понял фразу "нужно собирать полноценные контейнеры, класть в них ВСЁ что может понадобиться". Что это значит? До сих пор везде встречал только "Одна задача - один контейнер, а изменяемые данные монтируются". Киньте пожалуйста ссылок на лучшие практики, и если не затруднит, еще примеры ваших файлов Dockerfile & docker-compose