Migración de un website WordPress y cambio de dominio.

Voy a describir todo el proceso que realizo para cambiar un website wordpress de servidor y de dominio, este procedimiento en su mayoría se ejecuta por SSH.

En el host de origen situados en la carpeta que contiene el sitio en mi caso /var/www/weborigen vamos exportar nuestra base de datos:

mysqldump -uuser -p wp_database > wp_database_20240321.sql

Vamos a copiar el website desde var/www con rsync de servidor a servidor:

rsync -az -e "ssh -i key.pem" weborigen user@hostdestino.com:/var/www/webdestino

Salimos completamente del servidor de origen.

En el servidor de destino el sitio debe estar configurado en el webserver correspondiente, en mi caso Nginx. Debemos ingresar por ssh.

MySQL Servidor Destino. Necesitamos crear e importar la base de datos, hice una pequeña guía desde la creación hasta la importación y terminando la guía necesitamos ejecutar los siguientes querys:

# OJO Con este que ya lo ejecutamos en la guía solo cambié el path y el nombre del archivo
source /var/www/wedestino/wp_database_20240321.sql;

UPDATE wp_options SET option_value = replace(option_value, 'https://www.dominioorigen.com', 'https://www.dominiodestino.com') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = replace(guid, 'https://www.dominioorigen.com', 'https://www.dominiodestino.com');
UPDATE wp_posts SET post_content = replace(post_content, 'https://www.dominioorigen.com', 'https://www.dominiodestino.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value,'https://www.dominioorigen.com', 'https://www.dominiodestino.com');

Nuevamente en la terminal de Linux:

sudo chgrp -R www-data *
sudo chown www-data:www-data wp-content/uploads/
rm wp_database_20240321.sql

Editamos el archivo wp-config.php

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'dbdestino');
/** MySQL database username */
define('DB_USER', 'userwp');
/** MySQL database password */
define('DB_PASSWORD', '[password]');
/** MySQL hostname */
define('DB_HOST', 'localhost');

Ya no utilizo Apache, pero si tu lo utilizas deberías revisar el archivo .htaccess para asegurarte que todos los parámetros apunten al nuevo dominio.

Si crees que este procedimiento se puede mejorar, tiene algún error o vulnerabilidad escríbenos.