Migrar Blog de WordPress de una VM Vieja a una Nueva en Google Cloud

Resumen

Logré migrar mi viejo blog de WordPress de una máquina virtual (VM) con Debian 10 a una nueva, ambas en Google Cloud. La idea era rescatar mi blog de un disco duro antiguo e instalarlo en una nueva VM con un sistema operativo más moderno (Debian 12) y software actualizado (Apache, PHP y MariaDB).


Paso 1: Montar el disco antiguo y rescatar los datos

Lo primero fue conectar el disco duro antiguo a mi nueva VM. Esto nos permitió acceder a todos los archivos y la base de datos que necesitaba.

  1. Conecté el disco y lo monté:Bash# El disco se conectó a /dev/sdb, así que creé el directorio sudo mkdir /old-disk # Luego lo monté sudo mount /dev/sdb1 /old-disk
  2. Arrancamos MariaDB del disco antiguo:Para poder exportar la base de datos, tuve que arrancar el viejo servidor de MariaDB, que estaba en el disco antiguo. Esto fue un poco complicado porque el nuevo sistema ya tenía su propio MariaDB, así que lo arrancamos en un puerto diferente y con su propio socket.Bash# Arrancamos el servicio sudo -u mysql /usr/sbin/mysqld --basedir=/usr --datadir=/old-disk/var/lib/mysql --socket=/old-disk/var/run/mysqld/mysqld.sock --port=3307 & Aquí nos encontramos con el primer problema: el servidor nos pedía la contraseña a pesar de que la pasábamos en el comando, ¡así que simplemente la escribí cuando la pidió!
  3. Hicimos el dump de la base de datos:Una vez que el servidor estaba en marcha, usamos mysqldump para crear un archivo SQL con todos los datos de mi blog.Bashsudo mysqldump --socket=/old-disk/var/run/mysqld/mysqld.sock --port=3307 -u wordpress -p wordpress > /home/user/wordpress_db.sql El comando nos mostró muchas advertencias, pero al final funcionó. El archivo wordpress_db.sql se creó con éxito.
  4. Copiamos los archivos de WordPress:Copiar solo el directorio de WordPress hubiera sido un error. Al revisar, notamos que el archivo index.php en el directorio principal era el punto de entrada, así que copiamos todo el directorio del sitio.Bashsudo cp -R /old-disk/var/www/parismsc.net /home/user/

Paso 2: Instalar y configurar el servidor web en la nueva VM

Con los archivos y la base de datos listos, era hora de configurar el nuevo entorno.

  1. Instalamos Apache2 y PHP-FPM:Bashsudo apt-get install -y apache2 php-fpm libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc Decidimos usar PHP-FPM en lugar del viejo libapache2-mod-php por ser más moderno y seguro.
  2. Configuramos los permisos:Para que el servidor Apache pudiera leer y servir los archivos, cambiamos el propietario y los permisos del directorio.Bashsudo chown -R www-data:www-data /home/user/parismsc.net sudo chmod -R 755 /home/user/parismsc.net
  3. Configuramos el Host Virtual:Creamos un archivo de configuración para nuestro sitio web, habilitamos los módulos de Apache, y lo activamos.Bashsudo nano /etc/apache2/sites-available/parismsc.net.conf # Contenido del archivo... sudo a2enmod rewrite sudo a2enconf php8.2-fpm sudo a2ensite parismsc.net.conf sudo a2dissite 000-default.conf sudo systemctl restart apache2
  4. Activamos HTTPS con Certbot:Usamos Certbot para obtener un certificado SSL de Let’s Encrypt y asegurar nuestro sitio. Tuvimos que correr Certbot dos veces, porque la primera vez nuestro archivo de host virtual tenía reglas de redirección que causaron un conflicto. Después de limpiar el archivo, funcionó perfectamente.Bashsudo certbot --apache

Paso 3: El último gran problema y su solución

Una vez que todo estaba en su lugar, mi blog todavía mostraba un “Internal Server Error” cuando intentábamos entrar al panel de administración. Los logs de Apache nos dieron la pista:

Invalid command ‘php_value’, perhaps misspelled or defined by a module not included in the server configuration.

¡Resulta que la configuración vieja de WordPress en el archivo .htaccess estaba usando una directiva de PHP que ya no era compatible con nuestro nuevo entorno de PHP-FPM!

  1. Eliminamos la directiva php_value del .htaccess:Borramos la línea del archivo que estaba causando el problema.Bashsudo nano /home/user/parismsc.net/html/wordpress/.htaccess # Borramos: php_value upload_max_filesize 40M
  2. Configuramos el valor en el php.ini:Movimos la configuración a su lugar correcto en el archivo php.ini, que es la forma adecuada de hacerlo con PHP-FPM.Bashsudo nano /etc/php/8.2/fpm/php.ini # Ajustamos: upload_max_filesize = 40M

Paso 4: ¡Blog funcionando y actualizado!

Después de estos pasos, el blog funcionó. Aún se ve un poco mal porque la plantilla y algunos plugins son viejos, pero ahora puedo entrar al panel de administración para actualizar WordPress y su contenido. Esto asegura que el blog sea más seguro y compatible con el nuevo entorno.

En resumen, la migración fue un éxito, y los problemas que surgieron nos enseñaron mucho sobre cómo funciona cada componente del stack LAMP (Linux, Apache, MariaDB, PHP). ¡Espero que mi experiencia les sirva!