¿Podemos usar una instalación de WordPress para múltiples bases de datos, dominios y directorios de contenido?

10

He visto algunas preguntas que parecen similares, pero todas terminaron con multisite . Para mantenimiento, rendimiento y seguridad, no quiero usar multisitio. Así que por favor tengan paciencia conmigo.

Esto es en lo que estoy pensando:

.
|_____branch1 // for branch1.domain.com
|  |_____themes
|  |_____plugins
|
|_____branch2 // for branch2.domain.com
|  |_____themes
|  |_____plugins
|
|_____branch3 // for branch3.domain.com
|  |_____themes
|  |_____plugins
|
|_____index.php
|_____WordPress
|_____wp-config.php

Como puede ver, cada dominio tiene su propia base de datos y directorio de contenido, pero solo una instancia de WordPress. Ahora, los temas, complementos y bases de datos se vuelven más pequeños e independientes. Entonces, sería mucho más fácil de mantener, escalar ...

¿Pero es posible? Si ha experimentado el mismo problema anteriormente, ¡comparta sus pensamientos! Realmente aprecio tu ayuda.

    
pregunta MinhTri 13.06.2016 - 14:00

2 respuestas

10

Como @ tom-j-nowell dijo en un comentario a OP, el multisite puede hacer esto más fácil.

El rendimiento y la seguridad no son realmente un problema para multisitio (al menos, no más que para instalaciones normales), pero estoy de acuerdo en que a veces el multisitio puede ser un problema, porque muchos complementos (ya sea personalizados o de terceros) ) puede que no funcione correctamente en varios sitios, o tal vez porque desea mantener a los usuarios de diferentes sitios web completamente separados.

Eso no es tan difícil.

Lo que necesita cambiar entre la instalación es:

  • carpeta de complementos
  • carpeta de temas
  • configuración de la base de datos

Esas configuraciones pueden realizarse usando constantes en wp-config.php su único problema es cómo cambiarlas según URL.

La variable de servidor 'SERVER_NAME' debería funcionar para usted, al menos si su servidor web está configurado correctamente.

Por ejemplo, puedes crear una carpeta llamada /conf en el mismo nivel de wp-config.php file y /WordPress folder.

En esa carpeta puedes agregar algunos archivos:

  • branch1.domain.com.conf
  • branch2.domain.com.conf
  • branch3.domain.com.conf

dentro de cada uno de ellos puedes hacer algo como

$branch = 'branch1';
$base_dir = dirname( __DIR__) . "/{$branch}";

defined( 'WP_CONTENT_DIR' ) or define( 'WP_CONTENT_DIR', $base_dir );

// be sure WP understand URLs correctly
defined( 'DB_HOME' ) or define( 'DB_HOME', "{$branch}.example.com" );
defined('WP_SITEURL') or define('WP_SITEURL', "{$branch}.example.com/WordPress");

// adjust DB settings  as needed
defined( 'DB_NAME' ) or define( 'DB_NAME', $branch );
defined( 'DB_USER' ) or define( 'DB_USER', $branch );
defined( 'DB_PASSWORD' ) or define( 'DB_PASSWORD', '********' );

unset( $base_dir, $branch );

Esto cambiará en cada archivo de configuración de acuerdo con la "rama".

Después de eso, en tu único wp-config.php puedes hacer algo como:

$defaults_conf = [
  'WP_CONTENT_DIR' => __DIR__ . '/branch1',
  'DB_HOST'        => 'localhost',
  'DB_NAME'        => 'branch1',
  'DB_USER'        => 'branch1',
  'DB_PASSWORD'    => '********',
];

$host = getenv('WORDPRESS_HOST') ?: $_SERVER['SERVER_NAME'];

if ($host && file_exists(__DIR__."/conf/{$host}.conf")) {
  require __DIR__."/conf/{$host}.conf";
}

array_walk($defaults_conf, function($value, $name) {
   defined($name) or define($name, $value);
});

unset($defaults_conf, $host);

Lo que sucedió anteriormente es que, según el nombre del servidor, se carga un archivo de configuración diferente (si se encuentra) y si el archivo de configuración no define la configuración predeterminada (o si no se encuentra el archivo), la configuración se establece por defecto. .

Lo bueno es que para agregar una nueva rama, solo necesitas crear la carpeta de la rama y proporcionar un .conf con el nombre del nuevo dominio de la rama, y listo, no hay nada que cambiar en el lado WP.

La línea:

 $host = getenv('WORDPRESS_HOST') ?: $_SERVER['SERVER_NAME'];

es donde obtengo el nombre de dominio. Como primera opción, estoy usando una variable de entorno, porque existe la posibilidad de que $_SERVER['SERVER_NAME'] no funcione en un contexto de línea de comandos, por ejemplo, al usar WP CLI. En esas situaciones, puede configurar una variable de entorno para obligar a WP a usar la configuración de una rama específica.

Tenga en cuenta que en los archivos de configuración específicos de la rama, estoy cambiando el WP_CONTENT_DIR y eso establecerá automáticamente la carpeta de complementos y temas en las subcarpetas de la rama /plugins y /themes .

Un posible problema aquí es si desea compartir la carpeta /uploads (donde se cargan los archivos).

De forma predeterminada, esa carpeta es una subcarpeta del directorio de contenido, por lo que el uso del flujo de trabajo que se encuentra arriba será una subcarpeta /uploads de cada carpeta de raíz de rama.

Si eso no es un problema para usted, entonces simplemente vaya con él, de lo contrario, la solución más fácil sería hacer que /uploads en cada carpeta de rama sea un enlace simbólico a la carpeta de real que desea cargar. compartir.

    
respondido por el gmazzap 13.06.2016 - 18:35
0

Esto es posible con un enlace y un poco de planificación. Hice un poco de fregar en la red para la misma cosa. Finalmente, armó todas las cosas y las puso a funcionar.

He estado ejecutando algunos sitios web, todos comparten el mismo tema y la misma carpeta de complementos. Las mismas carpetas funcionan para sitios múltiples y únicos. Pero debe tener cuidado con ciertos complementos que pueden ser solo para sitios Multi / Únicos y ser extravagantes.

He creado un directorio como master-tnp / themes y master-tnp / plugins. Luego haga un enlace simbólico a su directorio de wordpress usando el comando ln -s.

Las fallas también están en las configuraciones del servidor. Asegúrese de que la directiva de seguimiento de enlaces simbólicos esté configurada para permitir.

Si desea utilizar una instalación de WordPress único, he reunido una guía detallada sobre cómo lo hice en enlace

    
respondido por el Cpyder 25.06.2017 - 11:00

Lea otras preguntas en las etiquetas