Guía de despliegue

Preproducción WordPress de cliente: montarla y probar antes

Desplegar en un VPS Cloud →

Tutorial

Preproducción WordPress de cliente: montarla y probar antes

Despliegue12 min de lectura10 pasos

Una actualización del núcleo o de un plugin se juega en segundos y a veces se paga en horas, delante de un cliente que vende en línea. Aun así, una preproducción mal aislada es peor que ninguna: se indexa, envía correos reales a los clientes del sitio o pisa las URL de producción al volver. Esta guía monta paso a paso una copia segura de un sitio WordPress de cliente, prueba las actualizaciones una a una, lee los errores en `debug.log` y traslada los cambios a producción sin pisar la base de datos real y con una vuelta atrás lista.

Contenido· Por qué una preproducción y no probar en el sitio en línea1/14
  1. 01Por qué una preproducción y no probar en el sitio en línea
  2. 02Lo que le aporta la preproducción
  3. 03Requisitos con cifras antes de copiar
  4. 04Montar la preproducción, paso a paso
  5. 05Aislar de verdad: el noindex no basta
  6. 06Neutralizar correos, pagos y tareas programadas
  7. 07Lista de comprobación antes de tocar un solo plugin
  8. 08Probar las actualizaciones, una a una
  9. 09Cuando la actualización rompe: leer debug.log
  10. 10Solución de problemas: los otros síntomas que sí aparecen
  11. 11Archivos o base: qué se traslada y cómo
  12. 12Pasar a producción y poder volver atrás
  13. 13El reflejo de endurecimiento
  14. 14Una rutina que aguanta a escala de cartera

Por qué una preproducción y no probar en el sitio en línea

Un plugin de formularios que ya no se inicia, un tema que pierde su maquetación, la pantalla «Ha habido un error crítico en este sitio»: estos fallos llegan tras una actualización que parecía inofensiva. Con tres sitios que gestionar, basta la prudencia. Con treinta, se actualiza a ciegas o se deja de actualizar, y entonces lo que cuesta es la vulnerabilidad sin corregir.

Una preproducción es una copia viva del sitio, en una dirección distinta, con su propia base de datos. Se puede romper lo que se quiera, leer los errores, corregir y luego repetir en producción el paso ya validado. No sustituye a la copia de seguridad: hace que rara vez haga falta usarla.

Lo que le aporta la preproducción

  • Actualizaciones sin sorpresas — cada cambio de núcleo, tema o plugin se ve en pantalla antes de llegar a los visitantes.
  • Un diagnóstico legible — los errores van a un registro, no delante del cliente, y la causa se encuentra antes de que llame.
  • Una revisión compartida — el cliente o su jefe de proyecto valida en una dirección aparte, sin tocar el sitio público.
  • Un diario de cambios — anota la versión anterior y la nueva de cada plugin, y repite exactamente lo mismo en producción.
  • Un ensayo de novedades — tema nuevo, constructor de páginas nuevo, módulo de pago nuevo: todo se juzga sobre una copia.
  • Una vuelta atrás preparada — la copia de seguridad se hace y se comprueba antes de la prueba, no después del incidente.

Requisitos con cifras antes de copiar

Cuente tres veces el tamaño del sitio en línea en espacio de disco: el sitio, su copia y la exportación de la base. Mida wp-content con du -sh wp-content y la base en phpMyAdmin o con wp db size. Prevea un subdominio por cliente, por ejemplo staging.your-domain.com, y la misma versión de PHP que producción: una preproducción con un PHP más reciente valida una configuración que no es la del cliente. Esa versión se lee en Herramientas › Salud del sitio › Información, y las versiones aún soportadas se mantienen al día en php.net/supported-versions.php.

Hace falta además un terminal con wp-cli (SSH en una cuenta que lo permita, o un VPS). Esta guía describe la copia manual, primero los archivos y luego la base, que muestra exactamente qué se copia. Si WP Toolkit está disponible en su cuenta, su clonado produce esa copia por usted (consulte la guía «Instalar WordPress desde cPanel»); el resto de la guía (noindex, autenticación, correos cortados, pruebas) se aplica entonces igual. Para instalar un sitio nuevo desde cPanel, consulte la guía dedicada.

Montar la preproducción, paso a paso

  1. Hacer copia de seguridad de producción antes de escribir nada

    Desde la carpeta del sitio en línea:
    mkdir -p ~/preprod-backups
    wp db export ~/preprod-backups/before-staging.sql --single-transaction
    tar -czf ~/preprod-backups/files-before-staging.tar.gz -C ~/public_html .
    Compruebe que ambos archivos existen y no están vacíos con ls -lh ~/preprod-backups. Las copias de seguridad del plan no eximen de este gesto: su frecuencia depende del plan, así que pueden tener varios días.

  2. Crear el subdominio y su carpeta

    Cree staging.your-domain.com en cPanel (la guía «Crear un subdominio en cPanel» detalla la pantalla) con una carpeta raíz propia, preferiblemente fuera de public_html, por ejemplo ~/staging.your-domain.com. Una carpeta dentro de public_html también sería accesible desde una dirección del sitio en línea. Espere a que se emita el certificado TLS del subdominio antes de probar.

  3. Copiar los archivos

    rsync -a --exclude='wp-content/cache/' ~/public_html/ ~/staging.your-domain.com/
    Adapte la ruta de origen a la carpeta raíz del sitio del cliente. Sin terminal, el administrador de archivos de cPanel permite comprimir la carpeta, moverla y extraerla en la carpeta del subdominio.

  4. Crear una base y un usuario dedicados

    En la sección de bases de datos MySQL de cPanel, cree una base nueva y un usuario, y concédale todos los privilegios solo sobre esa base. Luego abra el wp-config.php de la copia y cambie DB_NAME, DB_USER y DB_PASSWORD. Es el error más caro de esta guía: copiar wp-config.php sin modificar esas tres líneas hace que la preproducción escriba en la base de producción.

  5. Importar la base

    Desde la carpeta de la copia:
    cd ~/staging.your-domain.com
    wp db import ~/preprod-backups/before-staging.sql
    wp option get siteurl
    La última orden debe mostrar todavía la dirección de producción: es normal, las URL aún no se han reemplazado. Si falla, wp-config.php sigue apuntando a la base equivocada.

  6. Reemplazar las URL, primero en seco

    wp search-replace 'https://your-domain.com' 'https://staging.your-domain.com' --all-tables --skip-columns=guid --dry-run
    Lea el informe: enumera las tablas y el número de reemplazos. Después repita la misma orden sin --dry-run. WordPress guarda muchos ajustes como datos serializados, donde cada cadena lleva su longitud: un sed sobre la exportación cambia la longitud de la URL sin corregir esa cuenta, y los ajustes quedan ilegibles. wp search-replace entiende esos datos y los reescribe correctamente.

  7. Fijar los ajustes de preproducción en wp-config.php

    Añada, encima de la línea «That's all, stop editing»:
    define('WP_ENVIRONMENT_TYPE', 'staging');
    define('DISABLE_WP_CRON', true);
    define('DISALLOW_FILE_EDIT', true);
    define('WP_DEBUG', true);
    define('WP_DEBUG_LOG', true);
    define('WP_DEBUG_DISPLAY', false);
    Los errores van a wp-content/debug.log sin mostrarse a los visitantes. WP_ENVIRONMENT_TYPE existe desde WordPress 5.5 y admite local, development, staging y production: permite que temas y plugins se adapten, pero no oculta el sitio a los buscadores, de ahí el paso siguiente.

  8. Cerrar el acceso y pedir el noindex

    En Ajustes › Lectura, marque «Disuadir a los motores de búsqueda de indexar este sitio», o desde la línea de comandos: wp option update blog_public 0. Añada después autenticación HTTP a la carpeta de la copia: un archivo .htpasswd creado con htpasswd -c ~/.htpasswd-staging client, y en el .htaccess de la carpeta las directivas AuthType Basic, AuthName "Preproduction", AuthUserFile apuntando a ese archivo y Require valid-user. En su defecto, limite el acceso a una lista de IP.

  9. Comprobar la copia como lo haría un robot

    curl -sI https://staging.your-domain.com/
    La respuesta debe ser un 401. Después, con las credenciales:
    curl -s -u client https://staging.your-domain.com/ | grep -i robots
    Debe verse una etiqueta meta name='robots' que contenga noindex. Si un plugin de caché o de SEO la sustituye, es ese el que hay que configurar. Por último, compruebe que el tema no contiene ninguna dirección de producción escrita a mano: grep -r "https://your-domain.com" wp-content/themes.

  10. Integrar la preproducción en su rutina de agencia

    Convierta este montaje en una plantilla: un subdominio por cliente, en la cuenta cPanel del cliente, con la misma lista de comprobación. El orden de las operaciones para trasladar un sitio a otro alojamiento lo cubre la guía «Migrar un sitio WordPress de cliente sin cortes»; la preproducción descrita aquí es una herramienta duradera, no un paso de la migración.

Aislar de verdad: el noindex no basta

El noindex pide a los buscadores que no conserven una página; no impide que nadie la lea. Una preproducción abierta a todos acaba en un enlace pegado en un ticket, en un mapa del sitio o en una captura de pantalla, y entonces publica contenido duplicado de producción. Las dos protecciones se complementan: el noindex indica a los buscadores que no indexen, y la autenticación HTTP o la lista de IP prohíbe el acceso.

Una trampa: si bloquea el subdominio con robots.txt, un robot ya no lee la página y por tanto nunca ve la etiqueta noindex. Con la autenticación en su sitio, ese archivo no sirve de nada.

Neutralizar correos, pagos y tareas programadas

La copia contiene a los clientes reales del sitio: suscriptores, compradores, direcciones de pedidos. Todo lo que se envía solo debe cortarse antes de la menor prueba; de lo contrario, un recordatorio de carrito, un aviso de cita o una renovación de suscripción sale por duplicado desde la copia. Las tareas programadas de WordPress se disparan con las visitas: en preproducción, desactívelas con DISABLE_WP_CRON y ejecútelas a mano con wp cron event run --due-now cuando quiera probarlas.

Lista de comprobación antes de tocar un solo plugin

  • Correos — plugin de envío en modo de prueba o redirigido a un buzón de revisión, notificaciones de la tienda desactivadas.
  • Pagos — pasarela en modo de prueba, claves de producción retiradas de la copia, direcciones de retorno (webhooks) no declaradas para la preproducción.
  • Tareas programadas — DISABLE_WP_CRON definido, eventos pendientes listados con wp cron event list.
  • Edición de archivos — DISALLOW_FILE_EDIT activo para no editar el código desde la administración.
  • Registro de errores — WP_DEBUG_LOG activo y WP_DEBUG_DISPLAY en false.
  • Integraciones de terceros — CRM, directorios, herramientas de estadísticas y claves de API de producción sustituidos o retirados.
  • Buscadores — noindex fijado y autenticación en su sitio, comprobados con curl como arriba.

Probar las actualizaciones, una a una

Liste lo que espera actualización con wp plugin list --update=available. Actualice después un plugin cada vez: wp plugin update nombre-plugin, recorra las páginas que importan (inicio, formulario de contacto, carrito, inicio de sesión) y lea el final del registro con tail -n 30 wp-content/debug.log. Pase al siguiente solo cuando el registro esté en calma. Haga lo mismo con el tema mediante wp theme update nombre-tema y luego con el núcleo mediante wp core update.

Anote en un diario de cambios, para cada línea, la versión anterior y la nueva. Esa es la lista que repetirá en producción, versión por versión, en lugar de copiar nada.

Cuando la actualización rompe: leer debug.log

El síntoma clásico es la pantalla «Ha habido un error crítico en este sitio». WordPress entra entonces en modo de recuperación y envía un enlace a la dirección de administración, lo que supone que el envío de correos funciona: en preproducción está neutralizado, así que no lo espere. La causa está en el registro: tail -n 40 wp-content/debug.log. Busque la última línea que empiece por PHP Fatal error, del tipo Call to undefined function o Cannot declare class, y anote la ruta del archivo: la carpeta bajo wp-content/plugins/ señala el plugin culpable. Desactívelo sin pasar por la administración con wp plugin deactivate nombre-plugin, y el sitio vuelve y usted sabe a quién señalar.

Solución de problemas: los otros síntomas que sí aparecen

  • El sitio redirige a producción — wp option get siteurl y wp option get home muestran aún la dirección antigua, o un constructor de páginas conserva URL escritas a mano; repita el reemplazo, con --precise si hace falta.
  • «Error al establecer una conexión con la base de datos» — DB_NAME, DB_USER, DB_PASSWORD o DB_HOST de la copia son incorrectos, o el usuario no tiene derechos sobre la base nueva.
  • Imágenes o estilos cargados desde producción — las URL escapadas, como https:\/\/ en los datos JSON de los constructores, escaparon al reemplazo; repítalo con esa forma.
  • Bucle de inicio de sesión o cierre inmediato — las cookies pertenecen al dominio antiguo; bórrelas y compruebe siteurl y home.
  • La preproducción aparece en un buscador — el noindex se fijó demasiado tarde o un plugin lo sustituye; pase a la autenticación HTTP y solicite la retirada de la dirección.

Archivos o base: qué se traslada y cómo

Desplace la tabla

ElementoDónde viveCómo trasladarlo a producción
Tema y tema hijoArchivosDesplegar la carpeta validada, o repetir `wp theme update` a la versión probada
PluginsArchivosRepetir `wp plugin update nombre-plugin --version=X` con la versión probada
Plugins de uso obligatorio (mu-plugins)ArchivosCopiar el archivo validado, guardando el antiguo al lado
Medios subidos (uploads)ArchivosNo empujar nunca de preproducción a producción: producción sigue recibiendo medios nuevos
Ajustes de pluginsBase (opciones)Rehacer el ajuste a mano en producción, o `wp option update`, nombrando la opción
Pedidos, formularios, cuentas, comentariosBaseNo pisar nunca: estos datos viven en producción
Tablas creadas por una actualizaciónBaseDejar que el plugin las cree repitiendo la actualización en producción

Pasar a producción y poder volver atrás

En un sitio transaccional, no importe nunca la base de preproducción en producción: durante sus pruebas llegaron en línea pedidos, altas y entradas de formulario, y una importación los borra. Repita en su lugar los cambios validados. Secuencia: copia de seguridad reciente (wp db export y archivo de los ficheros, como en el paso 1), wp maintenance-mode activate, actualizaciones en orden y a las versiones del diario, revisión de las páginas clave y luego wp maintenance-mode deactivate.

Para volver atrás, restaure primero los archivos: wp plugin install nombre-plugin --version=anterior --force o el archivo del paso 1. Restaure la base solo como último recurso, y solo si la actualización modificó tablas: se perdería todo lo entrado desde la copia, así que la exportación debe tener solo unos minutos. Conserve la copia hasta que el cliente haya aprobado el sitio en línea.

El reflejo de endurecimiento

Cuando la actualización esté validada, elimine la copia de la base de producción que queda en ~/preprod-backups y en la preproducción: una exportación completa contiene direcciones, pedidos y hashes de contraseñas de los clientes. No deje nunca WP_DEBUG activo en el sitio en línea, el registro puede contener rutas y consultas.

Una rutina que aguanta a escala de cartera

Una preproducción se juzga por su disciplina: siempre el mismo montaje, la misma lista de comprobación, el mismo diario. Para una agencia, la rutina cabe en una plantilla de procedimiento: un subdominio por cliente, una base dedicada, noindex más autenticación, correos cortados, actualizaciones una a una, despliegue por repetición. Funciona tanto mejor cuanto cada sitio de cliente vive en su propia cuenta, con sus copias de seguridad y accesos separados.

Una preproducción por cliente, en una infraestructura aislada

Cada sitio de cliente gana al vivir en su propia cuenta cPanel: subdominio de preproducción, copias de seguridad según el plan y accesos separados, todo desde una sola oferta de revendedor y un único espacio de agencia, con su marca. Usted conserva la relación con el cliente; la infraestructura bajo cada sitio es nuestra.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva