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

easyengine

 

 

 

 

 

 

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.

Nicht verpassen:
Disqus als Wordpress-Bremse eliminieren mit Disqus Conditional Load

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.

[wpsm_toggle title=“ee.config“]

EasyEngine Configuration # # All commented values are the application default # [ee] ### Toggle application level debug (does not toggle framework debugging) # debug = false ### Where external (third-party) plugins are loaded from # plugin_dir = /var/lib/ee/plugins/ ### Where all plugin configurations are loaded from # plugin_config_dir = /etc/ee/plugins.d/ ### Where external templates are loaded from # template_dir = /var/lib/ee/templates/ [log.logging] ### Where the log file lives (no log file by default) file = /var/log/ee/ee.log ### The level for which to log. One of: info, warn, error, fatal, debug level = debug ### Whether or not to log to console to_console = false ### Whether or not to rotate the log file when it reaches max_bytes rotate = true ### Max size in bytes that a log file can grow until it is rotated. max_bytes = 512000 ### The maximun number of log files to maintain when rotating max_files = 7 [stack] ### IP address that will be used in Nginx configurations while installing ip-address = 127.0.0.1 [mysql] ### MySQL database grant host name grant-host = localhost ### Ask for MySQL db name while site creation db-name = True ### Ask for MySQL user name while site creation db-user = True [wordpress] ### Ask for WordPress prefix while site creation prefix = True ### User name for WordPress sites user = NUTZER (statt admin) ### Password for WordPress sites password = PASSWORT (statt zufällig generiertes) ### EMail for WordPress sites email = [email protected] [update] ### If enabled, load a plugin named update either from the Python module ### ee.cli.plugins.example or from the file path ### /var/lib/ee/plugins/example.py enable_plugin = true [sync] ### If enabled, load a plugin named update either from the Python module ### ee.cli.plugins.example or from the file path ### /var/lib/ee/plugins/example.py enable_plugin = true [/toggler]

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.

Nicht verpassen:
Über das Bloggen mit Wordpress, TechBlogs, SEO, die Konkurrenz, bla bla bla (fill in your favourite Keyword)

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.

  1. Öffnet /etc/memcached.conf 
  2. Sucht den Wert -m 64
  3. Ä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:

phpMemcachedAdminStartet 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

HHVMauthors

Nicht verpassen:
Disqus als Wordpress-Bremse eliminieren mit Disqus Conditional Load

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.

Achtung: HHVM ist in EasyEngine 3.1 bereits implementiert
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

20140921003559_ufw_firewall_icon

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.

Nicht verpassen:
Yoast WordPress SEO 2.0: Reloaded Usability & Google Knowledge Graph

Quellen/zum Weiterlesen

Easy Engine
Using HHVM with PHP-FPM Fallback
WordPress beschleunigen mit Wp Redis Cache
PS-Watcher

Keine weiteren Beiträge