Какова ваша предпочтительная стратегия развертывания php?[закрыто]

StackOverflow https://stackoverflow.com/questions/425692

  •  06-07-2019
  •  | 
  •  

Вопрос

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

У меня есть опыт развертывания с использованием Capistrano с Ruby, а также некоторые базовые сценарии оболочки.

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

Дополнительная информация

В настоящее время разработчики работают над локальными установками сайта и фиксируют изменения в репозитории subversion.Первоначальные развертывания выполняются путем экспорта помеченной версии из svn и загрузки ее на сервер.

Дополнительные изменения обычно вносятся по частям путем ручной загрузки измененных файлов.

Это было полезно?

Решение

Для PHP, SVN с Финг сценарии сборки - это правильный путь.Phing похож на МУРАВЕЙ но написан на PHP, что значительно упрощает модификацию PHP разработчиками под свои нужды.

Наша процедура развертывания выглядит следующим образом:

  • Все разрабатывают на одном и том же локальном сервере на работе, у каждого разработчика также есть проверка на его компьютере дома.
  • Фиксации запускают перехват после фиксации, который обновляет промежуточный сервер.
  • Тесты запускаются на промежуточном сервере, если они проходят успешно - продолжаются.
  • Запущен скрипт сборки Phing:
  • Отключает рабочий сервер, переключая домен на страницу "В стадии разработки".
  • Запускает обновление SVN при рабочей проверке
  • Запускает скрипт schema deltas
  • Запускает тесты
  • Если тесты завершаются неудачей - запустите сценарий отката
  • Если тесты проходят успешно, сервер перенаправляется обратно к рабочей проверке

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

Другие советы

В настоящее время я развертываю PHP с помощью Git . Простое создание git push - это все, что нужно для обновления моего производственного сервера последней копией из Git. Это легко и быстро, потому что Git достаточно умен, чтобы отправлять только разности, а не весь проект снова. Это также помогает сохранить избыточную копию хранилища на веб-сервере в случае сбоя оборудования на моем конце (хотя я также настаиваю на GitHub, чтобы быть в безопасности).

Мы используем Webistrano , веб-интерфейс для Capistrano, и очень довольны этим.

Webistrano позволяет выполнять многоэтапное развертывание в нескольких средах из SVN, GIT и других. Он имеет встроенную поддержку отката, поддержку отдельных ролей сервера, таких как web, db, app и т. Д., И разворачивается параллельно. Он позволяет вам переопределять параметры конфигурации на нескольких уровнях, например, для каждого этапа, и регистрирует результаты каждого развертывания, при необходимости отправляя его по почте.

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

После настройки его даже достаточно легко использовать непрограммистам, например, тестировщикам, внедряющим промежуточную версию.

Чтобы обеспечить максимально быстрое развертывание, мы установили метод fast_remote_cache , который обновляет svn кэш рабочей копии на удаленном сервере, а затем жестко связывает результат.

Я использую Apache Ant для развертывания в различных целях (dev, QA и live). Ant предназначен для развертывания Java, но предоставляет довольно полезное общее решение для развертывания произвольных файлов.

Синтаксис файла build.xml довольно прост для изучения - вы определяете разные цели и их зависимости, которые запускаются при вызове программы ant в командной строке.

Например, у меня есть цели для dev, QA и live, каждая из которых зависит от цели cvsbuild, которая проверяет последнюю версию заголовка с нашего сервера CVS, копирует соответствующие файлы в каталог сборки (используя тег fileset) и затем rsyncs каталог сборки на соответствующий сервер. Есть несколько причуд, чтобы учиться, и кривая обучения не совсем плоская, но я делал это в течение многих лет без проблем, поэтому я рекомендую это для вашей ситуации, хотя мне любопытно, какие другие ответы я посмотрю в этой теме.

Я делаю вещи вручную, используя Git. Один репозиторий для разработки, который получает git push --mirror для публичного репо, а живой сервер - это третий репо, извлеченный из этого. Я полагаю, что эта часть совпадает с вашей собственной настройкой.

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

Я запускаю работающий сервер прямо из главной ветви, и когда я закончу с другой веткой и буду готов объединить ее, перевернем сервер на эту ветку на некоторое время. Если он сломается, его возвращение мастеру займет несколько секунд. Если он работает, он объединяется с мастером, а живой код обновляется. Я предполагаю, что аналогия этого в SVN будет иметь две рабочие копии и указывать на живую копию через символическую ссылку.

Я знаю, что Phing уже упоминался несколько раз, но мне очень повезло с < a href = "http://www.phpundercontrol.org/about.html" rel = "nofollow noreferrer"> phpUnderControl . Для нас мы

<Ол>
  • Проверить отдельные копии веток на локальные машины
  • Ветви проверяются, а затем объединяются в магистраль
  • Коммиты в Trunk автоматически создаются phpUnderControl, запускают тесты и собирают всю документацию, применяют дельты базы данных
  • Магистраль проходит проверку качества, а затем объединяется с нашей стабильной веткой
  • Опять же, phpUnderControl автоматически создает Stable, запускает тесты, генерирует документацию и обновляет базу данных
  • Когда мы готовы перейти к производству, мы запускаем скрипт rsync, который выполняет резервное копирование Production, обновляет базу данных, а затем отправляет файлы. Команда rsync вызывается вручную, чтобы мы могли убедиться, что кто-то следит за продвижением.
  • альтернативой самодельным сценариям развертывания является развертывание на платформе как сервисе, которая снимает с вас большую часть этой работы.PaaS обычно предлагает свой собственный инструмент развертывания кода, а также масштабирование, отказоустойчивость (например.не выходит из строя при сбое оборудования), и обычно это отличный инструментарий для мониторинга, проверки журналов и т.д.Существует также преимущество развертывания в заведомо хорошей конфигурации, которая со временем будет поддерживаться в актуальном состоянии (одной головной болью для вас меньше).

    PaaS, который я бы порекомендовал, - это Облако точек, в дополнение к PHP (посмотрите их PHP quickstart) он также может развертывать MySQL, MongoDB и целую кучу дополнительных сервисов.В нем также есть приятные плюсы, такие как развертывание с нулевым временем простоя, мгновенный откат, полная поддержка SSL и websocket и т.д.И есть бесплатный уровень, что всегда приятно :)

    Конечно, я немного предвзят, так как я там работаю!Другими опциями, которые стоит проверить в дополнение к dotCloud, являются Pagodabox и Orchestra (теперь часть Engine Yard).

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

    Соломон

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

    Но если вам нужна система непрерывной интеграции для PHP, я думаю, Phing - лучший выбор для PHP. Я сам не проверял это, так как я делаю вещи, например, вручную. УПП.

    Я опаздываю на вечеринку, но думал, что поделюсь нашими методами. Мы используем Phing с Phingistrano , который обеспечивает Capistrano-подобную функциональность для Phing через предварительно созданные файлы сборки. Это очень круто, но работает, только если вы сейчас используете Git.

    У меня есть рабочая копия ветки релиза SVN на сервере. Обновление сайта (если нет изменений в схеме) так же просто, как ввод команды обновления SVN. Мне даже не нужно переводить сайт в автономный режим.

    Phing - это, вероятно, ваш лучший выбор, если вы можете выдержать боль от конфигурационных файлов XML. Платформа Symfony имеет свой собственный порт rake (pake), который работает довольно хорошо, но довольно тесно связан с остальной частью Symfony (хотя вы, вероятно, могли бы разделить их).

    Другой вариант - использовать Capistrano. Очевидно, что он не так хорошо интегрируется с PHP, как с Ruby, но вы все равно можете использовать его для многих вещей.

    Наконец, вы всегда можете написать сценарии оболочки. Пока что это то, что я сделал.

    http://controltier.org/wiki/Main_Page

    мы собираемся использовать его для развертываний на нескольких серверах & amp; техническое обслуживание.

    Год опоздал, но ... В моем случае развертывание не происходит автоматически. Я считаю опасным развертывать код и автоматически запускать сценарии миграции баз данных.

    Вместо этого ловушки Subversion используются для развертывания только на тестовом / промежуточном сервере. Код развертывается в рабочей среде в конце итерации, после выполнения тестов и проверки работоспособности. Для самого развертывания я использую специальный Makefile, который использует rsync для передачи файлов. Makefile также может запускать сценарии миграции на удаленном сервере, приостанавливать / возобновлять работу веб-серверов и серверов баз данных.

    На моей работе я и моя команда разработали замену, ориентированную на Phing, для развертывания capistrano, и мы также включили некоторые полезные свойства, доступные в phing, такие как PHPUnit testing, phpcs и PHPDocumentor. Мы сделали это git-репо, которое можно добавить в проект как подмодуль в git, и оно работает очень хорошо. Я прикрепил его к нескольким проектам, и он достаточно модульный, чтобы его можно было легко использовать с любым проектом в любой из наших нескольких сред (подготовка, тестирование, производство и т. Д.).

    С помощью скриптов phing build вы можете запускать их из командной строки вручную, и я также успешно автоматизировал процедуры сборки / развертывания с помощью Hudson и теперь Jenkins ci.

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

    Я полагаю, способ развертывания SVN не очень хорош. Потому что:

    Вам нужно открыть доступ к SVN для всего мира

    есть много .svn на рабочих веб-серверах

    Я думаю, что Phing для создания ветки + объединить все настройки js / css + replace stage + загрузка ssh на все www-серверы - лучший способ.

    ssh на 10 www сервер и svn up - это тоже проблема.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top