Wer bei NGINX und HHVM an einen englischen Musiksender oder ein neues, unbekanntes Subgenre von HipHop denkt, sollte unbedingt weiterlesen – für alle anderen, die ihren selbst gehosteten WordPress-Server bereits mit der alternativen PHP-Implementierung betreiben, kann es sich aber dennoch lohnen, einen Blick in diesen Beitrag zu werfen. Diese Anleitung richtet sich an Neulinge, die den Wechsel von Apache2 auf NGINX möglichst sauber und effektiv umsetzen möchten.
Vorwort
Nachdem ich diese Woche meinen Server komplett neu aufgesetzt habe – über die Jahre hatte sich so mancher Konfigurationsmüll angesammelt – bin ich bei der Einrichtung meines NGINX-Servers zum ersten Mal bewusst auf HHVM gestoßen. Hierbei handelt es sich, um eine relative neue Möglichkeit PHP-basierte Webseiten auszuliefern.
Puristen mögen mit gutem Recht über mein Vorgehen die Nase rümpfen, wer einen raschen und umkomplizierten Wechsel von Apache2 hinlegen möchte, ist mit der Easy Engine (ee) von RT Camp indes gut aufgehoben. Zum Einsatz kommen folgende Zutaten zum Nachkochen:
- Easy Engine | Ubuntu 14.04WordPress mit FastCGI Cache
- Memcached + Tuning
- HHVM mit Fallback auf PHP5-FPM
- HHVM automatisch neustarten
- UFW-Firewall mit den wichtigsten Regeln
Von Apache2 zu NGINX – Easy Engine is the easy way!
Easy Engine bietet gerade für Neulinge und nicht geübte WordPress-Betreiber eine effektive Möglichkeit in die NGINX-Welt hineinzuschnuppern.
Apache2 abschalten
Zunächst einmal schalten wir Apache2 ab und entfernen das Startup-Script, damit es nicht bei jedem Neustart des Servers automatisch mitläuft. Meldet euch per SSH-Login an euren Server an. Gibt die folgenden Befehle in den Terminal:
service apache2 stop update-rc.d -f apache2 remove
Falls ihr bereits jetzt Apache2 komplett von eurem System verbannen möchtet, schickt ihr diesen Befehl hinterher:
sudo apt-get remove apache2
Easy Engine installieren und anpassen
Da ich manchmal Probleme bei der Installation hatte, führt ihr folgenden Befehl vor der Installation von Easy Engine aus:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1C4CBDCDCD2EFD2A apt-get udate
Nun seid it ihr bereit für die Installation von NGINX mit PHP5-FPM.
wget -qO ee rt.cx/ee && sudo bash eeapt-get udate
Easy Engine liefert auch einige wichtige weitere Komponenten mit, die die Administration eures Servers erleichteren. Diese Apps könnt ihr optional mit installieren – ich empfehle es jedenfalls. Der Befehl hierfür lautet:
ee stack install
Später könnt ihr unter der Adresse auf die Admin-Tools zurückgreifen:
http://eurewebseite.de:22222
Bei der Installation zeigt euch Easy Engine im Terminal die benötigten Login-Daten an. Habt ihr diese verlegt, gebt ihr später folgenden Befehl ein, um einen gesicherten Zugang zu erhalten:
ee secure --auth nutzername
Im nächsten Schritt fragt Easy Engine nach einem Passwort – ansonsten wird ein zufällig generiertes vergeben.
Easy Engine Konfigurationsdatei anpassen
Bevor ihr euch an die Installation der Wordpress-Seite macht, würde ich euch empfehlen, händisch noch einige Änderungen an der Easy Engine-Konfigurationsdatei vorzunehmen. Diese befindet sich unter etc/ee/ee.conf
.
Die fett dargestellten Änderungen solltet ihr nach euren eigenen Bedürfnissen hin durchführen. Der Übersichts halber habe ich die Konfigurationsdatei eingeklappt.
WordPress-Webseite per Befehl installieren
Prima, jetzt kann es losgehen. Wir erstellen eine Wordpress-Seite samt Datenbanken und FastCGI-Cache. Die entsprechende Konfiguration von NGINX wird automatisch durchgeführt.
ee site create eurewebseite.de --wpfc
Am Ende zeigt euch Easy Engine die Zugangsdaten nochmal an und ihr könnt euch im WordPress-Backend anmelden. Hier müsst ihr noch die WordPress-Sprache auf Deutsch umstellen – das bekommt ihr aber hin.
Standardmäßig installiert werden zwei Caching-Plugins, Nginx Helper und W3 Total Cache.
Ihr könnt selbstredend auch eine andere Kombination erstellen (ohne Cache, WP Super Cache etc), den kompletten Befehlssatz für die Erstellung von (WordPress)-Webeiten findet ihr hier.
Optional, aber empfehlenswert: PHP5-memcached installieren und anpassen
Hierzu installieren wir memcached und erhöhen die Speicherkapazität in der Konfigurationsdatei. Zunächst installieren wir die benötigten Pakete:
apt-get install memcached php5-memcache service php5-fpm restart
Danach legen wir wieder einmal selbst Hand an.
- Öffnet
/etc/memcached.conf
- Sucht den Wert
-m 64
- Ändert ihn auf
-m 512
.
512 MB sollten für den Alltag kleinerer Projekte ebenfalls reichen. Bei Bedarf könnt ihr den Wert entsprechend anpassen. Auf sehr umtriebigen könnt ihr notfalls bis auf 1 GB hochgehen – natürlich nur, wenn eurer Server das verkraftet. Über den Link http://eurewebseite.de:22222/cache/memcache/
(Login und Passwort eingeben!) stehen mit Hilfe von phpMemcachedAdmin umfangreiche Statistiken bereit:
Startet memcached neu:
service memcached restart
Öffnet etc/php5/mods-available/memcache.ini
Fügt die beiden Zeilen unten ein:
session.save_handler = memcache session.save_path = "tcp://localhost:11211"
Ändert nun in W3 Total Cache Object Cache und Database Cache auf Memcached. Alle anderen Caching-Optionen schaltet ihr bitte ab – sie bringen in unserem Szenario überhaupt nichts. Alternativ könnt ihr ein anderes Caching Plugin einsetzen, etwa Cachify. eine Anleitung samt Anpassungen für Memcached gibt es hier.
Persönlich habe ich mich an das WP Rocket-Plugin gewöhnt, teste aber derzeit noch die hier beschriebene Konfiguration. Wann und warum könnt ihr an dieser Stelle nachlesen, ansonsten seid ihr aber bereits jetzt gut aufgestellt. Alternativ könnt ihr redis als Object Cache einsetzen.
Kommt das WP Rocket Plugin zum Einsatz, wird die gesamte Seite als eine einzige HTML-Datei gespeichert, es finden keine PHP- und Datenbankabfragen statt, was für ein gewöhnliches Bloggerszenario i.d.R. auch nicht weiter schlimm ist. Hier zu befragt äußerte sich Jean-Baptiste Marchand-Arvier, seines Zeichens federführender Entwickler des Plugins:
Regarding HHVM, you’ve nothing to do, this is working.
When you use WP Rocket, all your content is grabbed and saved as an html file. So there is no PHP/Mysql request at all, that’s why a database cache is no needed. So you won’t be able to use memcached.
HHVM – neuer Sound für eure tauben PHP-Ohren
Bislang liefert Easy Engine HHVM nicht aus, so wie es klingt, dürfte es aber irgendwann in der nicht allzu fernen Zukunft standardmäßig implementiert sein.
wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add - echo deb http://dl.hhvm.com/ubuntu trusty main | sudo tee /etc/apt/sources.list.d/hhvm.list sudo apt-get update sudo apt-get install hhvm
Für Laien ganz praktisch, HHVM liefert ein Installationskript mit, das ihr nur auszuführen braucht. Änderungen an NGINX werden damit automatisch durchgeführt. Ignoriert eventuelle Fehlermeldungen und denkt nicht an weiße Elefanten!
sudo /usr/share/hhvm/install_fastcgi.sh sudo update-rc.d hhvm defaults
UFW-Firewall einrichten
Falls noch nicht installiert, holt ihr euch UFW auf eurer System:
apt-get install ufw
Die folgenden Regeln sind hierbei empfehlenswert. Der Server antwortet nun auf dem SSH Port, HTTP, HTTPS sowie den Easy Engine-Admin-Bereich. Die letze Anfrage nach sudo ufw enable
bestätigt ihr bitte.
sudo ufw allow 22 sudo ufw allow 22222 sudo ufw allow 80 sudo ufw allow 443 sudo ufw enable
Die letze Anfrage nach sudo ufw enable bestätigt ihr bitte. Die Firewall nimmt ihr nun in Betrieb:
sudo service ufw restart
HHVM automatisch neustarten
Da ihr sicher lieber schreibt, als ständig danach zu schauen, ob irgend ein Dienst seine Arbeit sauber verrichtet und ihr auch Gewissensbisse habt, jemanden für diese Sklavenarbeit zu bezahlen, lasst ihr das lieber automatisch erledigen. Mit ps-watcher
habt ihr schnell das richtige Werkzeug zur Hand.
apt-get install ps-watcher
Ändert die Konfigurationsdatei oder erstellt sie bitte: in /etc/ps-watcher.conf . Fügte folgende Zeilen ein
[hhvm]
occurs = none
action = service hhvm restart
Den automatischen Start wenn der Server (neu) bootet:
sed -i -e 's/# startup=1/startup=1/g' /etc/default/ps-watcher
Das Script wird mit folgendem Befehl initialisiert:
service ps-watcher start
Fazit
Soweit haben wir nun einen Server eingerichtet, der wesentlich performanenter ist als vergleichbar teure Hosting-Pakete. VPS-Server gibt es für weniger als 10 Euro im Monat, die für einen (oder mehreren) kleinen Wordpress-Blogs genug Power liefern. Alternativ gibt es natürlich auf WordPress spezialisierte Hoster wie Synthesis, WPEngine oder SiteGround, die aber i.d.R. weniger Performance liefern, dafür aber u.U. eine Stange Geld kosten.
Quellen/zum Weiterlesen
Easy Engine
Using HHVM with PHP-FPM Fallback
WordPress beschleunigen mit Wp Redis Cache
PS-Watcher