Я управляю несколькими проектами Symfony 2/3 на моем сервере Jenkins, которые я развертываю на реальном сервере. Это моя текущая настройка:
Строка
- с помощью git плагина
- удалить базу данных, если существует
- выполнение
composer install
(режим prod, оптимизация автозагрузчика) - Выполнение
bower install
для извлечения моих активов - выполнение сборки
gulp
, которая минимизирует и объединяет css/javascript (мы не используем assetic) - выполнение моих созданий базы данных
- Выполнение модульных тестов
Архивирование
После сборки я архивируйте артефакты сборки без папок vendor
, node_modules
и bower_components
в виде zip файла с помощью Сжатие артефактов".
Развертывание
Я использую плагин Продвигаемые сборки "и плагин Опубликовать через SSH": Если я хочу "пожить вживую" со сборкой, я публикую артефакты (мой zip файл) через SSH для моей живой системы в каталоге под названием staging_dir
. После загрузки файла я выполняю некоторые команды SSH:
- Установите текущую систему в режим обслуживания
- разархивируйте zip архива в моем
staging_dir
- выполнить
composer install
в живой системе (такой же, как и во время сборки) - (
bower install
и сборкаgulp
не требуется, поскольку мы используем активы, созданные нами во время сборки) - выполнить миграцию базы данных
- переместите текущие системные файлы в папку
backup
- копировать файлы из
staging_dir
- Установите живую систему в режим "производства" (отключите режим обслуживания)
Рекомендации?
Теперь я хотел бы собрать несколько лучших практик для развертывания:
- Вы предпочитаете переносить папку
vendor
в живую систему вместо повторного выполненияcomposer install
? - А как насчет активов? Вы снова используете
bower install
иgulp
на живой системе или используете опубликованные активы? - Как вы обрабатываете свои пароли при выполнении рекламной кампании в прямом эфире?
- ... другие вещи, которые я забыл.