J'ai vu des questions qui se ressemblent, mais elles se sont toutes terminées avec multisite . Pour la maintenabilité, les performances et la sécurité, je ne souhaite pas utiliser multisite. Restez 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. Ensuite, ce serait beaucoup plus facile à maintenir, à l’é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.
Comme indiqué dans @ tom-j-nowell dans OP, Multisite peut faciliter la tâche.
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) peuvent ne pas l'être. travailler correctement sur multisite, ou peut-être parce que vous voulez que les utilisateurs de différents sites Web soient complètement séparés.
Cela dit, ce que vous voulez accomplir n’est pas si difficile.
Ce que vous devez changer entre les installations, c'est:
Cette configuration peut être effectuée à l'aide de constantes dans wp-config.php
votre seul problème est de savoir comment les changer en fonction de l'URL.
La variable 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 de fichier wp-config.php
et de dossier /WordPress
.
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 wp-config.php
unique, 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, en fonction du nom du serveur, vous chargez un fichier de configuration différent (s’il est trouvé) et que le fichier de configuration ne définit aucune configuration par défaut (ou si le fichier n’est pas trouvé), la configuration est définie par défaut.
La bonne chose à faire 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é 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 de fortes chances que $_SERVER['SERVER_NAME']
ne fonctionne pas dans 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 and themes sera automatiquement défini sur les sous-dossiers de branche /plugins
et /themes
associés.
Un problème possible ici est 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 de le faire, sinon la solution la plus simple serait de faire en sorte que /uploads
dans chaque dossier de branche devienne un lien symbolique menant au dossier real uploads que vous souhaitez partager.
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 couru 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 être bizarres.
J'ai créé un répertoire comme master-tnp/themes et master-tnp/plugins. Ensuite, créez un lien symbolique vers votre répertoire wordpress en utilisant la commande ln -s.
Les pièges se trouvent également dans les configurations de serveur. Assurez-vous que la directive suivante sur 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 à l'adresse suivante: https://vaish.co/multiple-sites-single-wordpress-directory