Docker и Laravel, деплой

При деплое на сервер Laravel приложения, через ci/cd или руками, нужно ли выполнять docker compose -build по новой? Насколько я понимаю это актуально, только для ci/cd, на случай когда docker-compose.yml изменяется, в случае ручного деплоя когда изменился только код в приложении этого делать не нужно?


Ответы (2 шт):

Автор решения: Денис Григоров

Из личного опыта, пересборка контейнера не делается. Полноценно CI/CD не используем, используем update bash скрипт. Есть два приложения - клиент (vue) и API (backend) на Ларавел Бэкэнд - подтягивается из гита изменения, делается git stash (если вдруг залетело что-то не из репозитория), применяются миграции и все Фронт - npm ci (отличие от npm i в том, что ci берет из package-lock.json, для прода актуален фикс версий), затем npm build

  • опционально тесты могут быть. Конечно же в идеале еще и переключение между экземплярами приложения для непрерывной работы (но у нас это не используется пока что)

docker build собирает контейнер заново. Но если вдруг в docker-compose затесались изменения (случайно или намеренно), то контейнер соберется заново и обнулится. Если у вас БД в контейнере - то она сотрется.

Считаю делать docker build на автомате слишком опасно и не оправдано. Контейнер пересобираться не должен в случае хранения важных данных в самом контейнере, должен обновляться экземпляр приложения. Если docker контейнер не хранит важные данные, то можете и пересобирать

→ Ссылка
Автор решения: Oleg Dmitrochenko

Зависит от того, как вы доставляете свое приложение на окружения.

Мы используем Symfony для серверной части и у нас клиентская часть приложения отдельно (React), но это дело не меняет.

Мы создаем сборки в CI/CD:

  • Для GitLab. Запускаем в них анализаторы и тесты. Тут используем dev зависимости, чтобы все это делать. Образ имеет дополнительные расширения для PHP, типа pcov, чтобы узнавать покрытие кода тестами не ожидая несколько минут.
  • Для Sandbox (Dev окружение). Тут также dev зависимости, но дополнительные пакеты, типа Xdebug не ставятся.
  • Для Stage и Production (Prod). Используем основные зависимости для проекта без dev зависимостей.

Для локальной разработки мы используем еще один образ, который создается локально и не отправляется на сервер.

Мы можем локально также использовать образы созданные для Sandbox или Stage, чтобы тестировать код с учетом зависимостей.

Мы распространяем код прямо в готовом образе, за исключением локальной разработки. Готовый образ это прям полноценный рабочий ящик, сервис, который можно запустить и работать с ним.

Локально образ создается один раз, потому что там мы монтируем локальные файлы и используем их в образе. Код и образ там изменяются независимо друг от друга. Если мы внесем изменения в Dockerfile, то локальный образ нужно будет пересобрать.

БД и другие хранилища используют свои сервисы и тома для хранения данных, чтобы они не слетали при повторном развертывании проекта на окружениях.

Так что все зависит от вашего flow и способа распространения кода по серверам, будь то вручную или автоматически.

→ Ссылка