Dev, Stage и Production Deployment для сайтов WordPress?

Поэтому мне нужно иметь итерации dev / stage / production (на отдельных серверах) для веб-сайта WordPress, я обычно использую git, но это, очевидно, не будет работать с сайтами WordPress из-за зависимости от базы данных для основного конфигурация … ну, почти все.

Так что мой вопрос: как вы, ребята, это делаете? У меня был быстрый Google и увидел, что есть несколько плагинов, это единственный способ? Какие из них делают работу лучше с точки зрения простоты использования, скорости, надежности, ui и т. Д.?

У меня есть настройка, которой я очень горжусь, и она отлично работает для моей команды.

Общая структура

Я держу всю установку под git. Все изменения, будь то обновление системы, добавление / обновление плагина, добавление / обновление темы, просмотр одного и того же рабочего процесса. Изменения можно отменить в любой момент. У меня есть сервер развертывания (старый настольный ПК P4), который запускает gitosis, но вы можете так же легко использовать github или gitolite . В git у меня есть две «специальные» ветви, master и develop (объясняется ниже). Мои серверы производства и промежуточного уровня облачные.

Среда разработки

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

Окружающая среда

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

Производственная среда

Когда коммиты переносятся на гитозис на master ветке, он автоматически развертывается на производственном сервере.

Проблема wp-config.php

Вы хотите, чтобы wp-config.php был уникальным от сервера к серверу, но вы также хотите сохранить его под контролем версий. Мое решение состояло в том, чтобы использовать .gitignore для игнорирования wp-config.php и хранения промежуточных и производственных версий в виде файлов с разными именами. Затем на каждом сервере я символически ссылаюсь, например, wp-config.php -> wp-config-production.php . Затем каждый пользователь сохраняет свою собственную БД со своими учетными данными со своими собственными (не проверенными) настройками wp-config.php.

Другие примечания

Я использую Rackspace Cloud , что является феноменальным и недорогим. С его помощью я могу оставить свои серверы промежуточного уровня и производства одинаковыми. Я также пишу плагины прямо сейчас, используя свой API, чтобы позволить мне управлять своими услугами прямо из WordPress, это замечательно.

Каталоги кэша, каталоги для загрузки файлов и т. Д. Добавляются в .gitignore. Если бы вы захотели, вы могли бы настроить задачу cron, чтобы регулярно проверять загрузки и подталкивать их к гитозису, но это мне никогда не казалось нужным.

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

У меня было около 10 разработчиков, которые работают над этой структурой уже более года, и с ней было мечтой работать. Надежный, безопасный, быстрый, функциональный и гибкий, вы не можете требовать гораздо больше!

Во-первых, я думаю, что важно рассмотреть, что вы собираетесь контролировать версий. Я бы рекомендовал не помещать весь каталог WP в VC. Я думаю, что наиболее целесообразно поместить wp-content / themes / YourThemeName под VC. Для большого сайта с большим количеством сложных плагинов я мог видеть, что этот случай включал wp-content / plugins. Если вам это абсолютно необходимо, вы можете включить wp-content / uploads. Ответы ниже немного изменятся, в зависимости от того, что вы контролируете версией.

Учитывая это, вот что я использую:

Локальный. Настройте стек LAMP на вашем компьютере. Используйте тот же URL-адрес, что и ваш сайт разработки. Используйте записи VirtualHosts и .host для имитации среды разработки с точки зрения URL. Если вы просто используете VC для своей темы, подумайте о том, чтобы использовать SSHFS для связи с wp-content / plugins, wp-content / uploads. Подумайте о том, как использовать базу данных в своей разработке для разработки проекта, если вы действительно не делаете тяжелую работу.

Разработка. Оформить рабочую копию своего репо в вашу среду WP. Установите POST-COMMIT Hook в SVN, чтобы обновить это репо для каждой фиксации. Это заставит его синхронизировать. (Рассматривайте его как непрерывную интеграцию бедных).

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

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

Я делаю это с git и mercurial, просто убедитесь, что вы используете частное репо.

Опция 1.

Единственная проблема – config.php, которую вы можете сказать git игнорировать при нажатии или перед init.

Используйте .gitignore или git update-index --assume-unchanged config.php (немного прочитайте о предполагаемой неизменной команде перед ее использованием)

Варианты 2.

Используйте условный код в файле config.php, который проверяет URL-адрес и применяет правильные учетные данные, в строках «если сервер url = dev затем использует учетные данные A, иначе используйте учетные данные B» и т. Д.

Марк объясняет это лучше, http://markjaquith.wordpress.com/2011/06/24/wordpress-local-dev-tips/

пс. Вы также можете загружать файлы непосредственно из удаленного репо вместо традиционного «файлового сервера». (действительно скучное видео, которое я сделал об этом http://www.youtube.com/watch?v=8ZEiFi4thDI )