Wordpress & Jails: nginx, MariaDB, PHP & Co.

grau

Member
Hallo liebes Forum,

ich versuche meine Fragen kurz und knackig zu halten und freue mich auf Eure Einschätzung und Hilfestellung: Thema Wordpress auf FreeBSD in jails.

Aktuell läuft Wordpress in einer einzigen Jail inkl. nginx als Webserver (inkl. memcached für frontend-caching), php-fpm und mariadb. Nun möchte ich aber die "Vorteile" von Freebsd Jails nutzen und möglichst alle Komponenten sinnvoll splitten - evtl. auch das ganze für spätere (erfolgreiche) Zeiten skalierbarer zu machen.

Erste Idee war die Trennung der Datenbank (MySQL bzw. MariaDB) in einem eigenen Jail. Aber wie "klein" lässt sich eine solche Geschichte denn noch "sinnvoll" aufdröseln?

Macht eine Trennung von "Webspace" (Wordpress Core und Medien) und PHP in eigenen, separaten Jails Sinn? Vorteil wären hier ja auch mehrere Upstream Server für PHP bzw. Load Balancing sowie Redundanz.

Und wie schaut es mit der "Idee" eines "Load-Balancers" auf HAProxy oder Nginx Basis aus? Sollte ich mich mit mehreren MySQL Servern oder sogar einem Galera-Cluster beschäftigen?

Ich freue mich auf Eure Meinungen.
 
Aus meiner Perspektive ist die Frage wie groß das Ganze ist/werden soll und welche Anforderungen du daran hast.
Den httpd und das dbms zu trennen macht meiner Meinung nach nur dann Sinn wenn das dbms auch anderen Jails/Servern Dienste zur Verfügung stellt. Ist es wiederum nur für diese eine Jail da, würde ich es drin lassen. Dann ist alles aus einem Guss und du öffnest damit nicht mehr unnötige Tore (natürlich sollte das dbms dann nicht an der Netzwerkkarte nach außen lauschen).
httpd und php zu trennen halte ich für wenig sinnvoll. Die beiden Dienste sind sehr dich beieinander. Ich sehe keinen Sicherheitsgewinn aber erhöhte Komplexität (was wiederum das Tor für Sicherheitsprobleme ist).

Wenn du Cluster und Load-Balancer bauen willst klingt das nach einer recht großen Installation. Dann sind evtl. völlig andere Gesichtspunkte interessant. Das ganze geclustere und gebalace bringt aber nix wenn die Dienste auf dem selben Blech laufen. Richtig Sinn macht das erst wenn du es über unterschiedliche Hardware verteilst, denn die Jails teilen sich ja alle die selben Ressourcen. Im Gegenteil, der Overhead würde vermutlich dein System eher einbremsen.

Um bessere Antworten geben zu können wäre es gut zu wissen wie dein Anwendungsbereich genau aussieht und wo deine Reise hin gehen soll.
 
Ich habe gerade solch ein Wordpress-Setup eingerichtet - und das läuft prima:

Web-Jail: Webserver (bei uns www/h2o) + PHP-FPM und alle Dateien, die diese ausliefern sollen (sowohl PHP als auch statische... hier noch zu trennen und PHP-FPM in einer eigenen Jail laufen zu lassen, wäre mir zu kompliziert. Dann müsstest Du die Resourcen aufteilen auf verschiedene Jails, denn die statischen werden ja in der Jails des Webservers benötigt, die dynamischen kämen in die PHP-Jail... das wäre nur dann einfach, wenn absolut keine Schreibrechte erfolgen und ich die Dateien per mount und nullfs read-only in beide Jails einhängen könnte)

Maria-Jail: Hier läuft der MariaDB-Server, der für Wordpress und Piwik benötigt wird

Außerdem nutzen wir noch eine Anwendung, die MongoDB nutzt, daher haben wir hierfür auch noch eine

Mongo-Jail: HIer läuft ausschließlich der Mongo-Server

Sicherheit war nicht der primäre Grund für die Trennung in verschiedene Jails. Aber ich finde es leichter wartbar: Als jetzt MongoDB 3.2 in den Ports auftauchte, habe ich die in einer weiteren Jail gebaut und als alles lief, dann recht einfach gegen die Jail mit Mongo 2.6 ausgetauscht. Nachteil in Sachen Wartung ist natürlich, dass ich sowohl die Jails als auch die Packages jeweils separat aktualisieren muss:

freebsd-update -b /pfad/zur/ersten/Jail fetch usw.
freebsd-update -b /pfad/zur/ersten/Jail install usw. und dann
pkg -j <ersteJail> upgrade usw.

Aber das ist noch überschaubar in meinem Setup.

Die Jails haben bei mir nur private IPv4- und IPv6-Adressen und lediglich für die Web-Jail gibt es Redirects, so dass man den Web- und den SSH-Server in dieser Jail erreichen kann.

Übirgens, ich hatte auch mal getestet: MariaDB in derselben Jail laufen zu lassen, brächte einen Geschwindigkeitsvorteil. In meinen sehr simplen Tests, waren es ca. 0,1 Sekunde, die die Jail-Variante langsamer war. Denn der Austauch per TCP/IP hat einfach mehr Overhead als der direkte Socket in derselben Jail. Und ja: Man könnte Sockets auch über Jails hinweg nutzen - aber zumindest ist dann der Sicherheitsgewinn ziemlich weg - Du hast wieder direkten, schreibenden Austausch zwischen zwei Jails.
 
Hallo Rakor und vielen Dank für Deinen Beitrag, der mir in der Tat sehr viel geholfen hat.

Natürlich wird jeder Blogbetreiber hoffen, dass sein Projekt "wirklich groß" wird. Da ich allerdings diese Geschichte aktuell wohl eher nicht auf verschiedene Hardware / Maschinen auslagern werde, dürfte es für mich tatsächlich nur wenig Sinn machen, das ganze Ding auseinanderzuwursteln.

Versprochen habe ich mir aber in der Tat eine "bessere Möglichkeit zu skalieren" und bereits jetzt dazu entsprechende Grundsteine zu legen (aber da meine Hardware (bei weitem) noch nicht ausgereizt ist, bleibe ich wohl vorerst bei meiner gut funktionierenden "ein Jail für alles" Lösung).

Kurzum: es bleibt wohl alles vorerst beim alten - dank Deiner sehr inspirierenden Hilfe, lieber Rakor. Vielen Dank dafür!
 
@SolarCatcher
Vielen Dank ebenfalls für Deinen Beitrag. Meine Idee, PHP in weiteren Jails laufen zu lassen, ähnelt Deinem Gedankengang bei MongoDB: Aktuell läuft das Wordpress auf php56, würde jedoch mittelfristig gerne auf php70 upgraden (allerdings fehlt mir noch pecl-memcached für php70).
Theoretisch wäre so also ein recht schneller und unkomplizierter Austausch von php-jails mit unterschiedlichen php-Versionen und -Extensions möglich (neue php-jail erstellen und einfach switchen). Allerdings gibt mir die Sache mit den Dateien und Schreibrechten schon zu denken.

Ich bin zwischenzeitlich über einen Artikel einer "High Performance Wordpress Installation" gestolpert.

Hier wurde ein nginx als ReverseProxy & Load Balancer vor mehrere Wordpress Jails (mit kompletter Wordpress Installation, php-fpm & Datenbank) ein und desselben Blogs geklemmt. Die statischen Daten der Jails wurden dort via BittorrentSync synchron gehalten - wie genau die Sache mit der Datenbank gelöst wurde weiss ich leider nicht mehr (und finde diesen Beitrag irgendwie auch nicht mehr).
 
@grau so ein Setup wäre mir definitiv viel zu kompliziert... und daher fehleranfällig (da gehe ich voll mit @Rakor mit)

Aber es erinnerte mich an diesen tollen Artikel über den (erfolgreichen) Versuch, eine Webseite für die Veröffentlichung des nakten Hinterns von Kim Kardashian vorzubereiten. Nette Lektüre, wenn einem Load Balancer und Varnish Caches und all das Spaß machen...

Was php70 betrifft: Geht mir genauso. Ich warte auf pecl-mongo oder vielleicht sogar ein pecl-mongodb... Allerdings sind unsere Wordpress-Seiten hautpsächlich statisch. Der wirklich dynamische Content kommt aus der anderen Anwendung. Insofern können wir recht gut eine der tyischen Caching-Lösungen für WP nuzten. Bei uns ist es derzeit der "Falcon Cache" von Wordfence. Klappt einwandfrei - das heißt im Normalfall kommt der Webserver gar nicht mit PHP/MariaDB in Berührung, sondern serviert gleich die statische HTML-Kopie.

Ich will demnächst noch WP Rocket testen, weil da die Optimierungen sehr interessant klingen und die auf verschiedenen Seiten berichteten Tests sehr gute Ergebnisse brachten (Lazyloading von Bilder, Defer von Javascripten, Optimierung der Google-Fonts,...). Denn am Ende ist es doch immer und immer und immer wieder das Frontend, was über die Webperformance entscheidet. Hier die Javascripts asyncron auszuliefern oder dort die wichtigsten Bilder besser komprimiert zu haben, ist viel effektiver als ein bisschen mehr Performance durch den Einsatz von php70 statt php56. Und dann kann man auch mit HTTP/2, Server Push, optimierter SSL-Konfiguration noch einiges "herumspielen"...
 
Zurück
Oben