@igormukhin

Правильный deploy Symfony2 проекта при наличии bower.json и grunt?

Здравствуйте!

Есть проект на Symfony2/PHP, в нем используются Bower и Grunt для разработки front-end.

Разумеется, содержание bower_components и разные минифицированные Grunt-ом файлы (js, css) не попадают в репозиторий - ровно по той же причине, почему туда не попадает папка vendor и файлы вроде bootstrap.php.cache.

Но мы же не хотим на боевом сервере иметь зоопарк nodejs, npm, grunt, bower и т.д.? Нет.
Значит остается единственный вариант - отдельная машина-deployer, на которой будут установлены все наши nodejs-штуки. Она при появлении изменений в репозитории будет выкачивать их, собирать, компилировать/минифицировать все и только потом rsync-ом выкладывать все файлы на production-сервер, где нет никаких nodejs - только сугубо то, что нужно для работы приложения.

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

ЗЫЖ Сейчас все собирается на моей девелоперской машине (т.к. весь зоопарк установлен) и rsync-ом публикуется на сервер. Хочется чтобы делалось само по git push.
  • Вопрос задан
  • 494 просмотра
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
на CI-сервере делаем билд (tar.gz/deb/rpm) по git push и деплоим его. Для деплоя, коль уж вы rsync-ом пользуетесь. можно воспользоваться штуками типа капистрано/капифони.

p.s. рекомендую посмотреть в сторону vagrant + ansible для автоматизации управления инфраструктурой. Или вообще на docker.
Ответ написан
@unity_ultra_hardcore
У нас файлом /etc/project_name.yml заведует Puppet. Сам проект собирается на CI-сервере в deb-пакет (там же делается bower install, gulp build etc). В postinstall-скрипте пакета с сайтом написано что-то вроде
cp /etc/project_name.yml /var/www/project_name/app/config/parameters.yml
.
То есть, нужная конфигурация уже лежит на сервере и пакет при установке просто себе ее копирует. Если нужно добавить новый параметр в файл, то сначала правится json-файл в hiera соответствующего хоста, он раскатывается на фронты, а потом уже накатывается пакет с сайтом, требующий новый ключ конфига.
В том же postinstall выполняется скрипт проверки соответствия ключей в parameters.yml.dist и свежепоявившемся parameters.yml и если ключи расходятся, то установка считается неудачной (читай, как разработчики накосячили с конфигом, ситуация требует ручного вмешательства).
Ключевой пойнт в том, что ни разработчики, ни CI-сервер ничего не знают про параметры боевого сервера и ограничены свой областью ответственности.
Ну а Puppet и так "слишком много знает" об инфраструктуре, поэтому, ему этот файл доверять не страшно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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