Peut-on utiliser une installation WordPress pour plusieurs bases de données, domaines et répertoires de contenu

10

J'ai vu certaines questions se ressembler mais elles se sont toutes terminées par un multisite . Pour la maintenabilité, les performances et la sécurité, je ne souhaite pas utiliser plusieurs sites. Alors s'il vous plaît supporter avec moi.

Voici ce à quoi je pense:

.
|_____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

Comme vous pouvez le constater, chaque domaine possède sa propre base de données et son propre répertoire de contenu, mais uniquement une instance WordPress. Maintenant, les thèmes, les plugins et les bases de données deviennent plus petits et indépendants. Il serait alors beaucoup plus facile de maintenir, d’échelle ...

Mais est-ce possible? Si vous avez déjà rencontré le même problème, partagez vos impressions! J'apprécie vraiment votre aide.

    
posée MinhTri 13.06.2016 - 14:00

2 réponses

10

Comme @ tom-j-nowell a déclaré dans un commentaire à l'OP, le multisite peut le faire plus facile.

Les performances et la sécurité ne posent pas vraiment problème pour les sites multisites (du moins, pas plus que pour les installations classiques), mais je conviens que les sites multisites peuvent parfois poser problème, car de nombreux plug-ins (personnalisés ou tiers) ) peut ne pas fonctionner correctement sur plusieurs sites, ou peut-être parce que vous souhaitez que les utilisateurs de sites Web différents restent complètement séparés.

Cela dit, ce que vous voulez réaliser n’est pas si difficile.

Ce que vous devez changer entre les installations est la suivante:

  • dossier des plugins
  • dossier de thèmes
  • paramètres de la base de données

Cette configuration peut être effectuée à l'aide de constantes dans wp-config.php . Le seul problème que vous rencontrez est de savoir comment les changer. URL.

La variable de serveur 'SERVER_NAME' devrait fonctionner pour vous, du moins si votre serveur Web est configuré correctement.

Par exemple, vous pouvez créer un dossier nommé /conf au même niveau que wp-config.php fichier et /WordPress dossier.

Dans ce dossier, vous pouvez ajouter des fichiers:

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

à l'intérieur de chacun d'eux, vous pouvez faire quelque chose comme

$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 );

Cela changera sur chaque fichier de configuration en fonction de la "branche".

Après cela, dans votre unique wp-config.php , vous pouvez faire quelque chose comme:

$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);

Ce qui se passe ci-dessus, c’est que, sur la base du nom du serveur, vous chargez un fichier de configuration différent (si trouvé) et que le fichier de configuration ne définit aucune configuration par défaut (ou que le fichier n’est pas trouvé), la configuration est définie par défaut. .

La chose agréable est que pour ajouter une nouvelle branche, il vous suffit de créer le dossier de la branche et de fournir un .conf nommé d'après le nouveau domaine de la branche, et vous avez terminé, vous ne pouvez rien modifier du côté de WP.

La ligne:

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

est où je reçois le nom de domaine. En tant que première option, j'utilise une variable d'environnement, car il y a des chances que $_SERVER['SERVER_NAME'] ne fonctionne pas sur un contexte de ligne de commande, comme nous lorsque nous utilisons WP CLI. Dans ces situations, vous pouvez définir une variable d'environnement pour forcer WP à utiliser les paramètres d'une branche spécifique.

Notez que, dans les fichiers de configuration spécifiques à une branche, je modifie le WP_CONTENT_DIR et que le dossier plugins et les thèmes sont automatiquement définis sur les sous-dossiers connexes /plugins et /themes de branches.

Un problème possible ici est de savoir si vous souhaitez partager le dossier /uploads (où les fichiers sont téléchargés).

Par défaut, ce dossier est un sous-dossier du répertoire de contenu. Par conséquent, si vous utilisez le flux de travail ci-dessus, il s'agira d'un sous-dossier /uploads de chaque dossier racine de branche.

Si cela ne vous pose pas de problème, ne vous contentez pas d'y aller, sinon la solution la plus simple serait de faire de /uploads dans chaque dossier de branche un lien symbolique vers le dossier réel que vous souhaitez télécharger. partager.

    
réponse donnée gmazzap 13.06.2016 - 18:35
0

Ceci est possible avec un lien symbolique et un peu de planification. J'ai fait des recherches sur le net pour la même chose. Enfin, rassemblez tout le matériel et faites le fonctionner.

J'ai eu quelques sites Web, ils partagent tous le même thème et le même dossier de plugin. Les mêmes dossiers fonctionnent pour des sites multisites et uniques. Mais vous devez faire attention à certains plugins qui peuvent être multi / site unique et bizarre.

J'ai créé un répertoire tel que master-tnp / themes et master-tnp / plugins. Ensuite, établissez un lien symbolique vers votre répertoire wordpress à l’aide de la commande ln -s.

Les pièges se trouvent également dans les configurations de serveur. Assurez-vous que la directive suivez les liens symboliques est définie sur autoriser.

Si vous souhaitez utiliser une seule installation WordPress, j’ai préparé un guide détaillé expliquant comment je l’ai fait à enlace

    
réponse donnée Cpyder 25.06.2017 - 11:00

Lire d'autres questions sur les étiquettes