Вопрос или проблема
Мне нужно иметь возможность выполнять итерации dev/stage/production (на отдельных серверах) для сайта на WordPress. Обычно я использую git, но это явно не сработает с сайтами на WordPress из-за зависимости от базы данных для главной конфигурации… ну, почти всего.
Поэтому мой вопрос: как вы это делаете? Я быстро погуглил и увидел несколько плагинов, это единственный способ? Какие из них работают лучше всего по критериям простоты использования, скорости, надежности и интерфейса?
У меня есть настройка, которой я очень горжусь, и она работает исключительно хорошо для моей команды.
Общая структура
Я держу всю установку под контролем версий (git). Все изменения, будь то обновление системы, добавление/обновление плагина или темы, проходят через один и тот же рабочий процесс. Изменения могут быть отменены за считанные минуты. У меня есть сервер развертывания (старый настольный П4), на котором работает 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, но мне это никогда не казалось необходимым.
Структура master/develop настроена так, чтобы частично имитировать модель ветвления Винсента Дриессена. Я также использую его git-расширение git-flow, и я бы также очень рекомендовал это.
У меня уже больше года около 10 разработчиков работают с этой структурой, и с ней было одно удовольствие работать. Надежная, безопасная, быстрая, функциональная и гибкая, уж не знаю, что еще можно пожелать!
Во-первых, я думаю, что важно рассмотреть что вы собираетесь контролировать версионно. Я бы посоветовал избегать размещения всей директории WP под контролем версий. Я считаю, что имеет смысл поместить wp-content/themes/YourThemeName под контроль версий. Для большого сайта с большим количеством сложных плагинов я мог бы рассмотреть возможность включения wp-content/plugins также. Если вам действительно необходимо, вы могли бы включить wp-content/uploads. Ответы ниже могут немного измениться в зависимости от того, что вы контролируете версионно.
Исходя из этого, вот что я использую:
Локально: Настройте стек LAMP на вашем компьютере. Используйте тот же URL, что и для вашего сайта разработки. Используйте виртуальные хосты и записи .host для имитации среды разработки с точки зрения URL. Если вы просто контролируете свою тему, подумайте о том, чтобы использовать SSHFS для создания ссылки на wp-content/plugins, wp-content/uploads. Рассмотрите возможность использования базы данных на вашей локальной установке проекта, если вы не выполняете действительно тяжелую работу.
Разработка: Извлеките рабочую копию вашего репозитория в вашу среду WP. Настройте POST-COMMIT Hook в SVN, чтобы обновлять этот репозиторий при каждом коммите. Это позволит ему синхронизироваться. (Считайте это упрощенной непрерывной интеграцией.)
Продакшн: Извлеките именованную тег-версию, представляющую окончательного кандидата. Когда вам нужно использовать новую версию, переключите тег и обновите репозиторий.
Мы недавно обнаружили RAMP. Примечание: это лишь часть всего процесса, но синхронизация контентных баз данных между серверами, вероятно, является самой сложной частью этого.
Я делаю это с git и mercurial, просто убедитесь, что вы используете частный репозиторий.
Вариант 1.
Единственная проблема – это config.php, который вы можете заставить git игнорировать при push или перед инициализацией.
Используйте .gitignore
или git update-index --assume-unchanged config.php
(ознакомьтесь с командой assume-unchanged перед использованием)
Вариант 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)
Для эффективного управления средами разработки, тестирования и производства для сайтов на WordPress многие разработчики используют системы контроля версий, такие как Git или SVN. Обычно подход заключается в том, чтобы держать установку WordPress под контролем версий, сосредотачиваясь на директории wp-content, которая включает темы и плагины. Это позволяет обеспечивать последовательные обновления через среды и помогает определить, находится ли сайт в производственной или разработческой среде. Для развертывания изменения отправляются через определенные ветки, где сервера тестирования и продакшен отражают последние обновления, сохраняя при этом уникальные конфигурации (например, wp-config.php) для каждой среды. Инструменты, такие как Pantheon, могут упростить этот процесс, предлагая встроенные среды тестирования и возможности синхронизации баз данных.
.
Ответ или решение
Для эффективного управления средами разработки, тестирования и производства для сайтов на WordPress, разработчики часто используют системы контроля версий, такие как Git или SVN. Основная идея заключается в том, чтобы поддерживать установку WordPress под контролем версий, сосредоточив внимание на директории wp-content
, которая включает темы и плагины. Это позволяет последовательно обновлять код на всех средах и упрощает понимание, находится ли сайт в производственной или разработческой среде.
Общая структура
Рекомендуется организовать структуру разработки следующим образом:
-
Локальная среда разработки: Каждый разработчик может настраивать локальный сервер (например, LAMP) на своем компьютере. Использование виртуальных хостов и настроек в файле hosts помогает имитировать рабочий процесс через URL.
-
Тестовая среда (Staging): Эту среду можно настроить на облачном хостинге, где будет развернута версия сайта с последними изменениями из ветки разработки
develop
. База данных тестовой среды может быть репликой производственной базы данных, что позволяет избежать проблем с совместимостью данных. -
Производственная среда: Эта среда будет работать с последней стабильной версией, которая находится в ветке
master
. Вы можете легко развернуть новую версию, переключив тег в Git на новую стабильную сборку.
Управление конфигурацией
Ключевой проблемой является управление файлом wp-config.php
, который должен быть уникальным для каждой среды. Для этого можно использовать .gitignore
, чтобы исключить этот файл из версионного контроля, и вместо него создать несколько файлов, например, wp-config-staging.php
и wp-config-production.php
. На каждом сервере создается символическая ссылка, например:
ln -s wp-config-production.php wp-config.php
Таким образом, каждый разработчик может сохранить свои учетные данные и настроенные параметры в своем собственном wp-config.php
, который не будет отслеживаться системой контроля версий.
Инструменты и плагины
Существует ряд инструментов и плагинов, которые могут упростить процесс развертывания и управления базами данных:
- RAMP: Этот инструмент помогает синхронизировать базы данных между серверами и облегчает управление контентом.
- WP Migrate DB: Позволяет экспортировать базы данных с заменой URL и путей, что идеально подходит для переноса данных между средами.
- DeployHQ и Buddy: Эти сервисы автоматизируют процесс развертывания кода и могут интегрироваться с различными системами контроля версий.
Заключение
Следуя этому подходу, вы сможете создать надежную и эффективную структуру для работы с WordPress-сайтами, позволяя вашей команде легко сотрудничать, внедрять новые функции и поддерживать высокий уровень качества кода. Каждая среда будет изолирована, что минимизирует риск возникновения ошибок в производственной версии сайта.