Vamos a explicar detalladamente el proceso que hemos llevado a cabo para hacer posible nuestro gran deseo. Durante mucho tiempo hemos estado buscando la fórmula magistral para unificar todas nuestras instalaciones de WordPress en una única instalación. Probamos con la opción multisite que trae de serie el CMS, pero no nos terminó de convencer su incapacidad de crear múltiples bases de datos y su inestabilidad general, entre otros muchos inconvenientes con los que nos encontramos.

Finalmente, y tras un largo proceso de pruebas y chequeos, creemos que hemos dado con la fórmula mágica, y, dado que ya está funcionando a pleno pulmón en nuestra red, lo hacemos público para que vosotros podáis hacer uso de esta opción.

Primer paso: El servidor.

Lo primero que vamos a necesitar, obviamente, es que el alojamiento web que tenemos contratado nos permita albergar un número suficiente de nombres de dominio, su gestión y su instalación en carpetas distintas de las que se crean por defecto, httpdocs en el caso de Parallels Plesk Panel o htdocs en cPanel.

Creando plan de hosting

Creando plan de hosting


En nuestro caso concreto teníamos contratado un VPS con un Parallels Plesk Panel versión 10.4.4 que nos permite crear una subscripción donde alojar múltiples nombres de dominio, y cada uno de ellos puede estar en una carpeta distinta o compartida, además de albergar todos los alias de dominio que necesitemos.

De esta forma debemos empezar por crear un plan de servicio, en caso de que queramos asignarle unos parámetros específicos a la subscripción que debemos crear. Para ello pulsamos en Planes de servicio en el menú de la izquierda y pulsamos en Añadir plan nuevo en el menú superior. Allí nos aparecerá una pantalla como la de la derecha con las siguientes pestañas:

  • Recursos.
  • Permisos.
  • Parámetros de hosting.
  • Configuración PHP.
  • Correo.
  • DNS.
  • Rendimiento.
  • Registros y estadísticas.
  • Aplicaciones.

Añadiendo suscripción propia

Añadiendo suscripción propia

Dado que Parallels Plesk Panel está muy bien documentado, y que el objetivo de este tutorial no es conocerlo en profundidad, os remitimos a su ayuda para que sepáis qué hacer con cada una de las pestañas. Sólo debemos configurarlo a nuestro gusto y darle el nombre que queremos, en nuestro caso Alojamiento matriz.

Una vez creado el plan de servicio, en el caso de que lo hayamos necesitado crear, debemos pulsar en Suscripciones en el menú de la izquierda, y pulsar en Añadir suscripción nueva. Allí nos aparecerá una pantalla como la de la derecha donde debemos indicar el Nombre de dominio, en nuestro caso de ejemplo alojamientomatriz.com, la Dirección IP que queremos utilizar, en el caso de que tengamos asignadas más de una al VPS, el Nombre de usuario, la Contraseña y el Plan de servicio que queremos utilizar, en este caso el recién creado Alojamiento matriz.

Administrador de archivos

Administrador de archivos

Ya tenemos creada la suscripción alojamientomatriz.com (Alojamiento matriz), ahora vamos a continuar pulsando en el botón Abrir en el Panel de Control, que se encuentra a su derecha. En la nueva pantalla pulsaremos en la pestaña Sitios web y dominios, y allí en el botón Administrador de archivos. Una vez abierta la nueva pantalla vamos a crear un nuevo directorio llamado wordpress, por ejemplo, donde alojaremos la instalación de WordPress y todos los dominios. Para ello hay que pulsar en Añadir directorio, introducir el nombre del directorio y pulsar en el botón ACEPTAR.

Configuración de hosting para alojamientomatriz.com

Configuración de hosting para alojamientomatriz.com


Una vez creado el nuevo directorio volvemos a la pestaña Sitios web y dominios y pulsaremos sobre el dominio alojamientomatriz.com. Una vez que se abre la nueva pantalla cambiaremos Raíz del documento de httpdocs a wordpress, en Soporte para PHP (ejecutar como cambiamos Apache por Aplicación FastCGI), y finalmente pulsaremos en el botón ACEPTAR, con lo que ya tendremos ubicado el nombre de dominio justo en la carpeta que queríamos.

Mucho ojo con este parámetro de FastCGI, necesario para no tener problemas con los permisos de escritura de los archivos y directorios alojados en la carpeta wordpress cada vez que añadamos un nuevo sitio web (al menos en nuestro caso ha sido necesario), que nos obligará a modificar el archivo fcgid.conf, ubicado en la ruta /etc/apache2/conf.d/fcgid.conf, añadiéndole esta simple línea de código:

  • FcgidMaxRequestLen 1073741824.

Si no lo hacemos nos encontraremos con graves problemas a la hora de subir archivos o imágenes de más de 128 kB en WordPress. En caso de no tener acceso a dicho archivo, hay que indicárselo al ISP de turno.

Este punto es de extrema importancia.

Añadir alias de dominio

Añadir alias de dominio

Dado que en nuestro caso el nombre de domino alojamientomatriz.com va a tener un alias de dominio llamado alojamientomatriz.es, vamos a crearlo pulsando en la pestaña Sitios web y dominios el botón Añadir alias de dominio nuevo, una vez abierta la nueva pantalla escribiremos en Nombre de alias de dominio, alojamientomatriz.es, para el dominio alojamientomatriz.com, pulsamos el botón ACEPTAR, y listo, ya tenemos todo lo que necesitamos en el servidor.

Podemos repetir estos pasos tantas veces como necesitemos, crear todos los nombres de dominio, alias de dominio y subdominios que necesitemos. Es más, incluso podemos repetir este tipo de instalación compartida para instalaciones de aplicaciones como Piwik, phpMyAdmin o PrestaShop, por ejemplo, aunque en esta última no es tan sencillo como en el caso que nos ocupa.

Sitios web y dominios

Sitios web y dominios

En la captura de pantalla que se encuentra a la derecha, podemos ver un ejemplo completamente operativo de tres nombres de dominio distintos compartiendo la raíz del documento wordpress junto a sus correspondientes alias de dominio y varios subdominios distintos, que pueden, a su vez, tener sus propios alias de dominio y compartir raíces de documentos con otros subdominios o dominios.

Tras crear las correspondientes bases de datos y cuentas de correo electrónico para cada nombre de dominio, y en el caso de las bases de datos, para cada aplicación instalada en cada nombre de dominio, sólo nos queda subir vía FTP todos los archivos necesarios para cada aplicación, en nuestro caso subiremos todos los archivos de instalación de WordPress a la carpeta wordpress. Dado que entendemos que ya sabemos hacer tanto lo uno, como lo otro, y que entendemos que su explicación excede el objetivo de este tutorial, lo omitimos.

Segundo paso: WordPress.

Ya tenemos configurados los nombres de dominio, los alias de dominio, los subdominios, las bases de datos y las cuentas de correo electrónico que necesitamos, y hemos subido todos los archivos de instalación a cada una de sus carpetas. Ahora sólo nos queda hacer unas pequeñas modificaciones, configuraciones e instalaciones en WordPress y en la carpeta que lo aloja.

Vamos a empezar por crear un directorio de archivos para cada nombre de dominio, de forma que no se almacenen todos los archivos de todos los nombres de dominios en la carpeta uploads. Para ello debemos crear en la ruta /wordpress/wp-content/ tantos directorios como necesitemos, en nuestro caso de ejemplo vamos a crear, bien vía FTP, vía Administrador de archivos:

  1. /wordpress/wp-content/alojamientoprimario.
  2. /wordpress/wp-content/alojamientosecundario.
  3. /wordpress/wp-content/alojamientoterciario.

Una vez creadas las carpetas, vamos a configurar el archivo wp-config.php para indicarle a cada nombre de dominio qué base de datos leer y dónde guardar los archivos. Para ello reemplazamos este código:

// ** Ajustes de MySQL. Solicita estos datos a tu proveedor de alojamiento web. ** //
/** El nombre de tu base de datos de WordPress */
define('DB_NAME', 'nombredetubasededatos');

/** Tu nombre de usuario de MySQL */
define('DB_USER', 'nombredeusuario');

/** Tu contraseña de MySQL */
define('DB_PASSWORD', 'contraseña');

Con este otro, donde es muy importante que pongas el nombre del dominio sin la extensión, el nombre de usuario y la contraseña que utilizamos a la hora de crear la suscripción que aloja a todos los nombres de dominio:

// ** Ajustes de MySQL. Solicita estos datos a tu proveedor de alojamiento web. ** //
/** El nombre de tu base de datos de WordPress */
$dominio = $_SERVER['SERVER_NAME'];

if ( stristr( $dominio, "alojamientomatriz" ) !== false ) {
	define( 'DB_NAME', 'alojamientomatriz' );
	define( 'UPLOADS', 'wp-content/'.'alojamientomatriz' );
} else if ( stristr( $dominio, "alojamientosecundario" ) !== false ) {
	define( 'DB_NAME', 'alojamientosecundario' );
	define( 'UPLOADS', 'wp-content/'.'alojamientosecundario' );
} else if ( stristr( $dominio, "alojamientoterciario" ) !== false ) {
	define( 'DB_NAME', 'alojamientoterciario' );
	define( 'UPLOADS', 'wp-content/'.'alojamientoterciario' );
}
else die;

/** Tu nombre de usuario de MySQL */
define('DB_USER', 'admin');

/** Tu contraseña de MySQL */
define('DB_PASSWORD', 'la_contraseña_que_hayas_puesto_al_usuario_admin');

Obviamente te recomendamos, por una cuestión básica de seguridad, que cambies el prefijo de las tablas, tal y como explicamos en ¿Cómo cambiar el prefijo de las tablas de la base de datos de WordPress?.

Por último vamos a añadir, justo antes de la línea:

$table_prefix  = 'prefijo_que_hayas_puesto_';

El siguiente código, que nos va a ahorrar tiempo y problemas con el acceso FTP y con el plugin Multiple Domains with Analytics que explicamos más adelante:

define('FTP_HOST', 'alojamientoprimario.com');
define('FTP_USER', 'nombre_de_usuario_ftp');
define('FTP_PASS', 'la_contraseña_que_le_hayas_puesto_al_usuario_ftp');

define('WP_TEMP_DIR','/tmp');
define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);

En el caso de que tengas nombres de dominio que utilicen WordPress en idiomas distintos, debes cambiar el primer código por algo como este:

/**
 * Idioma de WordPress.
 *
 * Cambia lo siguiente para tener WordPress en tu idioma. El correspondiente archivo MO
 * del lenguaje elegido debe encontrarse en wp-content/languages.
 * Por ejemplo, instala ca_ES.mo copiándolo a wp-content/languages y define WPLANG como 'ca_ES'
 * para traducir WordPress al catalán.
 */
define('WPLANG', 'es_ES');

// ** Ajustes de MySQL. Solicita estos datos a tu proveedor de alojamiento web. ** //
/** El nombre de tu base de datos de WordPress */
$dominio = $_SERVER['SERVER_NAME'];

if ( stristr( $dominio, "alojamientomatriz" ) !== false ) {
	define( 'DB_NAME', 'alojamientomatriz' );
	define( 'UPLOADS', 'wp-content/'.'alojamientomatriz' );
	define('WPLANG', 'ca_ES');
} else if ( stristr( $dominio, "alojamientosecundario" ) !== false ) {
	define( 'DB_NAME', 'alojamientosecundario' );
	define( 'UPLOADS', 'wp-content/'.'alojamientosecundario' );
} else if ( stristr( $dominio, "alojamientoterciario" ) !== false ) {
	define( 'DB_NAME', 'alojamientoterciario' );
	define( 'UPLOADS', 'wp-content/'.'alojamientoterciario' );
	define('WPLANG', 'en_GB');
}
else die;

/** Tu nombre de usuario de MySQL */
define('DB_USER', 'admin');

/** Tu contraseña de MySQL */
define('DB_PASSWORD', 'la_contraseña_que_hayas_puesto_al_usuario_admin');

Obviamente eliminando este otro código del final del archivo wp_config.php:

/**
 * Idioma de WordPress.
 *
 * Cambia lo siguiente para tener WordPress en tu idioma. El correspondiente archivo MO
 * del lenguaje elegido debe encontrarse en wp-content/languages.
 * Por ejemplo, instala ca_ES.mo copiándolo a wp-content/languages y define WPLANG como 'ca_ES'
 * para traducir WordPress al catalán.
 */
define('WPLANG', 'es_ES');

Básicamente con estos pasos ya tendríamos completamente operativo todo, pero nos quedan hacer unos pequeños ajustes más para que los nombres de dominio funcionen correctamente.

Multiple Domains with Analytics

Multiple Domains with Analytics

En su momento os explicamos cómo crear un sitio web bajo WordPress con uno o varios alias de nombre de dominio, pero para este nuevo sistema de instalación no es del todo válido.

En lugar de Domain Mirror, que ya no es válido para las últimas versiones de WordPress, vamos a utilizar Multiple Domains with Analytics, que funciona y se configura exactamente igual a como se explica en esa entrada, y tal y como podemos ver en la captura de pantalla, aunque ahora tendremos que ir a Ajustes -> Multiple Domains with Analytics.

Del resto de lo descrito en la entrada, ahora sólo vamos a utilizar el truco del archivo robots.txt y nada más, ya no vamos a necesitar utilizar el mismo truco, ni los mismos plugins, para el resto de archivos:

  1. sitemap.xml.
  2. sitemap-image.xml.
  3. sitemap-mobile.xml.
  4. sitemap-video.xml.

Ya que ahora serán archivos virtuales gracias a la última versión 4.0b11 (es extremadamente importante utilizar esta versión y no otra, ya que las anteriores no son válidas) del plugin Google XML Sitemaps, el único que repite, y nuestros plugins Google Image Sitemap Feed With Multisite Support, Google Mobile Sitemap Feed With Multisite Support y Google Video Sitemap Feed With Multisite Support. Ahora eso si, no nos olvidemos de leer ¿Cómo arreglar la incompatibilidad de Google XML Sitemaps con nuestros plugins? para evitarnos más de un problema de incompatibilidad.

Tanto el truco del archivo robots.txt, como la instalación de los plugins se hace una única vez, ya que todo está compartido de forma automática en todos los nombres de dominio. Los plugins, una vez instalados y configurados en cualquiera de los nombres de dominios que utilicemos, sólo necesitan ser activados y configurados en el resto.

En cuanto a los plugins a instalar, además de los mínimos e imprescindibles aquí indicados, cada cual utilizará aquellos que necesite, sabiendo que estarán disponibles en todas las demás instalaciones. APG, de todas formas, recomienda encarecidamente el uso de los indicados en ¿Cómo mejorar considerablemente la seguridad de WordPress?.

Pros y contras.

Obviamente, y tras su uso durante varios meses, nos hemos encontrado con varios pros y varios contras.

Los pros más importantes son:

  1. Fácil gestión: Actualizando WordPress o alguno de sus plugin en uno sólo de los nombres de dominio, automáticamente aplicamos la actualización al resto de nombres de dominio de la instalación compartida. Ocurre lo mismo con la instalación, haciendo una única instalación de un plugin, automáticamente está disponible para toda la red de nombres de dominio.
  2. Fácil migración a otra suscripción, máquina o servidor: Al tener los directorios de archivo y las bases de datos totalmente separadas y diferenciadas, la migración de cualquier nombre de dominio es extraordinariamente sencilla.
  3. Ahorro de espacio de disco: Al no tener que instalar una y otra vez los mismos archivos en distintas suscripciones y/o nombres de dominio, ahorramos gran cantidad de espacio de disco duro.
  4. Aumento de la velocidad: Al igual que con el ahorro de espacio de disco duro, al utilizarse los mismos archivos para todos los nombres de dominio, se sirven los archivos desde un único directorio raíz, ahorrándole al servidor tener que buscar en gran cantidad de directorios diferentes, gran cantidad de archivos exactamente iguales. Además, si utilizamos un plugin de gestión de caché, al estilo de WP Super Cache, desde una única ruta /wordpress/wp-content/cache/ se servirán todas las copias de caché de todos los nombres de dominio pertenecientes a la red.
  5. Temas y plugins compartidos: Los instalaremos una única vez y estarán disponibles para todos los nombres de dominio, siendo necesaria únicamente su activación y configuración. Además, gracias al uso de los temas hijo, podemos personalizar un tema único en distintos nombres de dominio modificando sólo aquellos archivos que necesitemos.

En cuanto a los contras, de momento sólo nos hemos encontrado con estos:

  1. Prohíbe la gestión del alojamiento por parte del cliente final: Nos debemos olvidar de proporcionarle al cliente ningún tipo de dato de acceso a Parallels Plesk Panel, ya que el usuario que creemos tendrá acceso a la administración de todos los nombres de dominio que están compartidos en la suscripción. Lo mismo ocurre con el acceso FTP, e incluso con la creación de usuarios Administrador en WordPress, reservándonos ese privilegio a nosotros y creando usuarios Editor a nuestros clientes. Aunque a priori parece un grandísimo problema, en realidad la inmensa mayoría de los clientes se ajustan al 100% a este perfil de clientes que no tienen conocimientos técnicos y que necesitan la menor cantidad de operaciones disponibles posibles.
  2. Es extraordinariamente peligroso a la hora de eliminar los sitios web de la red: Tal y como hemos podido comprobar en nuestras propias carnes, si borramos cualquiera de los sitios web que están compartiendo la carpeta wordpress, por ejemplo, esta es borrada completamente para TODOS los demás sitios web que la comparten. Para evitarlo, hay que cambiar el sitio web que queremos borrar a una carpeta temporal y entonces, pero sólo entonces, borrar el sitio web. Si no lo hacemos así, nos va a faltar tiempo para llamar al ISP de turno para que eche mano de la última copia de seguridad completa del servidor.

Existe un inconveniente más al que estamos dándole vueltas desde hace meses, y es que cada vez que se crea un nuevo nombre de dominio sobre la carpeta wordpress, por ejemplo, nos añade una serie de archivos que Parallels Plesk Panel añade por defecto, concretamente dos directorios:

  1. picture_library
  2. plesk-stat

De momento, y tras volvernos locos el tema, especialmente a Daniel Conde, no hemos encontrado la forma de eliminar esta función. El otro inconveniente que se generaba al añadir nuevos nombres de dominios, que era el reinicio de los permisos de las carpetas y archivos, lo solventamos, tal y como hemos indicado en la primera parte, al ejecutar el PHP como FastCGI.

Extraordinariamente importante

Mucho ojo con el borrado de los sitios web.

Antes de pulsar el botón Eliminar, asegúrate de que el sitio web está en una carpeta temporal. Y asegúrate dos veces por lo menos.

¡Ya estás avisado!

Fin.

Ya conocemos todas las claves, configuraciones, trucos, soluciones, ventajas e inconvenientes para poner en marcha esta forma de usar e instalar WordPress. Ahora te toca a ti decidir si usarlo o no. En APG ya lo usamos, ¿y tú? Esperamos vuestros comentarios, y, seguro, vuestras dudas.

Esperamos que os resulte igual de útil que nos ha resultado a nosotros todo el trabajo realizado.