Как перенести WordPress с сервера разработки на рабочий сервер?
Я выполняю разработку на одном сервере, а для продакшена использую второй. Сейчас я просто делаю дамп базы данных, затем выполняю поиск и замену URL-адресов, после чего копирую файлы и импортирую новый SQL.
Существуют ли лучшие способы сделать это?

@Insanity5902: Развертывание сайта WordPress с одного сервера на другой всегда было головной болью с самого начала моей работы с WordPress. (Честно говоря, это было проблемой и с Drupal в течение 2 лет до того, как я начал работать с WordPress, так что проблема явно не исключительно в WordPress.)
Меня раздражало, что каждый раз при переносе сайта приходилось тратить столько усилий, часто дублируя одни и те же действия, и это мешало мне развертывать тестовые среды так часто, как хотелось бы. Поэтому около 4-6 месяцев назад я начал работать над плагином для решения проблемы миграции между хостингами и упомянул свои идеи на форуме WP Tavern.
И вот сегодня я практически завершил работу над ним и временно назвал его "WP Migrate Webhosts". Хотя плагин всё ещё находится в стадии бета-тестирования (возможно, даже альфа), учитывая ваш вопрос, я думаю, что готов позволить людям начать его тестировать.
Предполагаемый сценарий использования:
- Сначала разработчик загружает все измененные файлы темы и плагинов через FTP,
- затем полностью переносит базу данных MySQL на тестовый сервер,
- и только после этого запускает плагин для миграции всех ссылок со старого домена на новый. (Мой плагин не решает проблему слияния новых полей или таблиц БД с актуальными данными; ЭТО гораздо более сложная задача, которую я пока не знаю, как решить.)
Вы можете скачать плагин с моего сайта и распаковать его в папку с плагинами (если вы не знаете, как это сделать, то этот плагин не для вас, так как он требует некоторого опыта работы). Я оставлю его доступным до релиза на WordPress.org, после чего его нужно будет искать там.
Для использования потребуется изменить подход в файле wp-config.php
: закомментировать четыре (4) стандартные директивы DB_NAME
, DB_USER
, DB_PASSWORD
и DB_HOST
, а вместо них зарегистрировать настройки по умолчанию для хостингов и информацию о каждом из них. Вот как может выглядеть соответствующий раздел wp-config.php
(обратите внимание, что первая часть — это закомментированный ненужный код, а также на то, что я использую локальные домены .dev
для удобства разработки. На Mac VirtualHostX значительно упрощает этот процесс):
// ** Настройки MySQL - можно получить у хостинг-провайдера ** //
/** Имя базы данных для WordPress */
//define('DB_NAME', 'wp30');
/** Имя пользователя MySQL */
//define('DB_USER', 'wp30_anon');
/** Пароль к базе данных MySQL */
//define('DB_PASSWORD', '12345');
/** Хост MySQL */
//define('DB_HOST', '127.0.0.1:3306');
require_once(ABSPATH . 'wp-content/plugins/wp-migrate-webhosts/wp-webhosts.php');
register_webhost_defaults(array(
'database' => 'example_db',
'user' => 'example_user',
'password' => '12345',
'host' => 'localhost',
'sitepath' => '', // '' если WordPress установлен в корень
));
register_webhost('dev',array(
'name' => 'Локальная разработка Example',
'host' => '127.0.0.1:3306',
'domain' => 'example.dev',
'rootdir' => '/Users/mikeschinkel/Sites/example/trunk',
));
register_webhost('test',array(
'name' => 'Тестовый сервер Example',
'rootdir' => '/home/example/public_html/test',
'domain' => 'test.example.com',
));
register_webhost('stage',array(
'name' => 'Стейдж-сервер Example',
'rootdir' => '/home/example/public_html/stage',
'domain' => 'stage.example.com',
));
register_webhost('live',array(
'name' => 'Продакшн Example',
'rootdir' => '/home/example/public_html/',
'password' => '%asd59kar12*fr',
'domain' => 'www.example.com',
));
require_once(ABSPATH . 'wp-content/plugins/wp-migrate-webhosts/set-webhost.php');
Надеюсь, это в основном понятно. Я постарался сделать код максимально чистым, но, к сожалению, пришлось добавить две загадочные строки require_once()
до и после блока регистрации хостингов, так как невозможно "перехватить" WordPress до вызова wp-config.php
.
После обновления wp-config.php
можно просто использовать URL-адрес wp-migrate-webhosts
для перехода на экран администрирования:
Это приведет вас к админ-панели, где будет много пояснительного текста, и вы сможете мигрировать С любого другого домена в один клик после выбора исходного домена (ПРИМЕЧАНИЕ: в примере показан переход С тестового/стейджа/продакшна на локальную разработку, но плагин может мигрировать НА любой домен, где он находится. Это также означает, что плагин отлично подойдет для быстрого развертывания локальной среды разработки на основе существующего продакшн-сайта!):
Если это неочевидно, "миграция" в данном контексте означает обновление всех ссылок в текущей базе данных в соответствии с настройками текущего хостинга (а "текущий" определяется через $_SERVER['SERVER_NAME']
).
Круто то, что плагин реализует базовые миграции, но любой может добавить свои собственные обработчики. Например, если у вас есть плагин галереи, который хранит полные пути к изображениям в БД, вы можете подключиться к действию migrate_webhosts
, которое получит метаданные исходного и целевого хостингов, и выполнить необходимые SQL-запросы или использовать API WordPress для миграции. Да, это можно сделать и без плагина, но без него писать весь код с нуля было слишком трудоемко. С плагином же достаточно написать небольшие хуки и забыть о проблеме.
Возможно, в некоторых случаях мои миграции не сработают — я мог что-то упустить. Может, вы поможете улучшить плагин? Все желающие могут написать мне на Gmail (мой алиас — "mikeschinkel").
Кроме того, плагин поддерживает пользовательские метаданные хостингов помимо стандартных, таких как database
, user
, password
, host
, domain
и т. д. Например, можно добавить googlemaps_apikey
для хранения разных API-ключей Google Maps для каждого домена (кто из вас, работая с плагинами Google Maps, не забывал поменять API-ключ при переносе на продакшн? Ну признайтесь! :) С этим плагином, элементом googlemaps_apikey
в массиве register_webhost()
и небольшим хуком на migrate_webhosts
эта проблема исчезнет!
Вот, собственно, и всё. Я публикую этот плагин здесь, на WordPress Answers Exchange, потому что вопрос @Insanity5902 стал для меня триггером. Дайте знать, если он окажется полезным — здесь или по почте.
P.S. Если решите использовать, помните: это альфа/бета, и возможны изменения. Будьте готовы к небольшим правкам, если начнёте сейчас, а потом перейдёте на релизную версию.
P.P.S. Какие у меня цели? Я бы хотел, чтобы этот функционал попал в ядро WordPress, чтобы он стал доступен всем. Но для этого нужно, чтобы множество людей протестировали его и подтвердили, что он решает больше проблем, чем создаёт. Так что если идея вам нравится — пользуйтесь и помогите набрать критическую массу для возможного включения в WordPress!

Отличные решения, но у меня есть пара вопросов: 1) Нужно ли еще определять WP_SITEURL для доступа в админку? 2) Этот инструмент отображается только для администраторов? (не уверен, отображается ли раздел инструментов для не-админов)

Привет @Insanity5902:
1) Нет необходимости устанавливать WP_SITEURL, плагин делает это за вас. Фактически вы устанавливаете его, когда "регистрируете" "домен" и "путь к сайту" для веб-хоста. В обычной работе WordPress WP_SITEURL должен быть установлен либо в коде, либо в базе данных, чтобы гарантировать, что никто не подделает URL и не совершит вредоносных действий из-за неожиданного значения в $_SERVER['SERVER_NAME']. Плагин WP Migrate Websites устанавливает WP_SITEURL косвенно на основе $_SERVER['SERVER_NAME'], но он сделает это ТОЛЬКО если текущий домен совпадает с одним из доменов, которые вы определили в файле wp-config.php, и никак иначе.

2.) Упомянутый мной URL-ярлык фактически выполняет перенаправление в админ-консоль, поэтому он доступен только для пользователей, вошедших в админку. Пока у меня нет специальных проверок только для администраторов. Я никогда раньше не добавлял возможности в плагин, но мне нужно будет полностью изучить этот вопрос в ближайшие недели, поэтому могу поработать над этим в течение следующего месяца. Однако плагин не является разрушительным; он может переносить данные ТОЛЬКО на текущий домен, и процесс повторяем, поэтому даже если не-админ получит доступ, он не сможет нанести вред, по крайней мере я не могу представить такого сценария.

@Mike: Можешь добавить его в репозиторий плагинов WordPress? Думаю, это поможет собрать дополнительную обратную связь и привлечь поддержку разработчиков.

@harke - Я планирую это сделать, когда плагин станет более зрелым. Сначала хочу, чтобы его протестировали 5-10 человек, чтобы убедиться в его надежности и проверить валидность сценариев использования, прежде чем публиковать его в системе рейтингов на форуме плагинов. Я считаю, что этот плагин может стать значимым, если правильно его развивать. Также я хочу полностью его задокументировать перед публикацией, и процесс документирования заставит меня проверить многие предположения, сделанные во время разработки.

Спасибо за создание этого плагина. Сейчас я его тестирую, и он работает очень хорошо. Я бы хотел отправить вам отзыв. Где лучше всего это сделать?

@Sam Murray-Sutton - Я вижу из своего почтового ящика, что вы разобрались, как мне написать, но если кто-то еще захочет - моя почта указана на странице моего профиля.

Я определенно попробую это. Сейчас настраиваю свою первую полную среду и надеюсь, что смогу связать это с моим репозиторием bitbucket. В любом случае: большое спасибо за а) хорошее объяснение (снова) и б) за то, что делитесь классными вещами (снова). Желаю всего наилучшего, Майк!

Это, по сути, тот же процесс, который мы используем с нашим wp-config.php. Возможность выкладывать код на staging-сервер без того, чтобы все сломать - это единственный способ работать. Мы не делаем выгрузку и загрузку БД через WP, а используем mysql-клиент, что так же эффективно, хоть и немного медленнее.

@mike как я могу использовать этот метод для переноса одного сайта из мультисайтовой (локальной) установки?

@MikeSchinkel - возможно, стоит добавить это в список: http://wordpress.stackexchange.com/questions/24314/wordpress-database-synch-between-dev-and-prod/24982#24982

/wp-migrate-webhosts выдает 404 ошибку, а /wp-admin - 'ошибку соединения с базой данных'

Когда это возможно, я устанавливаю WP_HOME
и WP_SITEURL
в файле wp-config.php
. Это в сочетании с дампом базы данных и её импортом является самым простым из всех известных мне решений.
http://codex.wordpress.org/Changing_The_Site_URL#Edit_wp-config.php

Когда может быть невозможно установить эти параметры? Это звучит немного проще, чем изменять данные в базе данных.

@jfklein Я почти всегда работаю с WordPress Network, который несовместим с этими константами.

Делаю то же самое. К сожалению, не все темы поддерживают это. Например, 'Responsive Theme' из ThemeID. Поиск по дампу/всем таблицам 'http://localhost' (или любое другое локальное имя), особенно в wp_options, и выполнение поиска и замены часто неизбежны.

@FranKee Я создал плагин https://wordpress.org/plugins/pitta-migration/, который использует константы для обновления таблицы wp_options, что должно охватить большинство тем и плагинов

@icc97: Отлично. Посмотрю. PS: Красивое изображение в заголовке, хорошо передает ситуацию.

Мой любимый хак: добавьте настройку в ваш /etc/hosts
, чтобы домен продакшена указывал на вашу dev-машину, но только на вашем компьютере. Для деплоя в продакшен вы синхронизируете файлы через rsync и переносите базу данных.
Риски этой стратегии очевидны: вы можете перепутать dev-среду с продакшеном.
Но это легко исправить.

Да! Я так рад, что я не единственный, кто об этом подумал! Любая разница между dev и prod — это плохо. Полное устранение этой разницы гораздо лучше, чем попытки обойти ее. И эта настройка не требует никаких усилий. При необходимости можно даже проводить тестирование на виртуальной машине с измененным файлом hosts.

Мне очень нравится этот метод, но как вы обрабатываете перенос базы данных между средами (push/pull)?

Мне хотелось чего-то подобного, когда я переходил на WordPress несколько месяцев назад, поэтому я написал довольно простой скрипт для оболочки, использующий rsync и mysqldump через ssh:
http://snarfed.org/sync_wordpress
Он не сложный и не веб-ориентированный, но меня вполне устраивает.

WP Engine — это новый сервис, предлагающий "Стадирование в один клик":
У WPEngine есть эксклюзивная функция под названием "стадирование". Вот как это работает: прежде чем вносить рискованные изменения в свой блог, нажмите кнопку "снимок". Мы создаем полную копию вашего блога и размещаем её в отдельной, безопасной зоне. Вы можете экспериментировать с чем угодно — это не затронет основной сайт. Только когда вы будете готовы внести изменения в основной сайт, вы сможете перенести их туда.
Выглядит как очень удобный способ быстрого перехода от разработки к продакшену, особенно для уже работающего сайта.

Это действительно очень удобная опция, которая отлично подойдет многим! Конечно, она не работает с встроенными URL и не помогает тем, кто разрабатывает локально и использует IDE с отладчиком. Но если WPEngine сможет создать механизм, объединяющий локальное развертывание, тогда это будет действительно что-то стоящее (Technosailor, ты слышишь?)

Функция snapshot копирует данные только из production в staging, но не наоборот. Это отлично подходит для тестирования изменений, но не поможет при развертывании в production.

@sam на самом деле, они недавно начали внедрять возможность копирования из staging в production. http://wpengine.com/2013/04/user-portal-v2-and-staging-to-production/

Плагин Duplicator: Это плагин, над которым я работаю. Сейчас он находится в бета-версии, но уже отлично справляется с большинством сайтов. В данный момент он ориентирован на небольшие установки WordPress. http://wordpress.org/extend/plugins/duplicator/
Ресурсы: Дополнительные ресурсы по плагину можно найти здесь: http://lifeinthegrid.com/duplicator/
Сообщество: Пожалуйста, делитесь своими успехами или любыми проблемами, с которыми вы столкнулись! Чтобы упростить управление обсуждениями, размещайте вопросы на форумах плагина WordPress.org. Пожалуйста, не публикуйте данные логов плагина на открытых форумах. Данные логов можно отправить на наш сайт поддержки.

Вы можете ознакомиться с продуктом от iThemes под названием BackUpBuddy. Я использовал его всего дважды, и каждый раз возникали небольшие сложности, но в целом он выглядит перспективным.

По состоянию на 2017 год, вот два лучших способа, которые я нашел для переноса базы данных WordPress из среды разработки в рабочую среду.
WP Migrate DB Pro / WP Sync DB
https://wordpress.org/plugins/wp-migrate-db/
Эти плагины WordPress позволяют передавать, загружать и синхронизировать таблицы базы данных между установками WordPress. Это намного лучше, чем просто поиск и замена, по многим причинам, потому что они:
- Экспортируют вашу базу данных в виде дампа MySQL (аналогично phpMyAdmin)
- Выполняют поиск и замену URL-адресов и путей к файлам
- Обрабатывают сериализованные данные
- Позволяют сохранить базу данных на компьютер в виде SQL-файла
Я поддерживаю оплату за проделанную работу, поэтому рекомендую поддержать г-на Брэда Туеснара и купить лицензионную версию оригинального плагина. WP Sync DB — это реплика, и поддержка в нем всегда отстает. С этим плагином процесс чрезвычайно прост:
- Установите/активируйте плагин на локальном сервере и в рабочей среде
- Настройте передачу (push) с локального сервера/сервера разработки на рабочий сервер
- Задайте правила для выбора таблиц для передачи и определите правила поиска и замены
- Готово!
Database Search & Replace for WordPress Databases от InterconnectIT
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
Это бесплатный инструмент, а не плагин, который устанавливается в корневую директорию вашей рабочей установки WordPress. Он не так удобен, как WP Migrate DB Pro, поскольку требует выполнения нескольких ручных шагов, но, тем не менее, это отличный вариант, который стабильно работает. При использовании этого подхода процесс выглядит так:
- Создайте резервную копию локальной базы данных — это абсолютно необходимо, так как мы скоро будем её восстанавливать
- Добавьте скрипт в папку в корневой директории вашей установки
- Запустите поиск и замену в вашей базе данных
- Экспортируйте базу данных и сохраните её для рабочей среды
- Восстановите резервную копию из шага №1, чтобы вернуть локальную базу данных
- Подключитесь к рабочей базе данных и создайте её резервную копию (как всегда следует делать перед такими операциями)
- Импортируйте экспорт, который мы сделали ПОСЛЕ выполнения поиска и замены на шаге №4
Можно использовать более быстрый подход, но он потребует остановки рабочего сайта, что, на мой взгляд, неприемлемо. Ведь мы называем это рабочей средой не просто так, верно?

Это выглядит многообещающе. Мы работаем над несколькими скриптами для обработки миграции части данных, например wp-options, изменения путей в базе данных и копирования медиафайлов.
Проблема в том, что основной сайт продолжает расти, пока другой находится в разработке. На одном из сайтов, с которыми мы работаем, появляется 20 постов в день и более 3000 комментариев в сутки. Это слишком большой объем данных для переноса через phpmyadmin или командную строку. Кроме того, перемещение данных почему-то всегда вызывает проблемы с кодировкой UTF.
Также, учитывая что настройки меню теперь хранятся в базе данных, у меня появилось еще больше работы.
Я фиксирую весь свой код в SVN и разворачиваю его через FTP с сервера (Beanstalk). Однако это не вносит изменения в базу данных автоматически и не активирует новые плагины.
Сейчас мой план - создать манифест-файл во время разработки, который будет содержать все изменения для рабочего сайта.
Например, файл будет содержать удобочитаемые строки с указанием:
- плагины для активации
- wp-options для переноса
- изображения для перемещения
- страницы для переноса
Затем мой плагин будет обнаруживать этот манифест-файл и вносить все изменения на тестовый сайт.
После тестирования и проверки, что все работает корректно, можно быть уверенным, что это сработает и на рабочем сайте.
Пока этот плагин всего лишь идея, но у меня уже есть часть кода для него.
Также, если вам нужно просто изменить URL в базе данных, вы можете использовать следующий SQL-запрос:
просто замените $old$
на старый домен и $new$
на новый
update wp_postmeta set meta_value = replace(meta_value, '$old$' , '$new$') ;
update wp_posts set post_content = replace(post_content, '$old$' , '$new$') ;
update wp_options set option_value = replace(option_value, '$old$' , '$new$') ;

Просто заметка, мой sql-запрос может повредить ваши сериализованные данные.
s:14:blogs.prod.com имеет закодированную длину 14. После выполнения кода, теперь у нас
s:14:dev.prod.com
что является повреждёнными данными. Должно быть
s:12:dev.prod.com
используйте с осторожностью.

Я лично занимаюсь этой проблемой в своем проекте на Github под названием Autopress. У меня пока нет идеального решения, но я приближаюсь к нему, особенно с плагином wpstage от ребят из wpengine.

Только что проверил ваш скрипт. Отлично. Если я правильно понял, он устанавливает чистый WP на сервер. Вопрос в том, как мигрировать с разработки на продакшен. Может ли он помочь с этим?

Это он? http://github.com/vluther/Autopress Советую добавлять ссылки в ваши ответы, чтобы люди могли сразу перейти по ним!

@Mike Lee: Да, вы можете голосовать за комментарии. Смотрите, я проголосовал за комментарий artlung. Ищите стрелку вверх при наведении слева от комментария.

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

Не уверен, что это то, что нужно, но у WP Engine есть плагин для миграции сайтов между хостингами. Он называется Snapshot (Прямая ссылка).

http://plugins.wpengine.com/wpengine-snapshot.zip больше не доступен :(

Два проекта Google Summer of Code, которые имеют схожую цель:
- Автоматическая миграция (GSoC 2010)
- WordPress Move (предложение) (GSoC 2011)

Я использую http://wordpress.org/plugins/wp-clone-by-wp-academy/. Отличный плагин!
Всего 3 шага:
- Установите плагин на обоих сайтах.
- Создайте резервную копию старого сайта через плагин.
- Возьмите URL резервной копии, вставьте его в плагин на новом сайте, нажмите "Go" - миграция завершится за несколько секунд!
Плагин автоматически корректирует все URL, включая замены в сериализованных строках, поэтому нет риска потерять настройки виджетов и т.д.
Единственные проблемы возникали с сайтами, имеющими большие базы данных (~300MB), когда при импорте резервной копии происходило превышение времени выполнения PHP-скриптов.

Обычно я вхожу в phpMyAdmin, загружаю базу данных и редактирую содержимое wp_options>siteurl и wp_options>home, указывая нужный домен. Если вам нужно обновить URL-адреса внутри записей и страниц, вы можете выполнить поиск и замену URL и пути к медиафайлам/загрузкам в .SQL файле перед загрузкой. Это быстрая процедура.

Я использую команду экспорта Subversion для установки файлов WordPress (http://core.svn.wordpress.org/tags//), а также всех плагинов из репозитория (http://plugins.svn.wordpress.org//tags//), затем просто архивирую тему и пользовательские плагины и устанавливаю их обычным способом. Как только всё это работает без контента, я экспортирую тестовую базу данных, выполняю поиск/замену URL и пути к файлам (используется для медиафайлов), импортирую в пустую базу данных, а затем просто меняю данные базы данных в файле wp-config.php. Обычно весь процесс занимает у меня около 10-20 минут.

Хотя здесь нет недостатка в хороших решениях, в духе обмена я решил добавить свой bash-скрипт для деплоя в общую кучу: https://github.com/jplew/SyncDB
SyncDB — это bash-скрипт для деплоя, предназначенный для устранения рутины при синхронизации локальной и удаленной версий сайта на Wordpress. Он позволяет разработчикам, работающим в локальной среде (например, MAMP), быстро "отправлять" или "забирать" изменения на продакшн-сервер или с него одной командой в терминале.
Этот скрипт хорошо работает с WP-Skeleton от Mark Jaquith и использует mysqldump
, git
и rsync
для синхронизации всего сайта — базы данных, кода и медиа — в два простых шага:
./syncdb
git push hub master

Это самый простой способ из всех возможных:
https://themes.artbees.net/docs/website-migration/
Потребуется всего два клика. Один для экспорта, другой для импорта.
Это возможно с помощью плагина All in one WP Migration. По ссылке выше показано, как им пользоваться.

Ещё один полезный инструмент для переноса сайтов на сервере — это WordPress CLI. В этой статье есть хороший обзор его возможностей, но особенно полезен раздел "Поиск и замена" для поиска всех ссылок на старый/тестовый URL сайта:

Поскольку я запускаю свои сайты на IIS (я также использую ASP.NET, поэтому мне нужна Windows), я использую WebPI от Microsoft для установки нового экземпляра, затем копирую шаблон и использую импорт/экспорт для переноса данных.
Это не идеально, но весь процесс занимает меньше часа.
Конечно, было бы здорово иметь решение в один клик, но это то, что я нашел наиболее удобным для себя.

Я уже некоторое время использую плагин BackupBuddy. Он позволяет создавать резервные копии базы данных и всех файлов, скачивать их в формате zip или отправлять напрямую на другой сервер через FTP. Кроме того, плагин автоматически выполняет поиск и замену URL. Обычно весь процесс занимает у меня около 5 минут. А поскольку все файлы запакованы в zip, процесс загрузки и скачивания происходит гораздо быстрее. И нет, я не работаю на них, но этот плагин действительно значительно упростил весь процесс.

Позвольте поделиться одним из моих любимых решений :-)
// проверенный способ разделения локального и рабочего окружения (включая тестирование в локальной сети, например с мобильных устройств):
$GLOBALS['is_local'] =
in_array( $_SERVER['REMOTE_ADDR'], array("127.0.0.1","::1")) || // простой localhost (IPv4 IPv6)
$_SERVER['HTTP_HOST'] == 'local.workblog' || // обращение по локальному имени (настройте под себя)
substr($_SERVER["REMOTE_ADDR"],0,8) == '192.168.'; // (мобильное) устройство в локальной сети
$table_prefix = NULL; // гарантия области видимости
if ( $GLOBALS['is_local'] ) // ЛОКАЛЬНАЯ ветка ------------------------
{
....
}
else // ТЕСТОВАЯ/РАБОЧАЯ ветка -------------------
{
...и затем вы продолжаете настройку от этого места. DB_NAME, DB_USER... table_prefix. Лично я включаю ALTERNATE_WP_CRON на локальном окружении (чтобы избежать некоторых раздражающих предупреждений), WP_DEBUG выключен на обоих (если вы не разработчик) или только на рабочем (если вы разработчик), еще одна настройка ini_set('display_errors', '0');
для рабочего окружения также может быть полезной, и наконец, как упоминалось выше: WP_HOME и WP_SITEURL с соответствующими локальными/актуальными URL.
Это практически всё, ничего не остаётся выше классической строки WordPress 'Всё, можно прекращать правки!'...
Часть с 192.168. позволяет вам проводить локальное тестирование (например, с планшетов или телефонов) в пределах вашей локальной сети.
Переменная $GLOBALS['is_local'] может быть полезна и в разработке тем, для дополнительного отладочного вывода и т.д...

Вы можете использовать WordPress Skeleton wp-config.php, который устанавливает константу WP_LOCAL_DEV
для достижения аналогичного результата

RAMP — это новый плагин для развертывания контента от Crowd Favorite, и он выглядит действительно стильно. Однако его цена составляет $250, поэтому я пока не тестировал его. Тем не менее, он может окупиться за счет экономии времени, так что я рассматриваю его покупку.
Главное преимущество RAMP перед большинством других упомянутых методов заключается в том, что он может интеллектуально объединять записи, комментарии и т. д. Это не просто импорт дампа MySQL, а скорее система контроля версий для базы данных. Например, при развертывании записи он также развернет метки для этой записи, если они еще не существуют в рабочей среде.

RAMP предназначен для развертывания контента, в отличие от развертывания кода, но я согласен, выглядит превосходно. Теперь у них есть демонстрация RAMP, где можно опробовать функционал.

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

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

Четыре месяца назад я не смог заставить этот плагин работать... И до сих пор он версии 0.1 на code.google

Еще одно платное решение: фреймворк темы Xtreme One выпустил версию 1.2 с Xtreme Backup, который позволяет "экспортировать или импортировать настройки ваших дочерних тем, макетов или виджетов со всеми их параметрами/содержимым в виде XML-файла."

После того как я некоторое время следовал этому ответу, я создал свой небольшой плагин — Pitta Migration. Причины следующие:
- Из всех опробованных здесь идей — самая простая — это настройки
WP_HOME
иWP_SITEURL
- Затем я использую их для установки двух соответствующих URL-адресов в таблице
wp_options
— это помогает, когда плагины/темы игнорируют эти константы - Это дает мне 100% уверенность в том, что именно изменяется в моей базе данных
- Также это работает кроссплатформенно (все эти bash-скрипты плохо работают в Windows)
- Легко понять, что делает плагин
- Не требуется никакой конфигурации, кроме двух констант — сделайте дамп базы данных (mysqldump) и импортируйте его в локальную базу, и плагин увидит, что константа и данные в таблице различаются, и обновит их, чтобы они соответствовали
- Никакого поиска и замены текста
- Нет риска испортить базу данных — я использую WordPress Database Object для выполнения двух обновлений и ничего более
- Он отлично работает с такими решениями, как WordPress Skeleton, где все можно хранить в системе контроля версий, а локальную конфигурацию можно задать отдельно
- Я разместил его в каталоге плагинов WordPress и на Github, так что он бесплатный, полностью открытый, его легко форкнуть и установить
- После установки о нем можно забыть, и он просто работает — он выводит небольшое уведомление о том, что база данных была изменена
- Он должен работать с любым процессом резервного копирования / FTP / восстановления

На мой взгляд, самый простой способ, которым я пользуюсь - это ручной перенос. Просто скопируйте папку wp-content и файл wp-config.php на новый хостинг. Экспортируйте базу данных со старого хостинга и импортируйте её в новую базу данных на новом хостинге.
В базе данных нового хостинга перейдите в таблицу wp-options и измените там URL сайта и URL блога на новый адрес хостинга вместо старого. Например, с http://localhost/wp на http://example.com.
Теперь в файле wp-config просто измените информацию о базе данных и пользователе на данные нового хостинга.
Войдите в новую админку wp-admin, перейдите в настройки и сохраните постоянные ссылки.
Готово. Я считаю, что это просто и не требует использования каких-либо плагинов.
Я пробовал разные плагины для переноса, и у всех были различные проблемы.
Поэтому я предпочитаю этот простой ручной метод переноса, который, на мой взгляд, гораздо удобнее.
