LEMP Stack – der perfekte Webserver

Zugegeben, es ist schon wieder ein bissen mehr Zeit verstrichen, seit ich den letzten Teil zum perfekten Server veröffentlicht habe, aber wie heißt es so schön, besser spät als nie! Im Grund genommen ist dies hier ja auch nur eine Art Nachschlagewerk, gefüllt mit meinen persönlichen Empfehlungen.

Ich hatte letztes Jahr eigentlich schon mal einen relativ ausführlichen Artikel zum Thema LEMP verfasst, mich nach anfänglichem Überlegen dann aber doch dazu entschieden einen neuen Artikel zu verfassen – wobei ich hier ein bisschen weiter ins Detail gehen werde, bzw. wir einen Teil selbst compilieren werden. Wer nur eine schnelle und simple Anleitung sucht, der kann sich ja noch mal das alte Tutorial angucken.

Als Grundlage für unseren LEMP Server bzw. unser LEMP Stack dienen Debian, nginx, php und MariaDB.

Ich hatte zwischenzeitlich mal Testszenarien mit HHVM statt php, bzw. HHVM und php als Fallback laufen, ebenso hatte ich zwischenzeitlich MySQL oder MungoDB statt MariaDB im Einsatz. Mit allen Kombinationen war ich eher weniger zufrieden, weswegen ich mich eben für oben genannte Komponenten entschieden habe.

So dann wollen wir mal, immer schön der Reihe nach.

System vorbereiten

Auch wenn wir unser System gerade erst aufgesetzt haben, kann es nicht schaden es zu Beginn zu updaten – gerade wenn man eine CD als Installationsmedium verwendet, oder fertige Images vom Hoster.

Standardmäßig kommt Debian mit dem Texteditor Nano daher, da ich aber kein großer Fan von Nano bin und quasi mit Vim aufgewachsen bin, installieren wir an dieser Stelle schnell noch Vim. Theoretisch sollte den meisten Usern eigenglich auch vim reichen, die vim-nox Version kommt mit zusätzlichem Support von tcl, ruby. Lua und perl daher – je nachdem, was man noch so vorhat.

nginxInstallation Nginx

Für die Installation von nginx gibt es zwei Möglichkeiten. Die Erste ist sicherlich die bequemere, aber in meinen Augen nicht gleich bessere Variante. Außerdem ist die zweite Möglichkeit die einzige, um zusätzlich Module zu installieren. Wobei nginx hier mittlerweile auch immer offener für das nachträglich integrieren von Modulen wird, wie z.B. das GeoIP Modul.

Installation via APT

Die Installation via APT ist sicherlich eine feine Sache, nur leider installieren wir damit nicht wirklich die neuste Version, sondern die letzte ’stable‘, dh.h stabil laufende Version. Mittlerweile ist man hierbei immerhin schon bei der Version 1.10.1 angekommen, vor wenigen Monaten war das noch die Version 1.8.1, in der es leider keine SSL 2 Unterstützung gab. Wer auf Nummer Sicher gehen will, der kann hier beruhigt die stable Version installieren – profitiert aber damit leider nicht von aktuellen Neuerungen der ‚mainline‘ Version.

Installation via Source

Da wir in unserem Fall die mainline Version von nginx installieren wollen, müssen wir ein wenig mehr Hand anlegen. Belohnt werden wir dafür aber mit den neusten Funktionen und Features. Die mainline Version wird eigentlich in der Regel ziemlich oft geupdatet und weiterentwickelt. Aktuelle Version wäre hier die 1.11.3.

Zunächst benötigen wir die passenden Werkzeuge, um nginx selbst aus den source files zu kompilieren, d.h. auf unserem System nach unseren Wünschen zusammen zu bauen.

Ähnlich wie bei der Installation via APT müssen wir das passende Repository hinzufügen und die Daten herunterladen.

Anschließend laden wir die passenden Files herunterladen und wechseln in den Ordner.

Jetzt sind wir eigentlich schon fast am Ende der Datensammlung angelangt. Ich für meinen Teil installiere aber gerne immer noch ein Cache Purge Modul. Das ist zwar schon ein wenig älter, erfüllt aber dennoch bestens seinen Dienst. Besonders praktisch, wenn ihr öfters Artikel auf WordPress und Co veröffentlicht, oder bearbeitet. Dank nginx eigenem Cache spart man sich eigentlich sämtliche Cache Plugins, die die WordPressinstallation eh nur noch langsamer werden lassen.

Im zweifel müsst ihr  die <nginx Version> durch eure aktuelle Version ersetzen. Wenn ihr zusätzlich andere Module, wie z.B. das PageSpeed Modul von google – welches ich nach längerem Test für nutzlos bewertet habe – installieren wollt, dann könnt ihr genau so vorgehen und die passenden Files in den modul Ordner kopieren.

Nun müsst ihr nur noch die nginx Installation anpassen, da nginx ja nicht riechen kann, dass ihr noch zusätzliche Module installieren wollt. Ebenfalls ändere ich die Rechte Debian-typisch auf www-data. Da ich relativ faul bin und die config files nicht einzeln von Hand öffnen möchte, machen wir das ganze per sed (stream editor). Achtet hierbei wieder auf die <nginx Version>

Soooo, fast geschafft, jetzt basteln wir uns aus den source files und unseren Modulen eine passende Installationsdatei.

Wir erhalten in der Regel nicht nur ein File, sondern eine ganze Hand voll Files. Diese könnt ihr nun nach Belieben installieren. Eine Auflistung erhalte ihr mit „ls

In unserem Fall wären das z.B. für die reine nginx Installation inkl. unserer selbst eingebauten Module. Bzw. zusätzlich für das GeoIP Modul:

Das hätten wir geschafft. Nginx sollte nun eigentlich erfolgreich auf eurem Server laufen.

Zu guter Letzt schließen wir noch unsere mühevoll von Hand installiere nginx Version von automatischen Updates via APT aus. Es kann sonst nämlich passieren, dass euch APT sonst einfach die stable Version drüber bügelt und all eure Module flöten gehen – selbst schon passiert, also Vorsicht!

Konfiguration Nginx

Kommen wir nun zur Konfiguration von nginx. Hier kommt es sicherlich auf persönliche Vorlieben an, was die Ordnerstruktur etc. angeht, also seht das Ganz nicht so eng, sondern nutzt es evtl. als Leitfaden.

Zunächst erstelle ich mir einen Ordner wo ich später sämtliche Files für den Webserver ablege, und setzte die passenden Berechtigungen.

Als nächstes erstelle ich mir gerne vier Ordner. Einen für alle gängigen config files, einen für alle vhost Konfigurationen, einen für die aktivierten vhosts und einen für alle Cache files.

In den cfg Ordner kommen alle meine configs, ganz gleich, ob ich sie verwende, oder nicht. Diese importiere ich dann quasi bei Bedarf in der Hauptkonfiguration.

Im Ordner sites-available landen alle vhost files und im Ordner sites-enabled lediglich symlinks, d.h. Verlinkungen. Somit kann es mir nicht passieren, dass ich aus Versehen irgendwelche Files lösche, bzw, habe ich so die Möglichkeit schnell Änderungen vorzunehmen, oder bei Bedarf bestimmte configs zu aktivieren bzw. deaktivieren, ohne dabei immer wieder die Hauptkonfiguration anzupassen.

Die Hauptkonfiguration – nginx.conf ist somit immer schön schlank und übersichtlich.

Das Ganze sieht dann in etwa so aus:

Und hier mal ein paar Configs aus dem cfg Ordner:

 gzip.cfg

headers.conf

Natürlich sind das alles nur Beispiele. Jedem steht natürlich frei, seinen Webserver einzurichten, wie er mag. Auf der Seite des Herstellers findet man z.B. auch einige gut erklärte Beispiele.

Zu guter Letzt starten wir nginx neu, damit alle Änderungen übernommen werden. Keine Sorge, wenn ihr hier irgendwas falsch gemacht habt, startet nginx gar nicht erst, wirklich was kaputt machen könnt ihr also nicht.

Vhost einrichten

Richtig, wie ihr sicherlich bemerkt habt, gibt es bis hierhin noch keine wirkliche Erklärung zum Thema vhost, bzw. der Konfiguration einzelner Websites. Das möchte ich an dieser Stelle auch so belassen. An anderer Stelle, zum Thema WordPress Installation findet ihr dann auch einen vollständigen vhost. LINK FOLGT

Der Übersicht halber hier nur kurz das Standard Beispiel vom Hersteller.

Eine Datei mit dem Inhalt speichert ihr nun im Ordner sites-available ab und erstellt einen symlink zum Ordner sites-enabled. Danach müsst ihr nginx wieder neustarte.

php7Installation php 7

Hier können wir wieder bequem auf APT zurückgreifen! Installiert wird aber nicht direkt php 7, sondern php7.0-fpm – PHP FastCGI Process Manager, php läuft also als eigener Prozess.

Nur was die Konfiguration, falls gewünscht, angeht ist mal wieder Handarbeit gefragt. In diesem Beispiel erhöhe ich die Maximalgröße von Uplaods bzw. deaktiviere das Ausführen von externen php Scripten.

Seht ihr, das ging doch schon mal wesentlich fixer. Damit ist php 7 auch schon einsatzbereit!

mariadbInstallation MariaDB

MariaDB lässt sich Gott sei Dank auch relativ einfach und unkompliziert via APT installieren:

Die Konfiguration ist, wie bei php, ebenfalls ziemlich schnell erledigt. Hierbei unterbinde ich ebenfalls, wie bei php, Zugriffe von Außerhalb.

Damit wäre MariaDB eigentlich schon einsatzbereit. Ich empfehle dennoch kurz zur Absicherung den letzten Schritt:

So geschafft, das wars dann auch schon. Euer LEMP Webserver sollte nun ohne Probleme laufen!

phpmyadminphpMyAdmin

Die Installation von PHPmyAdminist zwar nicht zwingend notwendig, für mich gehört es aber zu den nützlichsten webbased Tools überhaupt! Mit Hilfe von PHPmyAdmin könnt ihr ganz bequem via Browser auf euren SQL Server zugreifen. Hierbei gilt, ähnlich wie bei nginx. Die Version direkt vom Anbieter ist aktueller, als via APT.

Zu guter Letzt erstellen wir uns eben noch schnell ein Update Script, um auch diese Version immer up-to-date zu halten.

Viel Spaß mit eurem neuen Webserver!

Bei Fragen stehe ich natürlich nach wie vor gerne zur Verfügung.

Kommentieren Sie den Artikel

Please enter your comment!
Please enter your name here