Советы по развертыванию PHP-кода - PullRequest
25 голосов
/ 04 июня 2011

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

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

  • Наличие одной или нескольких локальных сред разработки
  • Разработка и тестирование на локальных компьютерах
  • Использование SVN (или Git) в качестве репозитория кода
  • Использование инструмента сборки для настройки новых сред (либо dev, staging или production), и развертывание кода

Поскольку я не очень знаком с этим процессом, яЯ ищу предложения о том, как лучше всего сформулировать эту идею и инструменты для ее использования, особенно когда речь идет о средствах сборки.Я изучал Ant и Phing (возможно, make), но я настолько новичок в этом, что я действительно хотел бы получить некоторое руководство.Есть ли хорошие учебники или книги по развертыванию PHP, особенно для начинающих?Меня особенно интересуют следующие темы:

  • Развертывание на разных типах серверов с разными настройками (например, dev использует разные пароли db, db, отчеты об ошибках PHP, отличные от производственных или промежуточных).
  • Развертывание, которое автоматически извлекает код из SVN.
  • Развертывание, которое временно устанавливает страницу «Обслуживание» для производственной среды.
  • После того, как я освоил вышеизложенное, возможно, даже проведу некоторое тестированиепроцесс сборки.

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

Ответы [ 3 ]

3 голосов
/ 04 июня 2011

Это не совсем ваш вопрос, но он уместен:

Если вы собираетесь распространять код, предназначенный для широкой аудитории, я бы посоветовал вам заняться созданием и распространением подписанных OpenSSL пакетов PHAR.,Вы можете без проблем распространять их по HTTP, а поскольку они подписаны OpenSSL, вы также снижаете риск атак типа «злоумышленник в середине» и защищаете конечных пользователей / клиентов / клиентов от кого-то, внедряющего код, если выЯ хочу настроить автоматическое обновление или обновление одним щелчком.

В прошлом я предлагал набор инструментов, которые отлично подходят для этого, но вам либо понадобится PHP 5.3, либо вам понадобитсяPHP 5.2 с установленным PHAR через PECL.https://github.com/koto/phar-util

Что касается тестирования, PHPUnit является стандартом де-факто.

3 голосов
/ 04 июня 2011

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

Несколько советов, которые могут показаться очевидными для некоторых, но на которые стоит обратить внимание:

  • Ваш файл конфигурации, сохраненный в вашей VCS, должен быть шаблоном и должен иметь имя, отличное от имени файла, который в конечном итоге будет содержать фактические настройки. Например. config-dist.php или config-sample.conf или sample/config-mysql.php или что-то в этом роде. В противном случае вы в итоге будете случайно проверять файл конфигурации конкретного сервера поверх вашего шаблона.
  • При развертывании PHP ожидайте, что некоторые пользователи не смогут запускать серверные сценарии с помощью какого-либо механизма, кроме самого веб-сервера. Установщик на основе PHP практически не подлежит обсуждению.
  • Вы должны включить удобный для пользователя механизм обновления, и для этого Wordpress является отличным примером проекта для подражания. PHP-скрипт может (а) загрузить последнюю сборку, (б) использовать функции ftp для обновления файлов вашего приложения и (в) выполнить скрипт обновления, который вносит соответствующие изменения в базу данных и т. Д.
  • Ради всего святого, не делайте так, как [ отредактировано ], и заставляйте своих пользователей загружать и устанавливать отдельные патчи для каждого выпуска. Пусть они загрузят последний (окончательный) выпуск, который содержит все обновления на сегодняшний день и последовательно применяет правильные функции ALTER TABLE.

Независимо от того, развертываются ли файлы через SVN или через FTP, механизм установки / обновления должен быть одинаковым: получить последние файлы, запустить скрипт обновления. Программа обновления использует версию, указанную в сценарии PHP, и версию, указанную в БД, и использует эти знания для применения соответствующих исправлений БД по порядку. Что касается того, как сгенерировать эти патчи, здесь есть другие вопросы , к которым вы можете обратиться за дополнительной информацией.

Что касается страницы «Обслуживание», просто используйте указанную выше версию для ее запуска (сравните версию в БД с версией в коде PHP). Также полезно иметь возможность пометить сайт как «общедоступный» для публики, но сделать его видимым для администраторов (как это делает Joomla), что можно активировать с помощью флагов базы данных или файловой системы.

Что касается автоматического извлечения кода из SVN, я бы сказал, что вам лучше использовать скрипт cron или триггеры фиксации, чем встраивать его в ваше приложение, поскольку это не будет иметь отношения к конечным пользователям.

0 голосов
/ 07 июня 2011

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

https://github.com/CodeMeme/Phingistrano

...