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

10

Ich habe einige Fragen gesehen, die ähnlich aussehen, aber alle endeten mit Multisite . Aus Gründen der Wartbarkeit, Leistung und Sicherheit möchte ich keine Multisite 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 können, hat jede Domain ihre eigene Datenbank und ihr eigenes Inhaltsverzeichnis, aber 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 bitte Ihre Gedanken mit! Ich schätze deine Hilfe sehr.

MinhTri
quelle
1
Warum wurde Multisite als Möglichkeit eliminiert? Dazu muss ein fragiles System erstellt werden, das weniger wartbar als Multisite ist, eine langsamere Leistung als Multisite und eine schlechtere Sicherheit als Multisite aufweist. Einige der größten Installationen von WordPress sind Installationen mit mehreren Standorten, und es ist alles derselbe Code, der auf einer Standard-Single-Site ausgeführt wird
Tom J Nowell
Ich verwalte mehrere WP-Multisites, einschließlich einer mit über 500 Sub-Sites. Die Leistung ist gleich, unabhängig davon, ob Sie eine Instanz mit mehreren Standorten oder 500 WP verwenden, es sei denn, Sie haben die 500 Instanzen auf separaten VMs und Datenbanken. Wartbarkeit saugt mit Multisite? Versuchen Sie, 500 einzelne Sites zu verwalten.
user42826
@ TomJNowell Ich bin mir nicht sicher, ob diese größte Installation nur mit einer Datenbank installiert wird, aber ich denke, dass dieses und dieses Video uns auf dieselbe Seite bringen könnten. Wir verwenden hauptsächlich WordPress für CRM und die Privatsphäre der Benutzer ist sehr wichtig.
MinhTri
@ user42826 Derzeit hat meine Firma nicht so viele Websites. Ich kann die aktuelle Site auch nicht in eine Multisite konvertieren und sie vergleichen. Und Hardware und andere Dinge können sich von Ihnen unterscheiden. Ich möchte also nur nach einer optimalen Installationsarchitektur in meinem Fall fragen. Soweit ich weiß, funktioniert Multisite mit Subdomains, aber nicht für verschiedene Domains.
MinhTri
Multisite funktioniert mit verschiedenen Domänen. Wir verwenden eine Hauptdomain, * .domain.com, und einige andere Domains, www.domain2.com und www.domain3.com. Wir verwenden das WP Domain Mapping Plugin, um Multidomains zu erstellen, aber soweit ich weiß, unterstützt WP Core das Multidomain Mapping jetzt nativ.
user42826

Antworten:

10

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

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

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 mithilfe von Konstanten durchgeführt werden.wp-config.php Ihr einziges Problem besteht darin, sie basierend auf der URL zu wechseln.

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

Beispielsweise können Sie einen Ordner erstellen, /confder auf derselben Ebene von wp-config.phpDatei und /WordPressOrdner benannt ist.

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 für jede Konfigurationsdatei entsprechend der "Verzweigung".

Danach können Sie in Ihrem Unikat wp-config.phpso 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 wenn die Konfigurationsdatei keine der Standardkonfigurationskonfigurationen definiert (oder wenn die Datei nicht gefunden wird), wird standardmäßig die Konfiguration festgelegt.

Das Schöne ist, dass Sie zum Hinzufügen eines neuen Zweigs nur den Zweigordner erstellen und einen .confnach der neuen Zweigdomäne benannten angeben müssen. Wenn Sie fertig sind, gibt es auf der WP-Seite nichts zu ändern.

Die Linie:

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

Hier bekomme ich den Domainnamen. Als erste Option verwende ich eine Umgebungsvariable, da die Wahrscheinlichkeit besteht, $_SERVER['SERVER_NAME']dass sie in einem Befehlszeilenkontext nicht funktioniert, wie z. B. bei Verwendung der 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_DIROrdner "Plugins" und "Themes" automatisch auf die zugehörigen Unterordner /pluginsund den /themesZweigunterordner setze.

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

Standardmäßig ist dieser Ordner ein Unterordner des Inhaltsverzeichnisses. Wenn Sie also den obigen Workflow verwenden, ist er ein /uploadsUnterordner jedes Zweigstammordners.

Wenn dies für Sie kein Problem ist, gehen Sie einfach damit um. Andernfalls besteht die einfachste Lösung darin, /uploadsin jedem Zweigordner einen Symlink zu dem tatsächlichen Upload-Ordner zu erstellen, den Sie freigeben möchten.

gmazzap
quelle
Danke! Ich mag Ihre Idee wirklich, obwohl sie $_SERVER['SERVER_NAME']nicht zuverlässig ist . /uploadsdir ist kein problem. Ich habe auch mit WP CLI getestet, wenn wir --urlParameter für jede Site übergeben, funktioniert es normal :)
MinhTri
1
@Dan sagte ich in der Antwort: "Die Servervariable 'SERVER_NAME' sollte für Sie funktionieren, zumindest wenn Ihr Webserver richtig konfiguriert ist." Dies bedeutet, dass Sie Ihren Server ordnungsgemäß konfigurieren müssen :) Solange Sie server_namein Nginx oder ServerNameApache einrichten oder was auch immer zu Ihrem Webserver passt, $_SERVER['SERVER_NAME']funktioniert dies nur. Selbst wenn die WP-CLI möglicherweise mithilfe von --urlParametern funktioniert , können bei anderen Befehlszeilentools Probleme auftreten, wenn Sie die Umgebungsvariable nicht verwenden. WP CLI "verspottet" die URL der Anforderung in einem CLI-Kontext, andere Befehle tun dies wahrscheinlich nicht.
gmazzap
1
Natürlich werde ich sicherstellen, dass SERVER_NAMEdas richtig konfiguriert ist. Über env vars habe ich phpdotenv verwendet , um es zu beheben. Derzeit scheint alles
super
0

Dies ist mit einem Symlinking und ein wenig Planung möglich. Ich habe im Internet nach dem gleichen Thema gesucht. Zum Schluss alles zusammenstellen und zum Laufen bringen.

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

Ich habe ein Verzeichnis wie master-tnp / theme 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 Direktive zum Folgen von Symlinks aktiviert ist.

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

Cpyder
quelle