¿Cómo mover fácilmente una instalación de WordPress del entorno de desarrollo a producción?
Realizo el desarrollo en un servidor y uso un segundo para producción. Actualmente solo hago un volcado de la base de datos y luego busco y reemplazo los cambios de URL; después copio los archivos y importo el nuevo SQL.
¿Hay mejores formas de hacer esto?

@Insanity5902: La implementación de un sitio WordPress de un servidor a otro ha sido un dolor de cabeza desde el primer día que empecé a trabajar con WordPress. (A decir verdad, también fue un dolor con Drupal durante 2 años antes de empezar con WordPress, así que el problema ciertamente no es exclusivo de WordPress).
Me molestaba que cada vez que necesitaba mover un sitio tenía que dedicar tanto esfuerzo, a menudo duplicado, y eso me impedía desplegar en entornos de prueba con la frecuencia que hubiera preferido. Así que hace unos 4-6 meses empecé a trabajar en un plugin para resolver el problema de migración de hosting y mencioné mis ideas en el foro de WP Tavern.
Avancemos hasta hoy y básicamente lo tengo funcionando, y lo llamo convenientemente "WP Migrate Webhosts". Aunque el plugin todavía está en fase beta (probablemente incluso alpha), dada tu pregunta creo que estoy listo para que la gente empiece a probarlo.
El caso de uso previsto es:
- Primero el desarrollador sube todos los archivos modificados de temas y plugins vía FTP,
- luego carga la base de datos MySQL de desarrollo al servidor de pruebas en su totalidad y finalmente
- después ejecuta el plugin para migrar cualquier referencia del dominio anterior al nuevo. (Mi plugin no intenta resolver la fusión de nuevos campos o tablas de la base de datos con datos en vivo; ESO es un problema mucho más grande que no estoy seguro cómo resolver).
Puedes descargar el plugin desde mi sitio web y descomprimirlo en tu directorio de plugins (si no sabes cómo hacer esto, entonces este plugin no es para ti, porque requiere que alguien que sabe lo que está haciendo lo use). Mantendré este plugin en línea hasta que lo publique en WordPress.org, después de lo cual deberías buscarlo allí.
Para usarlo, tomas un enfoque diferente en tu wp-config.php
al normal, comentando los cuatro (4) defines DB_NAME
, DB_USER
, DB_PASSWORD
y DB_HOST
y en su lugar registrando los valores predeterminados para los hostings y luego registrando información sobre cada hosting en sí. Así es como se vería ese segmento de wp-config.php
(nota que la primera sección es el código innecesario comentado y también que configuré mi archivo hosts en mi máquina local con dominios de primer nivel .dev
no enrutables para facilitar el desarrollo diario. En Mac VirtualHostX hace esto muy fácil):
// ** Configuración de MySQL - Puedes obtener esta información de tu hosting ** //
/** El nombre de la base de datos para WordPress */
//define('DB_NAME', 'wp30');
/** Usuario de la base de datos MySQL */
//define('DB_USER', 'wp30_anon');
/** Contraseña de la base de datos MySQL */
//define('DB_PASSWORD', '12345');
/** Hostname de 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' => '', // '' si WordPress está instalado en la raíz
));
register_webhost('dev',array(
'name' => 'Ejemplo Desarrollo Local',
'host' => '127.0.0.1:3306',
'domain' => 'example.dev',
'rootdir' => '/Users/mikeschinkel/Sites/example/trunk',
));
register_webhost('test',array(
'name' => 'Ejemplo Servidor de Pruebas',
'rootdir' => '/home/example/public_html/test',
'domain' => 'test.example.com',
));
register_webhost('stage',array(
'name' => 'Ejemplo Servidor de Staging',
'rootdir' => '/home/example/public_html/stage',
'domain' => 'stage.example.com',
));
register_webhost('live',array(
'name' => 'Ejemplo Sitio en Vivo',
'rootdir' => '/home/example/public_html/',
'password' => '%asd59kar12*fr',
'domain' => 'www.example.com',
));
require_once(ABSPATH . 'wp-content/plugins/wp-migrate-webhosts/set-webhost.php');
Espero que esto sea (en su mayoría) autoexplicativo. Intenté hacer el código lo más limpio posible, pero desafortunadamente requiere esas dos líneas crípticas require_once()
antes y después del bloque de registro de hostings, ya que no había forma de "engancharme" a WordPress antes de que se llame a wp-config.php
.
Una vez que hayas actualizado tu wp-config.php
, simplemente puedes usar el acceso directo de URL wp-migrate-webhosts
para ir a la pantalla de administración así:
Lo anterior te llevará a una pantalla de administración como la siguiente, que tiene bastante texto descriptivo y te permite migrar DESDE cualquiera de los otros dominios de hosting con un solo clic después de seleccionar los dominios desde los cuales migrar (NOTA: este ejemplo muestra ir DESDE servidores de prueba/staging/producción hacia desarrollo local, pero ten la seguridad de que puede migrar A cualquier dominio donde se encuentre. ¡Esto también significa que el plugin será genial para tomar un sitio en vivo existente y rápidamente conseguir un entorno de desarrollo local funcionando!):
Por si no queda claro, "migración" en este contexto significa actualizar todas las referencias en la base de datos actual para que sean apropiadas para el hosting actualmente definido (y "actual" se detecta inspeccionando $_SERVER['SERVER_NAME']
).
Lo genial de este plugin es que implementa algunas migraciones básicas, pero cualquiera puede engancharse y realizar sus propias migraciones. Por ejemplo, si añades un plugin de galería que almacena rutas completas a imágenes en la base de datos, podrías engancharte a la acción migrate_webhosts
, a la que se le pasará el hosting "desde" y el hosting "hacia" cada uno como un array de metadatos, y podrás realizar lo que necesites en la base de datos usando SQL o cualquier función de la API de WordPress para hacer la migración. Sí, cualquiera de nosotros podría hacer esto sin el plugin, pero sin él, encontré que escribir todo el código necesario era más esfuerzo del que valía la pena. Con el plugin, es más fácil escribir estos pequeños hooks y terminarlo.
También podrías encontrar que mis migraciones fallan en casos extremos que no he probado, ¿y tal vez puedas ayudarme a mejorar el plugin? Cualquiera que quiera puede enviarme un correo a mi cuenta de gmail (mi alias es "mikeschinkel.")
Además, el plugin fue diseñado para aceptar metadatos de hosting definidos por el usuario, además de los que reconoce, como database
, user
, password
, host
, domain
, etc. Un ejemplo perfecto podría ser googlemaps_apikey
, donde puedes almacenar las diferentes claves API para cada dominio que tu plugin de Google Maps necesita para funcionar correctamente (¿quién de los que ha usado un plugin de Google Maps no ha desplegado una aplicación en un servidor en vivo y se ha olvidado de cambiar el código a la clave API correcta? Vamos, sé honesto... :) Con este plugin, un elemento googlemaps_apikey
en tu array register_webhost() y un pequeño hook personalizado migrate_webhosts
, ¡puedes eliminar eso como una preocupación!
Bueno, eso es todo. Estoy lanzando este plugin aquí en WordPress Answer's Exchange porque la pregunta de @Insanity5902 lo desencadenó. Déjame saber si es útil, aquí si es apropiado o por correo si no.
P.D. Si decides usar esto, recuerda que está en fase alpha/beta y eso significa que cambiará, así que prepárate para una pequeña cirugía si quieres usarlo ahora y luego usar la versión publicada una vez que haya sido probada por muchas manos.
P.P.D. ¿Cuáles son mis objetivos con esto? Me encantaría ver esto migrar al núcleo de WordPress para que todos tengan acceso a él. Pero antes de que eso pueda considerarse, mucha gente tiene que estar interesada en usarlo para asegurar que realmente resuelve más problemas de los que potencialmente podría crear. Así que si te gusta la idea, por supuesto úsalo y ayúdame a ganar impulso para una eventual y esperada inclusión en el núcleo de WordPress.

Buenas soluciones, tengo un par de preguntas: 1) ¿Todavía necesitas definir WP_SITEURL para acceder al área de administración? 2) ¿La herramienta se muestra solo para usuarios Administradores? (no estoy seguro si la sección de Herramientas se muestra para no administradores)

Hola @Insanity5902:
1) No es necesario configurar WP_SITEURL, el plugin lo hace por ti. En realidad lo estás configurando cuando "registras" un "dominio" y "sitepath" para un alojamiento web. En el funcionamiento normal de WordPress, WP_SITEURL debe configurarse ya sea en el código o en la base de datos para garantizar que nadie falsifique la URL y haga cosas nefastas debido a un valor inesperado en $_SERVER['SERVER_NAME']. El plugin WP Migrate Websites configura WP_SITEURL indirectamente basándose en $_SERVER['SERVER_NAME'], pero SOLO lo hará si el dominio actual coincide con uno de los dominios que has definido en tu archivo wp-config.php, nada más.

2) El acceso directo de URL que mencioné en realidad realiza una redirección a la consola de administración, por lo que es solo para personas que han iniciado sesión en el administrador. Todavía no tengo verificaciones específicas integradas solo para administradores. Nunca he añadido capacidades a un plugin, pero necesitaré investigar completamente cómo hacerlo en las próximas semanas, así que puedo trabajar en eso durante el próximo mes. Sin embargo, el plugin no es destructivo; SOLO puede migrar al dominio actual y el proceso es repetible, por lo que incluso si un no administrador accediera, realmente no podría hacer ningún daño con él, al menos no que yo pueda imaginar.

@Mike: ¿Podrías agregarlo al repositorio de plugins de WordPress? Creo que eso generaría retroalimentación adicional y apoyo de desarrolladores.

@harke - Planeo hacerlo cuando esté más maduro. Quiero que lo usen entre 5-10 personas para asegurarme de que sea robusto y validar que los casos de uso sean correctos antes de exponerlo al sistema de calificaciones del foro de plugins, ya que creo que este plugin tiene potencial para ser importante si se gestiona adecuadamente. También quiero documentarlo completamente antes de publicarlo, y la documentación me obligará a validar muchas de las suposiciones que hice durante el desarrollo.

Gracias por crear este plugin. Lo estoy probando en este momento y parece funcionar muy bien. Me encantaría enviarte comentarios, ¿cuál es el mejor lugar para hacerlo?

@Sam Murray-Sutton - Veo en mi bandeja de entrada que descubriste cómo enviarme un correo electrónico, pero si otros quieren hacerlo, mi correo está en mi página de perfil.

Definitivamente voy a probar esto. Actualmente estoy configurando mi primer entorno completo y espero poder vincular esto con mi repositorio de Bitbucket. De todos modos: Muchas gracias por a) explicar bien (de nuevo) y b) compartir cosas geniales (de nuevo). ¡Te deseo lo mejor, Mike!

Este es esencialmente el mismo proceso que seguimos con nuestro wp-config.php. Poder implementar código en un servidor de staging sin arruinar todo es la única forma de trabajar. No hacemos pull y push de la base de datos a través de WP, lo hacemos con un cliente mysql, que es igual de efectivo, aunque un poco más lento.

@mike ¿cómo podría usar este método para migrar un solo sitio fuera de una configuración multisitio (local)?

@MikeSchinkel - quizás podrías incluir esto también: http://wordpress.stackexchange.com/questions/24314/wordpress-database-synch-between-dev-and-prod/24982#24982

/wp-migrate-webhosts produce un error 404, y /wp-admin muestra 'error al establecer la conexión con la base de datos'

Cuando es posible, configuro WP_HOME
y WP_SITEURL
en el archivo wp-config.php
. Esto, combinado con un volcado e importación de la base de datos, es la solución más simple de todas las que conozco.
http://codex.wordpress.org/Changing_The_Site_URL#Edit_wp-config.php

¿Cuándo no sería posible configurar estos? Esto suena un poco más simple que cambiar cosas en la base de datos.

@jfklein Casi siempre trabajo con una Red de WordPress, que es incompatible con estas constantes.

Haciendo lo mismo. Lamentablemente, no todos los temas respetan esto. Por ejemplo, 'Responsive Theme' de ThemeID. Buscar en el volcado/todas las tablas por 'http://localhost' (o el nombre local que hayas elegido), especialmente en wp_options y hacer búsquedas y reemplazos suele ser inevitable.

@FranKee He creado un plugin https://wordpress.org/plugins/pitta-migration/ que usa las constantes para actualizar la tabla wp_options, lo cual debería cubrir la mayoría de temas y plugins

@icc97: Genial. Le echaré un vistazo. PD: Bonita imagen de cabecera, retrata bien la situación.

Mi truco favorito; agregar una configuración a tu /etc/hosts
para que el dominio de producción apunte a tu máquina de desarrollo, solo en tu equipo. Para implementar en producción, sincronizas todos los archivos con rsync y transfieres la base de datos.
Los riesgos de esta estrategia son claros; podrías confundir tu entorno de desarrollo con el de producción.
Aún así, es una solución fácil.

¡Sí! ¡Me alegra no ser el único que pensó en eso! Cualquier diferencia entre desarrollo y producción es mala. Eliminar esa diferencia por completo es mucho mejor que tratar de solucionarla. Y esta configuración no requiere ningún trabajo. Incluso se pueden hacer pruebas en una máquina virtual con un archivo hosts modificado si es necesario.

Me gusta mucho este método, pero ¿cómo manejas el empuje/extracción de la base de datos?

Quería algo similar cuando migré a WP hace unos meses, así que escribí un script de shell bastante simple que utiliza rsync y mysqldump sobre ssh:
http://snarfed.org/sync_wordpress
No es sofisticado ni basado en web, pero estoy contento con él.

WP Engine es un nuevo servicio que ofrece "Entorno de Pruebas con Un Solo Clic":
WPEngine tiene una función exclusiva llamada "staging". Así es como funciona: Antes de realizar un cambio riesgoso en tu blog, haz clic en el botón "snapshot". Creamos una copia completa de tu blog y la configuramos en un área separada y segura. Puedes hacer cualquier modificación; nada estará en vivo. Solo cuando estés listo para publicar los cambios, los aplicas en tu sitio principal.
Parece una forma muy sencilla de pasar rápidamente del desarrollo a producción, especialmente con un sitio que ya está en vivo.

¡Esa es una opción realmente muy buena y será excelente para mucha gente! Por supuesto, no funciona para URLs incrustadas ni ayuda a las personas que desarrollan localmente para que puedan usar un IDE con un depurador. Ahora, si WPEngine puede crear una interacción que también combine un despliegue local, entonces realmente será algo increíble (¿Technosailor, estás escuchando?)

La función de snapshot copia únicamente desde producción a staging, no al revés. Es genial para probar cambios, pero no ayudará para implementar en producción.

@sam en realidad, recientemente comenzaron a implementar la capacidad de copiar desde staging a producción. http://wpengine.com/2013/04/user-portal-v2-and-staging-to-production/

Plugin Duplicator: Aquí hay un plugin en el que he estado trabajando. Actualmente está en fase beta pero cumple su función en la mayoría de los sitios. Por ahora está orientado a instalaciones pequeñas de WordPress. http://wordpress.org/extend/plugins/duplicator/
Recursos: Puedes encontrar recursos adicionales para el plugin aquí: http://lifeinthegrid.com/duplicator/
Comunidad: ¡Por favor, háznos saber sobre tus éxitos o cualquier problema que puedas encontrar! Para gestionar mejor los diferentes hilos, por favor publica los problemas en los foros de plugins de WordPress.org. No publiques ningún dato de registro del plugin en los foros públicos. Los datos de registro pueden enviarse a nuestro sitio de soporte.

Podrías echar un vistazo a un producto de iThemes llamado BackUpBuddy. Solo lo he usado un par de veces, cada vez tuve algún problemilla, pero en general parece prometedor.

A partir del 2017, estas son las dos mejores formas que he encontrado para manejar la transferencia de una base de datos de WordPress desde el desarrollo a producción.
WP Migrate DB Pro / WP Sync DB
https://wordpress.org/plugins/wp-migrate-db/
Estos plugins de WordPress te permiten empujar, jalar y sincronizar tablas de bases de datos entre instalaciones de WordPress. Esto es mucho mejor que un buscar/reemplazar por muchas razones porque:
- Exporta tu base de datos como un volcado de datos MySQL (similar a phpMyAdmin)
- Realiza un buscar y reemplazar en URLs y rutas de archivos
- Maneja datos serializados
- Te permite guardarlo en tu computadora como un archivo SQL
Soy partidario de que se pague por el trabajo que uno hace, así que te recomiendo que apoyes al Sr. Brad Touesnard y compres una licencia del producto original. WP Sync DB es una réplica y siempre está atrasado en soporte como resultado. Con este plugin el proceso es extremadamente simple:
- Instala/activa el plugin en tu localhost y entorno de producción
- Configura una transferencia de empuje desde tu localhost/servidor de desarrollo a tu producción
- Llena las reglas sobre qué tablas transferir y define reglas de buscar y reemplazar a realizar
- ¡Eso es todo!
Database Search & Replace for WordPress Databases by InterconnectIT
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
Esta herramienta gratuita no es un plugin, sino que se instala en el directorio raíz de tu instalación de WordPress en producción. No es tan buena como WP Migrate DB Pro porque requiere algunos pasos manuales, pero aún así es una gran opción que funciona consistentemente. Cuando usas este enfoque el proceso es así:
- Haz una copia de seguridad de tu base de datos local, esto es absolutamente necesario ya que la reimportaremos pronto
- Añade el script a una carpeta en el directorio raíz de tu instalación
- Ejecuta el buscar y reemplazar en tu base de datos
- Exporta tu base de datos y guárdala para tu entorno de producción
- Reimporta tu copia de seguridad del paso #1 para restaurar tu localhost
- Conéctate a tu base de datos de producción y haz una copia de seguridad (como siempre deberías hacer antes de estas cosas)
- Importa la exportación que hicimos DESPUÉS de ejecutar la rutina de buscar/reemplazar del paso #4
Puedes usar un enfoque más rápido, pero implica tiempo de inactividad para tu sitio en producción, lo cual en mi opinión es inaceptable. Por algo le llamamos producción, ¿verdad?

Esto parece prometedor. Estamos trabajando en algunos scripts para manejar la migración de algunos datos, como wp-options, cambiando rutas en la base de datos y copiando medios.
El problema que tengo es que el sitio en vivo sigue creciendo mientras el otro está en desarrollo. Un sitio en el que trabajamos tiene 20 publicaciones al día y más de 3,000 comentarios diarios. Eso es demasiada información para mover con phpmyadmin o mediante la línea de comandos. Además, mover los datos siempre causa problemas de UTF por alguna razón.
También, ahora que parece que las opciones de menú se almacenan en la base de datos, tengo aún más con qué lidiar.
Subo todo mi código a SVN y lo despliego vía FTP desde el servidor (Beanstalk). Sin embargo, esto no realiza los cambios en la base de datos por mí ni activa nuevos plugins.
Mi plan actual es crear un archivo de manifiesto mientras desarrollo para realizar todos mis cambios en el sitio en vivo.
Por ejemplo, el archivo tendría líneas legibles para humanos que incluirían:
- Plugins para activar
- Opciones de wp-options para migrar
- Imágenes para mover
- Páginas para transferir
Luego, mi plugin detectaría el archivo de manifiesto y haría todos los cambios en el sitio de staging.
Una vez probado y seguro de haber capturado todo, podría estar seguro de que funcionaría en producción.
Este plugin es todavía solo una idea, pero ya tengo algo de código escrito para él.
Además, si quieres hacer cambios solo a la URL en tu base de datos, puedes usar el siguiente SQL:
Solo reemplaza $old$
con el dominio antiguo y $new$
con el nuevo:
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$') ;

Solo una nota, mi llamada SQL podría dañar tus datos serializados.
s:14:blogs.prod.com tiene la longitud codificada como 14. Después de ejecutar el código, ahora tenemos
s:14:dev.prod.com
lo cual está corrupto. Debería ser
s:12:dev.prod.com
usar con precaución.

Estoy abordando personalmente este problema con mi proyecto en Github, llamado Autopress. Todavía no tengo una solución perfecta, pero me estoy acercando, especialmente con el plugin wpstage de la gente de wpengine.

Acabo de revisar tu script. Buen trabajo. Si entendí bien, instala un WP nuevo en el servidor. La pregunta aquí es cómo migrar del entorno de desarrollo a producción. ¿Puede ayudar con eso?

¿Es este? http://github.com/vluther/Autopress Sugiero crear enlaces en tus respuestas para que la gente pueda hacer clic directamente.

@Mike Lee: Sí, puedes votar a favor los comentarios. Mira, yo voté el comentario de artlung. Busca la flecha hacia arriba al pasar el cursor a la izquierda del comentario.

Estoy trabajando en una forma de mantener todo bajo control de versiones y luego pasar de desarrollo a producción. Ya he podido hacerlo sin problemas en algunos sitios, pero todavía hay algunos ajustes que necesito resolver.

No estoy seguro si esto es lo que buscas, pero hay un plugin de WP Engine que se usa para migrar sitios entre hosts. Se llama Snapshot (Enlace directo).

http://plugins.wpengine.com/wpengine-snapshot.zip ya no está disponible :(

Dos proyectos de Google Summer of Code que tienen un objetivo similar:
- Migración Automática (GSoC 2010)
- WordPress Move (propuesta) (GSoC 2011)

He estado usando http://wordpress.org/plugins/wp-clone-by-wp-academy/. ¡Funciona muy bien!
Solo 3 pasos:
- Instala el plugin en ambos sitios.
- Usa el plugin para generar una copia de seguridad en el sitio antiguo.
- Toma la URL de respaldo que te proporciona e ingrésala en la página del plugin del nuevo sitio, haz clic en ir, ¡y tu migración estará completa en solo unos segundos!
Ajusta automáticamente todas las URLs, incluyendo reemplazos en cadenas serializadas, por lo que no hay riesgo de perder configuraciones de widgets, etc.
Los únicos problemas que he tenido son con algunos sitios con bases de datos más grandes (~300MB), que causaron tiempos de espera en la ejecución de scripts PHP durante la importación de la copia de seguridad del sitio.

Normalmente inicio sesión en phpMyAdmin, subo la base de datos y edito los contenidos de wp_options>siteurl y wp_options>home para establecer el dominio esperado. Si necesitas actualizar las URLs dentro del contenido de tus entradas y páginas, puedes hacer una búsqueda/reemplazo de la URL y la ruta de medios/uploads en el archivo .SQL antes de subirlo. Es un trabajo rápido.

Utilizo el comando de exportación de Subversion para instalar los archivos de WordPress (http://core.svn.wordpress.org/tags//) así como todos los plugins en el repositorio (http://plugins.svn.wordpress.org//tags//), luego simplemente comprimo el tema y los plugins personalizados y los instalo de manera normal. Una vez que todo está funcionando sin contenido, exporto la base de datos de prueba y hago una búsqueda/reemplazo de la URL Y la ruta del archivo (almacenada para medios) e importo en una base de datos vacía, luego solo cambio la información de la base de datos en wp-config.php. Generalmente me toma entre 10 a 20 minutos.

Aunque no faltan buenas soluciones aquí, en el espíritu de compartir pensé en agregar mi script de despliegue bash a la lista: https://github.com/jplew/SyncDB
SyncDB es un script bash de despliegue diseñado para eliminar la monotonía de sincronizar versiones locales y remotas de un sitio Wordpress. Permite a los desarrolladores que trabajan en un entorno local (ej. MAMP) "enviar" o "traer" cambios rápidamente hacia o desde su servidor de producción con un solo comando en la terminal.
Este script funciona bien con WP-Skeleton de Mark Jaquith, y utiliza mysqldump
, git
y rsync
para sincronizar todo tu sitio—base de datos, código y archivos multimedia—en dos sencillos pasos:
./syncdb
git push hub master

Esta es la forma más fácil de todas:
https://themes.artbees.net/docs/website-migration/
Solo toma dos clics. Uno para exportar, otro para importar.
Es posible utilizando el plugin All in one WP Migration. El enlace de arriba muestra cómo usarlo.

Otra herramienta útil para manejar migraciones de servidores para sitios es la CLI de WordPress, este artículo tiene una buena descripción general de lo que puede hacer, pero específicamente la sección de "Buscar y Reemplazar" es útil para encontrar todas las referencias a la URL antigua o de desarrollo:

Dado que ejecuto mis sitios en IIS (también ejecuto ASP.NET, así que necesito Windows) uso WebPI de Microsoft para instalar una nueva instancia, luego copio la plantilla y utilizo la función de importar/exportar para transferir los datos.
No es perfecto, pero todo el proceso toma menos de una hora.
Obviamente sería ideal tener una solución de un solo clic, pero esto es lo que he encontrado como más sencillo para mi caso.

He estado usando el plugin backupbuddy por un tiempo ahora. Te permite hacer una copia de seguridad de la base de datos y todos los archivos, descargarla como un zip o enviarla directamente a otro servidor vía FTP. También hace la búsqueda y reemplazo de URLs por ti. Normalmente me toma unos 5 minutos completar todo el proceso. Y como todos los archivos están comprimidos, el proceso de subida/descarga es mucho más rápido. Y no, no trabajo para ellos, pero este plugin realmente ha hecho todo este proceso mucho más fácil.

Permíteme compartir uno de mis favoritos :-)
// bifurcación probada local<->en vivo (cubre pruebas en red local, ej. desde dispositivos móviles):
$GLOBALS['is_local'] =
in_array( $_SERVER['REMOTE_ADDR'], array("127.0.0.1","::1")) || // localhost simple (IPv4 IPv6)
$_SERVER['HTTP_HOST'] == 'local.workblog' || // llamado por nombre local (ajustar)
substr($_SERVER["REMOTE_ADDR"],0,8) == '192.168.'; // dispositivo (móvil) en red local
$table_prefix = NULL; // asegurar ámbito
if ( $GLOBALS['is_local'] ) // bifurcación LOCAL ------------------------
{
....
}
else // bifurcación EN VIVO/ETAPA -------------------
{
...y luego continúas desde ahí. DB_NAME, DB_USER... table_prefix. Personalmente activo ALTERNATE_WP_CRON en local (para evitar algunas advertencias molestas), WP_DEBUG apagado en ambos (si no eres desarrollador) o solo en vivo (si lo eres), otro ini_set('display_errors', '0');
para producción también puede ser útil, y finalmente, como mencioné antes: WP_HOME y WP_SITEURL con la URL local/real respectiva.
Eso es básicamente todo, nada por encima de la clásica línea de WordPress '¡Eso es todo, deja de editar!'...
La parte de 192.168. te permite hacer pruebas locales (ej. desde tablets o teléfonos) dentro de tu red local)
El $GLOBALS['is_local'] también puede ser útil en el desarrollo de tu tema, para algo de salida de depuración extra, etc...

Puedes usar el esqueleto de WordPress wp-config.php que establece una constante WP_LOCAL_DEV
para lograr algo similar

RAMP es un nuevo plugin de despliegue de contenido de Crowd Favorite, y parece realmente elegante. Sin embargo, cuesta $250, así que aún no lo he probado. Podría pagarse solo con el tiempo ahorrado, así que lo estoy considerando.
La gran ventaja que tiene sobre la mayoría de los otros métodos mencionados es que puede fusionar inteligentemente publicaciones, comentarios, etc. No es solo importar un volcado de MySQL, es más como un control de versiones para la base de datos. Por ejemplo, al desplegar una publicación, también desplegará las etiquetas de esa publicación si no existen ya en producción.

RAMP es para despliegue de contenido, en lugar de despliegue de código, pero estoy de acuerdo, se ve excelente. Ahora tienen una demo de RAMP configurada para que puedas probar las características.

Esto puede que no existiera cuando hiciste la pregunta, pero he estado usando un servicio llamado Blogvault durante un par de meses y lo ha hecho impecablemente. Probablemente he realizado más de 50 migraciones (entre dominios, subdominios y distintos proveedores de hosting), sin ningún problema y en muy poco tiempo.
Es un servicio de pago (por dominio/mes), pero no es muy costoso.

Un compañero de trabajo encontró esto. Concepto interesante, aunque parece que no funciona entre servidores. Todavía lo estoy explorando, pero parece que podría funcionar muy bien para una instancia de staging

Hace cuatro meses, no podía hacer que este plugin funcionara... Y todavía está en la versión 0.1 en code.google

Otra solución de pago: el framework de temas Xtreme One lanzó la versión 1.2 con Xtreme Backup que te permite "exportar o importar la configuración de tus Childthemes, Diseños o Widgets con todos sus ajustes/contenido como archivo XML."

Después de seguir esta respuesta por un tiempo, he creado mi propio pequeño plugin: Pitta Migration. Las razones son:
- De todas las ideas probadas aquí, la más simple son las opciones
WP_HOME
yWP_SITEURL
- Luego uso estas para establecer las dos URLs coincidentes en
wp_options
, lo que cubre cuando los plugins/temas ignoran estas configuraciones - Esto me da un 100% de confianza en lo que se está cambiando en mi base de datos
- También funciona multiplataforma (todos esos scripts bash no funcionan bien en Windows)
- Es fácil entender lo que hace el plugin
- No hay configuración más allá de las dos constantes: haz un mysqldump y una importación mysql a tu base de datos local y el plugin detecta que la constante y la tabla difieren y las actualiza para que coincidan
- No hay búsqueda y reemplazo de texto
- No hay posibilidad de dañar tu base de datos: uso el Objeto de Base de Datos de WordPress para hacer solo dos actualizaciones y nada más
- Funciona bien con cosas como WordPress Skeleton donde puedes tener todo bajo control de código fuente y configurar un entorno local
- Lo he puesto en el Directorio de plugins de WordPress y en Github para que sea gratuito, totalmente de código abierto, fácil de bifurcar y sencillo de instalar
- Una vez instalado, puedes olvidarte de él y simplemente "funcionará": te muestra un pequeño aviso para indicar que la base de datos ha sido modificada
- Debería funcionar con cualquier proceso de copia de seguridad/FTP/restauración

En mi opinión, la forma más sencilla que sigo es la transferencia manual. Simplemente copia la carpeta wp-content y el archivo wp-config.php al nuevo host. Exporta la base de datos del host antiguo e impórtala en una nueva base de datos del nuevo host.
En la base de datos del nuevo host, ve a la tabla wp-options y allí cambia la URL del sitio y la URL del blog a la dirección del nuevo host desde el host antiguo. Por ejemplo, de http://localhost/wp a http://ejemplo.com.
Ahora, en el archivo wp-config.php, solo cambia la información de la base de datos y el usuario con los datos del nuevo host.
Inicia sesión en el nuevo wp-admin y ve a ajustes para guardar los enlaces permanentes.
Ya está listo. Creo que esto es simple sin usar ningún plugin.
He probado diferentes tipos de plugins y todos tienen muchos tipos de problemas.
Así que prefiero esta simple transferencia manual que creo que es más fácil.
