it-swarm.com.de

Können wir eine WordPress-Installation für mehrere Datenbanken, Domänen und Inhaltsverzeichnisse verwenden?

Ich habe einige Fragen gesehen, die ähnlich aussehen, aber alle endeten mit multisite . Aus Gründen der Wartbarkeit, Leistung und Sicherheit möchte ich Multisite nicht verwenden. Also bitte ertrage es mit mir.

Daran denke ich:

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

Wie Sie sehen, hat jede Domain eine eigene Datenbank und ein eigenes Inhaltsverzeichnis, jedoch nur eine WordPress-Instanz. Jetzt werden Themen, Plugins und Datenbanken kleiner und unabhängiger. Dann wäre es viel einfacher zu warten, zu skalieren ...

Aber ist es möglich? Wenn Sie das gleiche Problem schon einmal hatten, teilen Sie uns Ihre Gedanken mit! Ich schätze deine Hilfe sehr.

9
MinhTri

Wie @ tom-j-nowell im Kommentar zu OP sagte, kann Multisite dies einfacher machen.

Leistung und Sicherheit sind für Multisite-Systeme kein wirkliches Problem (zumindest nicht mehr als für reguläre Installationen), aber ich stimme zu, dass Multisite-Systeme manchmal ein Problem darstellen können, da viele Plugins (entweder benutzerdefinierte oder Drittanbieter) dies möglicherweise nicht tun Funktionieren Sie ordnungsgemäß auf mehreren Websites, oder möchten Sie die Benutzer verschiedener Websites vollständig voneinander trennen.

Das heißt, was Sie erreichen wollen, ist nicht so schwer.

Was Sie zwischen der Installation ändern müssen, ist:

  • plugins-Ordner
  • themenordner
  • datenbankeinstellungen

Diese Konfiguration kann mit Konstanten in wp-config.php durchgeführt werden Ihr einziges Problem ist, wie Sie sie basierend auf der URL wechseln können.

Die Servervariable 'SERVER_NAME' sollte für Sie funktionieren, zumindest wenn Ihr Webserver richtig konfiguriert ist.

Beispielsweise können Sie einen Ordner mit dem Namen /conf auf derselben Ebene wie wp-config.php file und /WordPress folder erstellen.

In diesem Ordner können Sie einige Dateien hinzufügen:

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

in jedem von ihnen kann man so etwas tun

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

Dies ändert sich in jeder Konfigurationsdatei entsprechend der "Verzweigung".

Danach können Sie in Ihrem einzigartigen wp-config.php so etwas wie:

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

Was oben passiert, ist, dass basierend auf dem Servernamen eine andere Konfigurationsdatei geladen wird (falls gefunden) und falls die Konfigurationsdatei keine der Standardkonfigurationen definiert (oder falls die Datei nicht gefunden wird), die Konfiguration standardmäßig festgelegt wird.

Das Schöne ist, dass Sie zum Hinzufügen einer neuen Verzweigung nur den Verzweigungsordner erstellen und einen .conf bereitstellen müssen, der nach der neuen Verzweigungsdomäne benannt ist. Nun haben Sie nichts mehr zu ändern auf der Seite WP.

Die Linie:

 $Host = getenv('WORDPRESS_Host') ?: $_SERVER['SERVER_NAME'];

hier bekomme ich den Domainnamen. Als erste Option verwende ich eine Umgebungsvariable, da $_SERVER['SERVER_NAME'] möglicherweise in einem Befehlszeilenkontext nicht funktioniert, wie z. B. bei Verwendung von WP CLI. In diesen Situationen können Sie eine Umgebungsvariable festlegen, um WP zu zwingen, Einstellungen aus einem bestimmten Zweig zu verwenden.

Beachten Sie, dass ich in branchenspezifischen Konfigurationsdateien den WP_CONTENT_DIR ändere und dadurch den Ordner plugins und themes automatisch auf die zugehörigen Unterordner /plugins und /themes setzt.

Ein mögliches Problem ist hier, wenn Sie den Ordner /uploads freigeben möchten (in den Dateien hochgeladen werden).

Standardmäßig ist dieser Ordner ein Unterordner des Inhaltsverzeichnisses. Wenn Sie also den Workflow darüber verwenden, ist er ein /uploads-Unterordner für jeden Zweigstammordner.

Wenn dies für Sie kein Problem ist, können Sie es am einfachsten tun, indem Sie /uploads in jedem Zweigordner zu einem Symlink auf den Ordner real uploads machen, den Sie freigeben möchten.

9
gmazzap

Dies ist mit ein wenig Symlinking und Planung möglich. Ich habe ein bisschen im Netz nach der gleichen Sache gesucht. Zum Schluss alles zusammenstellen und zum Laufen bringen.

Ich habe einige Websites betrieben, die alle dasselbe Thema und denselben Plug-in-Ordner haben. Dieselben Ordner können für mehrere Standorte und einzelne Standorte verwendet werden. Aber Sie müssen vorsichtig sein mit bestimmten Plugins, die nur Multi/Single-Sites sein können und schrullig sind.

Ich habe ein Verzeichnis wie master-tnp/themes und master-tnp/plugins erstellt. Verknüpfen Sie dann mit dem Befehl ln -s mit Ihrem WordPress-Verzeichnis.

Fallstricke gibt es auch bei Serverkonfigurationen. Stellen Sie sicher, dass die Anweisung follow symlinks so eingestellt ist, dass sie zulässt.

Wenn Sie eine einzelne WordPress-Installation verwenden möchten, habe ich unter https://vaish.co/multiple-sites-single-wordpress-directory eine ausführliche Anleitung dazu zusammengestellt.

0
Cpyder