Как начать развертывать приложения PHP из репозитория подрывной деятельности?

Вы можете проверить страницу релиза, у вас есть готовый исполняемый файл: https://github.com/securitywithoutborders/hardentools/releases

24
задан Andrew 7 May 2009 в 08:31
поделиться

8 ответов

Автоматическое развертывание + запуск тестов на промежуточном сервере называется непрерывной интеграцией. Идея состоит в том, что если вы отметите что-то, что нарушает тесты, вы получите уведомление сразу. Для PHP вы, возможно, захотите взглянуть на Xinc или phpUnderControl

Как правило, вы не не хотите автоматически развертывать в производство. Обычная вещь, которую нужно сделать - это написать несколько сценариев, которые автоматизируют задачу, но вам все равно нужно запустить ее вручную. Для этого вы можете использовать такие фреймворки, как Phing или другие инструменты сборки (популярным выбором является Capistrano ), но вы также можете просто смахнуть несколько shell-скриптов вместе. Лично я предпочитаю последнее.

Сами скрипты могут делать разные вещи, в зависимости от вашего приложения и настройки, но типичным процессом будет:

  • ssh на рабочий сервер. Остальные команды запускаются на производственном сервере через ssh.
  • run svn export svn: // путь / к / хранилище / теги / RELEASE_VERSION / usr / local / application / Releases / TIMESTAMP
  • остановить службы (Apache, демоны)
  • запустить отменить ссылку / usr / local / application / current && ln -s / usr / local / application / Releases / TIMESTAMP / usr / local / application / current
  • run ln -s / usr / local / application / var / usr / local / application / Releases / TIMESTAMP / var
  • run /usr/local/application/current/scripts/migrate.php
  • start services

(Предположим, у вас есть приложение в / usr / local / application / current )

21
ответ дан 28 November 2019 в 23:37
поделиться

Я бы не рекомендовал автоматическое обновление. Тот факт, что ваши модульные тесты пройдены, не означает, что ваше приложение работает на 100%. Что если кто-то зарегистрирует случайную новую функцию без каких-либо новых модульных тестов, и эта функция не будет работать? Ваши существующие модульные тесты могут пройти, но в любом случае эта функция может быть нарушена. Ваши пользователи могут увидеть что-то наполовину готовое. С автоматическим развертыванием от регистрации вы можете не заметить в течение нескольких часов, если что-то сделало его живым, чего не должно быть.

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

1) Выполните экспорт из последней регистрации 2) Загрузить экспорт на рабочий сервер 3) Распакуйте / сконфигурируйте недавно загруженный экспорт

Последние шаги я всегда выполнял вручную. Как правило, это так же просто, как экспорт SVN, zip, upload, unzip, configure, и последние два шага, которые я просто объединяю, чтобы выполнить пару команд bash. Затем я заменяю каталог корневого приложения на новый, гарантируя, что я оставлю старый в качестве резервной копии, и это будет полезно.

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

7
ответ дан 28 November 2019 в 23:37
поделиться

Вот отличная статья об использовании Subversion для развертывания веб-проектов - она ​​отвечает на многие ваши вопросы.

http://athleticsnyc.com/blog/entry/on-using-subversion -for-web-projects

5
ответ дан 28 November 2019 в 23:37
поделиться

Такого рода вещи вы бы назвали «Непрерывная интеграция». Atlassian Bamboo (стоимость), Sun Hudson (бесплатно) и Cruise Control (бесплатно) - все это популярные варианты (в порядке моего предпочтения), которые поддерживают обработку вывода PHPUnit (поскольку PHPUnit поддерживает вывод JUnit).

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

1
ответ дан 28 November 2019 в 23:37
поделиться

Это зависит от вашего приложения и от того, насколько хороши тесты.

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

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

Чтобы сделать то, о чем вы говорите, потребовалась бы какая-то вторичная регистрация, чтобы обеспечить сотрудничество между разработчиками в первичная проверка в области. Хотя я не

0
ответ дан 28 November 2019 в 23:37
поделиться

Для обработки загрузок классическим решением является удаление действительного каталога из основного веб-пространства, оставляя его только для извлечения свежей версии (как я делаю в приведенном ниже сценарии) и затем используя Apache для «псевдонима» его обратно на место как часть веб-сайта.

Alias /uploads /home/user/uploads/

Тем не менее, у вас будет меньше вариантов, если вы не обладаете таким большим контролем над сервером.

У меня есть скрипт, который я используйте для развертывания данного скрипта на сайтах dev / live (они оба работают на одном сервере).

#!/bin/sh

REV=2410
REVDIR=$REV.20090602-1027

REPOSITORY=svn+ssh://topbit@svn.example.com/var/svn/website.com/trunk
IMAGES=$REVDIR/php/i
STATIC1=$REVDIR/anothersite.co.uk

svn export --revision $REV  $REPOSITORY $REVDIR

mkdir -p $REVDIR/tmp/templates_c
chown -R username: $REVDIR
chmod -R 777       $REVDIR/tmp $REVDIR/php/cache/
chown -R nobody:   $REVDIR/tmp $REVDIR/php/cache/ $IMAGES
dos2unix $REVDIR/bin/*sh  $REVDIR/bin/*php
chmod 755 $REVDIR/bin/*sh $REVDIR/bin/*php

# chmod -x all the non-directories in images
find $IMAGES -type f -perm -a+x | xargs -r chmod --quiet -x
find $STATIC1 -type f -perm -a+x | xargs -r chmod --quiet -x

ls -l $IMAGES/* | grep -- "-x"

rm dev && ln -s $REVDIR dev

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

Последнее, что происходит, это старая символическая ссылка ... / website / dev / связана с Недавно извлеченный каталог. Конфигурация Apache имеет корень doc: ... / website / dev / htdocs /

Также есть соответствующий ... / website / live / htdocs / docroot, и опять же, live - еще одна символическая ссылка. Это мой другой скрипт, который удалит живую символическую ссылку и заменит ее на то, на что указывает dev.

#!/bin/sh
# remove live, and copy the dir pointed to by dev, to be the live symlink
rm live && cp -d dev live

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

1
ответ дан 28 November 2019 в 23:37
поделиться

проверь фредистрано, это клон капистрано отлично работает (немного запутанная установка, но в конце концов работает отлично)

http://code.google.com/p/fredistrano/

1
ответ дан 28 November 2019 в 23:37
поделиться

В моей компании, занимающейся разработкой веб-приложений, мы недавно начали использовать Webistrano , который представляет собой веб-интерфейс популярного инструмента Capistrano.

Нам нужен был простой в использовании инструмент для быстрого развертывания. с централизованным интерфейсом, подотчетностью (кто какую версию развернул), откатом к предыдущим версиям и желательно бесплатно. Capistrano хорошо известен как инструмент развертывания приложений Ruby on Rails, но не централизованный и ориентированный в основном на приложения Rails. Webistrano расширяет его с помощью графического интерфейса, подотчетности и добавляет базовую поддержку для развертывания PHP (используйте тип проекта «чистый файл»).

Webistrano сам по себе является приложением Ruby on Rails, которое вы устанавливаете на сервере разработки или промежуточном сервере. Вы добавляете проект для каждого из своих сайтов. К каждому проекту вы добавляете этапы, такие как Prod и Dev.

На каждом этапе могут быть разные серверы для развертывания, и разные настройки. Напишите (или измените) «рецепт», который представляет собой сценарий Ruby, который сообщает capistrano, что делать. В нашем случае я просто использовал предоставленный рецепт и добавил команду для создания символической ссылки на общий каталог загрузок, как вы упомянули.

Когда вы нажимаете «Развернуть», Webistrano SSH подключается к удаленному серверу (-ам), выполняется проверка svn кода и любые другие задачи, которые вам требуются, такие как миграция базы данных, создание символьных ссылок или очистка предыдущих версий. Все это, конечно, можно настроить, в конце концов, это просто сценарий.

Мы очень довольны этим, но мне потребовалось несколько дней, чтобы изучить и настроить, тем более что я не был знаком с Ruby и Rails . Тем не менее, я очень рекомендую его для производственного использования в малых и средних компаниях, так как он оказался очень надежным, гибкость и во много раз сэкономила нам первоначальные вложения. Не только за счет ускорения развертывания, но и за счет уменьшения количества ошибок / несчастных случаев.

4
ответ дан 28 November 2019 в 23:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: