Hay muchas opciones para copiar una web entre un hosting y otro, entre diferentes servidores, crear una copia en local, etc.
Los métodos que más suelo utilizar, son en primer lugar GridPane si son webs albergadas en mi servicio de hosting personalizado. ManageWP para otras webs, Migrate Guru, WPvivid Backup Plugin o en ocasiones All-in-One WP Migration.
Pero sin lugar a dudas, el método que más utilizo y que nunca falla, ya sea una web de 50 MB o de 600 GB, es el método manual y que es lo que voy a describir brevemente aquí.
Se puede exportar e importar una web de manera manual de varias formas (FTP, SSH, Panel del hosting, un backup previo de ManageWP, etc…). Aquí voy a mostrar el método mediante WP-CLI y SSH.
Si vuestro proveedor de hosting no os ofrece acceso SSH y WP-CLI, mi recomendación es que vayáis buscando ya un nuevo proveedor antes de seguir leyendo este artículo.
Exportando la web
Una vez nos conectemos al servidor origen mediante SSH y nos situemos en el directorio raíz de la web, primero vamos a ver los datos de la web para comprobar que es la correcta, para lo que ejecutamos:
wp config list
Y veremos los datos de la misma:
Si estamos en la página web adecuada y todo está en orden, procederemos a exportar la base de datos:
wp db export --add-drop-table
Y nos exportará la base de datos en el formato {dbname}-{Y-m-d}-{random-hash}.sql
Ahora comprimiremos los archivos para enviar y según la web tenemos varias opciones:
- Comprimir el archivo SQL y la instalación completa de WordPress.
- Comprimir en un archivo la base de datos (volcado SQL) y en otro la instalación completa de WordPress.
- Incluir el archivo SQL en la carpeta
wp-content
y comprimir todo en un archivo. - Comprimir en un archivo la BD (SQL) y en otro la carpeta
wp-content
.
Dependiendo de la estrategia utilizada, utilizaremos uno u otro y para ello podemos utilizar tar y gz o utilizar zip.
tar -czvf web_migrada.tar.gz carpeta_sitio_web
zip -r web_migrada.zip carpeta_sitio_web
Ahora subimos el archivo o archivos con los contenidos y base de datos al nuevo servidor, ya sea por FTP, SFTP, SCP o el gestor de archivos de la nueva web.
Por SCP sería:
scp web_migrada.tar.gz usuario@direccion_servidor:/ruta/destino
Importando la web
Ahora que tenemos el archivo (o archivos) en el nuevo hosting, nos queda descomprimirlo y mover la carpeta wp-content
a su ruta correspondiente o toda la instalación si queremos copiar el WordPress completo (otra versión, carpetas especiales, etc.), para lo que descomprimimos según sea tar.gz
o zip
:
tar -xzf web_migrada.tar.gz
// Si lo queremos descomprimir a una capeta temporal:
// If we want to decompress it to a temporary folder:
tar -xzf web_migrada.tar.gz -C tmp
unzip web_migrada.zip
// Si lo queremos descomprimir a una capeta temporal:
// If we want to decompress it to a temporary folder:
unzip web_migrada.zip -d tmp
Ahora que ya tenemos los archivos en su sitio original, vamos con la base de datos.
Lo ideal es que realices una copia de la BD actual y elimines todas las tablas (este comando elimina la Base de Datos completa y la vuelve a crear):
wp db reset
Y ahora importamos la Base de Datos que hemos subido al hosting y descomprimido en el paso anterior:
wp db import prueba-2023-09-10-5a4e7a3e9a3c0f8b2d3df5b9d7e8e1.sql
Una vez importada la Base de Datos nos queda sustituir las antiguas URLs por las nuevas y de paso también podemos comprobar si hay URLs con http en lugar de https o con www si nuestro dominio no lo tiene o viceversa:
wp search-replace 'https://web_antigua.test' 'https://web_nueva.test'
wp search-replace 'http://web_antigua.test' 'https://web_nueva.test'
wp search-replace 'https://www.web_antigua.test' 'https://web_nueva.test'
wp search-replace 'http://www.web_antigua.test' 'https://web_nueva.test'
Incluso podíamos haber exportado de la web anterior con el reemplazo realizado (wp search-replace 'web_antigua' 'web_nueva' --export=database_new_export.sql
) o podemos probar las sustituciones sin realmente ejecutarlas en la BD (wp search-replace 'https://web_antigua.test' 'https://web_nueva.test' --dry-run
).
Ahora nos queda borrar caché de objetos y recargar las reglas rewrite:
wp cache flush
wp rewrite flush
Conclusiones y posibles errores
Este método es el más rápido, efectivo y «seguro». Seguro si sabes bien lo que haces, si no también puede ser el más peligroso y propenso a fallos, e incluso eliminar una instalación completa.
También se podría haber exportado WordPress mediante un archivo WXR, lo que sería muy útil para exportar contenidos y no llevar basura acumulada, pero no es el propósito de esta entrada.
Si tenemos problemas, lo primero que deberemos comprobar es si hemos traído plugins de otro hosting que no son compatibles con este, must use plugins (carpeta mu-plugins
), hay rutas fijas que no coinciden con las del nuevo hosting o las configuraciones del archivo wp-config.php
que no sean las correctas.
¡¡¡ Buenas migraciones !!! Y recuerda: nunca hagas deploy en un viernes ni tampoco migres en viernes (aunque yo lo hago solo para llevar la contraria).