Процесс развертывания Magento 2


В настоящее время мы фиксируем composer.lock в хранилище, а затем запускаем composer install --no-dev на рабочем сервере. Я не думаю, что это лучший способ сделать это, потому что композитору требуется несколько минут, чтобы сгенерировать все файлы, и это рискованно.

Интересно, не лучше ли зафиксировать в репозитории все файлы, необходимые для работы в производственном режиме.

Как другие управляют процессом развертывания с помощью magento 2?

Author: Claudiu Creanga, 2016-02-17

4 answers

На 100% согласен с клаудиу-крянгой в том, чтобы не указывать поставщика, а также избегать установки composer в рабочей среде.

Способ, которым мы справились с этим, заключается в том, чтобы иметь живую папку и папку-кандидата на выпуск. Именно в папке-кандидате на выпуск мы запускаем команды git pull и устанавливаем composer --no-dev. Наш процесс можно резюмировать следующим образом:

  1. В папке кандидата на выпуск:

    • Проверьте, нет ли неожиданных изменений
    • Обновление репо
    • Установка композитора
  2. Синхронизируйте файлы с живой папкой сайта

  3. В папке "Живой сайт":
    • Развертывание статических файлов
    • Включить режим обслуживания
    • Включить модули
    • Запуск сценариев установки
    • Скомпилировать DI
    • Очистить кэш
    • Отключить режим обслуживания
    • Разрешения на обновление

Я написал более длинную статью в блоге, в которой даются фактические команды и обоснования этого: https://www.c3media.co.uk/blog/c3-news/deploying-magento-2-production-environment/

ОБНОВЛЕНИЕ: Теперь мы копируем действующую базу данных в промежуточную базу данных и используем ее для запуска сценариев установки, развертывания статических файлов и компиляции DI в автономном режиме. Затем это может быть развернуто в реальном времени, включая pub/статические файлы и var. Мы все еще ненадолго отключаем сайт, если выполняются сценарии установки, но в противном случае сайт остается открытым. Более подробная информация на https://www.c3media.co.uk/blog/c3-news/magento-2-deployment-without-downtime/

ОБНОВЛЕНИЕ: Я передумал фиксировать папку поставщика - фиксируя папку, вы получаете возможность отслеживать историю изменений этих файлов, видеть, не изменили ли вы что-нибудь случайно, и, самое главное, вы избегаете необходимости запускать composer во время развертывания. Последнее жизненно важно сейчас, когда мы полагаемся на внешних поставщиков хранилищ. Что, если один из них не доступен? Внезапно вы не можете развернуться. Недостатками являются более крупный репозиторий, риск совершения взломов ядра и нежелание разработчиков, таких как я:)

 5
Author: Robert Egginton, 2017-01-24 10:50:25

До сих пор мы также фиксируем папку поставщика, которая, конечно же, добавляет множество файлов в ваше репо. (Обязательно удалите все папки .git в файлах композитора поставщика, так как в противном случае содержимое папок не будет зафиксировано - например, firegento). Но символическая ссылка на папку поставщика не работает, отредактировав путь в vendor_path.php файл также не работает, и у нас пока не было времени искать лучшее решение.

У нас нет сервера сборки, и мы не запускаем composer на на сервере мы запускаем и тестируем все обновления локально и фиксируем их. Это, в свою очередь, запускает наш сценарий развертывания.

Наш сценарий развертывания заменяет env.php файл, выполняет несколько пользовательских действий, а затем также запускает setup:upgrade и setup:static-content:deploy перед переключением прямой ссылки на новую папку.

Единственная папка, на которую мы ссылаемся, - это pub/media.

 3
Author: tecjam, 2016-02-17 12:21:12

Наконец-то мы отказались от такой услуги, как deploybot (http://deploybot.com /). Вы можете использовать capistrano, который является бесплатным. Deploybot создает контейнер docker во время выполнения установки composer, и если команда выполнена успешно, он развертывает код, в противном случае он ничего не будет развертывать, чтобы ваша производственная среда была безопасной.

Я считаю это лучшим подходом, потому что:

1) наличие папки поставщика в вашем репозитории git не рекомендуется ребятами-композиторами для веские причины:

The general recommendation is no. The vendor directory (or wherever your dependencies are installed) should be added to .gitignore/svn:ignore/etc.

Дополнительная информация: https://getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md

2) Запуск composer install in production без систем безопасности является рискованным , пакеты могут не работать (см. npm), вы можете столкнуться с проблемами с памятью или любой другой ошибкой, которая может произойти во время создания файлов composer, и вам придется иметь дело со сломанной производственной средой.

 2
Author: Claudiu Creanga, 2016-03-30 20:48:57

Я также изучаю это, подход, который я использовал до сих пор, таков:

Загрузка сервера:

  1. Настройте проект с помощью composer --create-project ... --no-dev в папку src (хотя я все еще вижу, что происходит много ошибок)
  2. Настройка приложения, компиляция статических файлов, обновление базы данных и т.д.
  3. Установите все правильные разрешения

Что даст мне запас, работающий магазин из моего каталога src (но мой веб-корень не указывает туда)

Затем мое развертывание процесс:

  1. Создайте новую папку выпуска
  2. синхронизируйте файлы src в моем выпуске (исключая cruft)
  3. разверните и распакуйте мои настройки сверху (несколько файлов тем и модулей)
  4. устанавливайте любые сторонние модули magento через magento connect
  5. укажите мой веб-каталог хостов на мой новый выпуск (с символической ссылкой)
  6. изящно перезагрузите мой веб-сервер

Это позволяет мне поддерживать основной код Magento отдельно от моего собственного, использовать композитор, чтобы поддерживать его в актуальном состоянии.. и мне не нужно отправлять 39 102!!! файлы с каждым развертыванием или запуск команд composer во время развертывания..

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

Как только я закончу, у меня будет сборник пьес ansible и несколько команд Fabric для управления настройкой и развертыванием, что я с удовольствием сделаю делиться.

Надеюсь, это поможет

 1
Author: farridav, 2016-02-17 11:43:43