Composer, Git и рабочий процесс развертывания

Это скорее общий вопрос о Git, но я применяю его к SS, поэтому решил спросить здесь. Я дизайнер, изучаю Git.

Я ищу лучший способ работы со средой разработки и живым сервером. Моя настройка сейчас заключается в том, чтобы использовать composer и GitHub для Mac локально для работы над проектами на моем Mac. Затем я использую Beam для развертывания на рабочем сервере.

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу зафиксировать модули SS в своем репо для проекта. Использую GitHub для Mac, пишет "не удалось добавить имя_модуля в индекс". Мне до сих пор не ясно, почему это происходит. Потому что они являются подмодулями с git?

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

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


person KenSander    schedule 04.12.2014    source источник


Ответы (2)


Я управляю модулями с помощью composer и добавляю composer.json и composer.lock в ваш репозиторий git и все каталоги модуля в .gitignore. С помощью composer вы можете легко обновить структуру и модули позже.

Вы можете автоматизировать развертывание, используя что-то вроде capistrano или используя git-хуки.

Capistrano работает с вашей стороны, он логинится на действующий сервер, извлекает и выполняет за вас некоторые задания. Есть несколько рецептов капистрано для SilverStripe. У этого есть некоторые преимущества (например, в каталоге для каждого выпуска, простой откат, резервное копирование БД для каждого выпуска и т. д.), но для меня это было немного излишним для очень простых веб-сайтов, я хочу развернуть реальное исправление очень быстро.

С git hooks вам все равно нужно войти на живой сервер, перейти в свой веб-сайт и запустить git pull. Затем git вытащит ваши последние изменения из репозитория и выполнит для вас некоторые задания. У меня запущен этот хук git post-merge для SilverStripe (просто скопируйте скрипт в .git/hooks/post-merge на живом сервер):

#!/bin/bash
echo "running git post receive hook..."
DIR=$(git rev-parse --show-toplevel)

if [ -e "$DIR/composer.json" ]; then
if [ -d "$DIR/vendor" ]; then
composer.phar install
else
composer.phar update
fi
fi

echo "running dev/build"
sudo -u www-data php $DIR/framework/cli-script.php dev/build flush=1 

Он запускает composer install или composer update и dev/build для меня автоматически.

Еще один совет: не помещайте свои учетные данные базы данных или режим dev/test/live в репозиторий git. Вместо этого используйте _ss_environment.php. По одному на каждую машину.

person wmk    schedule 05.12.2014
comment
О развертывании SilverStripe также говорилось на 1-й европейской конференции Silverstripe в Линце в этом году: anselm.dk/static/talks/silverstripe-europe-meetup-2014/ - person wmk; 05.12.2014
comment
Большое спасибо @wmk. Есть отличная информация для меня, чтобы пройти. Меня все еще интересует общий хостинг, где у меня нет ssh/git/composer на живых серверах. Beam похож на капистрано, и это то, что я использовал. Я управляю SS с помощью композитора для модулей, но поскольку они загружаются с каталогом .git, я не могу зафиксировать их в своем репозитории для проекта, и поэтому я не могу использовать луч для развертывания на рабочем сервере, поскольку они не зарегистрирован. Есть ли способ добавить модули в мой репозиторий, чтобы я мог развернуть их на рабочем сервере? Это только для обхода общего хостинга, где у меня нет доступа к композитору. - person KenSander; 05.12.2014
comment
Зависит от вашей IDE. С PHPStorm, например. (другие наверняка тоже) тоже можно развернуть по фтп через IDE. Поскольку вам нужно установить весь проект локально для кодирования, вы можете загрузить все необходимые файлы, и все готово. Я использую его для некоторых очень простых сайтов, хотя я предпочитаю ssh. При развертывании через ftp вам придется запускать dev/build вручную. А afaik capistrano также может развернуться через ftp, поэтому он запускает composer и т. д. локально и размещает его на сервере. - person wmk; 06.12.2014
comment
Да, я думал, что для небольших сайтов с общим хостингом я бы просто загружал через FTP, но Beam поддерживает ftp, а также ssh. Проблема, с которой я сталкиваюсь, заключается в том, что если я использую композитор для управления SS на сервере разработки, я не могу проверить модули SS в своем собственном репо для проекта, потому что у модуля есть собственная папка .git в каталоге. Есть ли способ обойти это? в GitHub для Mac dropbox. com/s/5m4mcz0n7uplqa9/ Если бы я мог проверить все в своем собственном репозитории, я мог бы использовать Beam для развертывания через FTP для виртуального хостинга, и мне не нужно было бы запускать композитор на реальном сервере. Обходной путь взлома - person KenSander; 06.12.2014
comment
Capistrano поддерживает развертывание по ftp. - person wmk; 08.12.2014
comment
точно так же, как Beam, как я уже упоминал. Но с Capistrano, разве вам не нужно проверять коммиты в Git, а затем он использует это, чтобы решить, какие файлы являются новыми/измененными и должны быть загружены? И поскольку я не могу зафиксировать модули в своем репозитории, поскольку в них есть папка .git, с Beam он не знает, как их загрузить, и мне приходится прибегать к ручной FTP-загрузке или использовать композитор на стороне сервера. . Последнее нормально, за исключением случаев, когда у меня нет доступа к виртуальному хостингу. Все еще изучаю все это, поэтому я посмотрю еще раз, я полагаю, и найду лучший вариант для рабочего процесса виртуального хостинга. - person KenSander; 09.12.2014

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

Макет: на сервере разработки установите git и запустите проект

на сервере разработки редактируйте, добавляйте, удаляйте и фиксируйте файлы в репо

на продукте установите git pull из репозитория git

при разработке git commit в репозиторий от dev

когда вы хотите опубликовать, зайдите на живой сервер и выпустите кишку

вот как я сделал это с cvs и svn. та же идея с git. Работает как часы.

обязательно сделайте ssh over http, так будет лучше.

это только мое мнение из личного опыта; не принимайте это на слово. Я уверен, что другие сделали это по-другому.

person unixmiah    schedule 04.12.2014
comment
битбакет был огромным фактором. - person unixmiah; 04.12.2014
comment
Я не согласен: вы должны управлять зависимостями (включая модули) через Composer. Не используйте подмодули Git, проверяйте код в своем репозитории или управляйте зависимостями вручную. Если вам нужно что-то вроде Beam, это скорее дело вкуса — это необязательно, но Git и Composer — лучшая на данный момент практика. - person xeraa; 05.12.2014
comment
никогда не используйте подмодули git, они не являются хорошим решением для управления по сравнению с композитором - person Christopher Thomas; 10.02.2015