Как деплоить Laravel + Vue приложение в Docker?

Нет пока системного понимания правильного devops'инга, всё на коленке и не вовремя. Книгу "Docker in Practice" (2nd edition) только что скачал и полистал. Посему быстрый вопрос тем, у кого лыжи на ходу.

Веб-приложение на Laravel и с фронтом на VueJS, который надо билдить webpack'ом. Завернул всё в контейнеры:
  • Redis
  • MySQL
  • php-fpm
  • nginx
и вспомогательные
  1. git для git pull origin master
  2. Composer для composer update
  3. NodeJS для npm run build
  4. phpMyAdmin
  5. Certbot для обновления сертификатов Let's Encrypt

Файлы в docker volume'ах. Приложение управляется через docker-compose.

Всё работает, но после внесения дополнений в репо, приходится ребилдить webpack, возможно, обновлять composer'ом пакеты прямо на живом.

Есть смутные подозрения, что это не так должно делаться, не повторять лишний раз на prod сервере «билд» composer'а b webpack'а — а, возможно, надо выкатывать уже готовые Docker-образы, где все сбилдено заранее и проверено тестами. И на продакшене просто производить подмену контейнеров, или переключать стрелку nginx'а или фронтального (дополнительного, сейчас его нет) load-balancer.

Если вам понятна ситуация и очевиден ответ, объясните, пожалуйста, как правильно поступить, не сильно усложняя процесс относительно нынешнего.
  • Вопрос задан
  • 427 просмотров
Решения вопроса 2
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Всё работает, но после внесения дополнений в репо, приходится ребилдить webpack, возможно, обновлять composer'ом пакеты прямо на живом

Есть смутные подозрения, что это не так должно делаться, а, возможно, надо выкатывать уже готовые Docker-образы, где все сбилдено

А вы что - данные в докер-контейнерах храните?
Обычный кейс к примеру для сборки фронта - изменили что-то в репо - сработал хук, который запускает автодеплой.
Автодеплой принимает изменения из репа и запускает контейнер с нодой или чего у вас там, который монтирует в себя директорию с исходниками и делает билд проекта. После успешного билда контейнер с нодой завершает работу, и скрипт автодеплоя дергает далее контейнер с нгинксом для применения изменений.
Вот собственно все.
Образы используются сбилденные один раз. Как правило во время автодеплоя ничего дополнительно в них не вносится.
Ответ написан
@zohan1993
devops
1. Переезжаем на Docker swarm с одной нодой, появиться возможность "rolling updates" + появиться возможность быстрого маштабирования до N нод, для надежности или при разрастании проекта.
2. На деплой сервере делаем всю работу, обновляем код/зависимости, ребилдим webpack, собираем все в докер образ, если нужно тестим, заливаем а свой докер регистри.
3. На prod сервере просто обновляем сервис (обновляем версию image), Docker swarm разрулит обновление без простоя.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы