it-roy-ru.com

Dev, Stage и Production Развертывание для сайтов WordPress?

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

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

41
igneosaur

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

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

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

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

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

Сценическая среда

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

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

Когда коммиты отправляются в Gitosis в ветке 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 для регулярной проверки загрузок и отправки их в Gitosis, но это никогда не казалось мне необходимым.

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

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

27
Matthew Boynes

Во-первых, я думаю, что важно учитывать что вы собираетесь в систему контроля версий. Я бы рекомендовал против поместить весь каталог 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, чтобы обновить этот репо при каждом коммите. Это будет синхронизировать. (Считайте это непрерывной интеграцией бедняка.)

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

4
Ethan Seifert

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

2
lkraav

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

Вариант 1.

Единственная проблема - это config.php, который вы можете указать git игнорировать при Push или перед 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 )

2
Wyck