So teilen Sie die WordPress-Kernbibliothek

7

Wir haben zehn Blogs, die auf kleinen EC2-Instanzen ausgeführt werden. Wir möchten sehen, ob alle Blogs denselben WordPress-PHP-Code verwenden können

  1. Wenn ich Wordpress aktualisiere, werden alle Blogs aktualisiert
  2. Speichern Sie Speicher in Apache / mod_php, da keine doppelten Skripte oder Bytecodes im Cache vorhanden sind (bei APC).

Wir können MU nicht verwenden, da wir alle Blogs in einer separaten Datenbank benötigen. Wenn wir sie später verschieben müssen, ist dies viel einfacher.

Hat das schon mal jemand versucht?

Yoga
quelle
1
"Instanzen" oder "Instanz"?
SickHippie

Antworten:

12

Angenommen, alle Installationen befinden sich auf derselben Instanz und können daher dieselben Dateien gemeinsam nutzen. Dann müssen Sie hauptsächlich alle benutzerdefinierten Inhalte außerhalb der Hauptordner von WordPress speichern.

Also wollen Sie zuerst irgendwo eine neue Kopie von WordPress, unberührt (und unberührbar, der springende Punkt ist, eine einzige Kopie zu haben, oder?).

Als Nächstes verwenden Sie Hardlinks oder Symlinks, um diese Dateien an anderer Stelle zu spiegeln. Normalerweise verwenden Sie in Unix-ähnlichen Umgebungen ln -sSymlinks. Wie dies speziell zu tun ist, bleibt dem Leser überlassen, aber im Wesentlichen, wenn Sie Ihr WordPress in / example / wp haben, würden Sie so etwas ln -s /example/wp /home/username/public_html/wpoder so etwas tun . Wenn Sym-Links Probleme verursachen, wechseln Sie stattdessen zu Hardlinks.

Die beiden wichtigsten Dinge, die sich im Hauptordner von WordPress befinden, aber benutzerdefiniert sind und nicht Teil von "core" sind wp-config.php, sind Ihre Datei und der gesamte wp-contentOrdner. Wir müssen diese also für jede Site außerhalb des Hauptordners / wp abrufen. Beides ist möglich.

Die Datei wp-config.php ist einfach, da WordPress standardmäßig auch ein Verzeichnis von sich aus überprüft. Wenn sich Ihr wp-Ordner in befindet /home/username/public_html/wp, /home/username/public_html/wp/wp-config.phpsucht WP nach , aber wenn dies nicht der Fall ist , wird auch danach gesucht /home/username/public_html/wp-config.php. Machen Sie einfach Ihre wp-config.php-Dateien im obigen Verzeichnis.

Sie können den Ordner wp-content außerhalb des Hauptverzeichnisses wp neu positionieren, indem Sie Ihrer Datei wp-config.php Code wie folgt hinzufügen:

 define( 'WP_CONTENT_DIR', '/home/username/public_html/custom-content' );
 define( 'WP_CONTENT_URL', 'http://example.com/custom-content');

Und dann erwartet WordPress, dass der Inhalt und alles darin stattdessen dort leben. Der Ordner wp-content im Verzeichnis / wp wird vollständig ignoriert. Sie müssen diesen Ordner erstellen und Ihre Themen / Plugins / Uploads dort ablegen.

Der letzte Schritt ist die Verwendung von .htaccess (oder einiger anderer Konfigurationsdateien, wenn Sie Apache nicht verwenden). Sehen Sie den Ordner / wp im Stammverzeichnis als sichtbar an, als ob er dort wäre. Das ist nicht schwierig, es erfordert nur ein wenig Nachdenken. Die normalen WordPress .htaccess-Regeln (für nicht standardmäßige Permalinks) weisen Apache im Wesentlichen an, alle Anforderungen an die Hauptdatei index.php von WordPress umzuleiten, wenn die Anforderung nicht auf eine tatsächlich vorhandene Datei verweist. Dadurch können hochgeladene Bilder und dergleichen direkt außerhalb von WP funktionieren.

Hier ist ein Beispielregelsatz, den Sie im Verzeichnis /home/username/public_html/.htaccess verwenden können, um dies nachzuahmen, aber auch das Verzeichnis / wp berücksichtigen.

Options -Indexes
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/wp/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /wp/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ wp/index.php [L]

Im Wesentlichen sagen diese Regeln zwei Dinge aus.

Erstens: Wenn die angeforderte URL nicht / wp / enthält und keine Datei oder kein Verzeichnis vorhanden ist, ändern Sie die URL mithilfe eines internen Umschreibens, um / wp / vor sich zu haben. Dies hat zur Folge, dass alle URLs von http://example.com/whatever auf http://example.com/wp/whatever neu zugeordnet werden . Grundsätzlich funktioniert es so, als ob / wp / tatsächlich im Stammverzeichnis der Site wäre.

Die zweite Regel ändert Anforderungen für die Stamm-URL (nur das /) in die Datei /wp/index.php. Dies ist möglicherweise nicht unbedingt erforderlich, funktioniert aber bei mir.

Dadurch kann das Verzeichnis / wp sozusagen "rein" bleiben, und Sie können Symlinks oder Hardlinks verwenden, um die One-True-WP-Installation an einem anderen Ort zu belassen, der von ortsspezifischen Dingen unberührt bleibt.

Beachten Sie, dass viele schlecht geschriebene Plugins (und sogar einige Themen) davon ausgehen können, dass sie sich im Hauptordner von wp-content befinden. Alles, was etwas Dummes wie include '../../../wp-load.php';oder ähnliches tut, wird durch diesen Ansatz zerstört. Dieser Fehler ist seitens des Plugins / Themes. Kein Plugin / Theme sollte jemals wp-load enthalten .

Otto
quelle
neugierig, ob jemand die Regeln hat, die erforderlich sind, um dies mit nginx zu tun, und wenn ja, könnten sie diese teilen oder auf einen Artikel verweisen. Ich möchte dies tun, da ich apc, fastcgi, memcache verwende und gerne für alle Dateien, die ich zwischenspeichern muss, auf dem RAM speichern würde. wpmu ist keine Option, da es sich um separate Client-Sites auf demselben Server mit verschiedenen Benutzern handelt
shawn
0

Es gibt ein paar Dinge, die in Ihrer Grundvoraussetzung keinen Sinn ergeben. Wenn Sie zehn Blogs in separaten Instanzen haben, können diese nicht dieselbe Codebasis verwenden - zehn EC2-Instanzen = zehn Server, daher sind zehn Dateisätze erforderlich. Zweitens haben Sie aus demselben Grund zwangsläufig doppelte Skripte. Können Sie zwischen Instanzen sprechen? Ich glaube nicht, aber selbst wenn Sie zwei Sites haben, die versuchen, von derselben Codebasis aus ausgeführt zu werden, besteht zumindest ein wp-config.phpKonflikt mit den Datenbankeinstellungen.

Ich bin mir nicht sicher, ob Multisite nicht der richtige Weg ist. Während alle Blogs existieren in der gleichen DB, sie alle haben einen Präfix Blog spezifische Tabelle, so dass DB Backups einfacher (eine DB vs zehn) und damit nach wie vor für die Portabilität (siehe hier für weitere Informationen). Es ist etwas mühsam, ein Blog von einer Multisite zu entfernen. Es ist nicht mühsamer, als eine einzelne Site auf eine andere Domain zu verschieben.

Es hört sich so an, als ob Sie zehn verschiedene WP-Umgebungen haben möchten, aber nur die vollständige Codebasis für eine von ihnen, und das ist das Herzstück von WPMS - eine Codebasis, mehrere Sites. Ihre Anforderung von "derselben Codebasis, aber nicht von mehreren Standorten" schließt sich also gegenseitig aus, weshalb es 4 Tage her ist und niemand darauf geantwortet hat. Es hört sich so an, als müssten Sie Ihre Anforderungen ein wenig überdenken.

Wenn Sie alternativ nur sicherstellen möchten, dass WP global aktualisiert wird, sollten Sie Ihre WordPress-Kerninstallationen in SVN einbinden . Sie können dasselbe für einzelne Plugins tun, solange sie sich im Repository befinden. Auf diese Weise können Sie einfach ein Shell-Skript ausführen, um die Instanzen und svn upalle zehn gleichzeitig zu treffen . Dies scheint jedoch eine Menge Arbeit zu sein, nur um eine Installation an mehreren Standorten zu vermeiden.

SickHippie
quelle