Anleitung: LEMP Server unter Debian 8

LAMP steht für Linux, Apache, MySQL und PHP und beschreibt damit einen vollfunktionsfähigen Webserver ganz gut. LEMP beinhaltet quasi die gleichen Komponenten, nur dass an Stelle von Apache NGINX als Webserver verwendet wird. Warum dann nicht LNMP? Weil NGINX wie Engine-X ausgesprochen wird – daher das E.

UPDATE: Es gibt eine neuere Version. Hier gehts zum neuen Artikel.

NGINX hat gegenüber Apache einige Vorteile aber sicher auch einige Nachteile. NGINX läuft auf schwächerer Hardware, z.B. auf vServern um einiges performanter und benötigt wesentlich weniger Ressourcen. Apache hingegen kommt mit einer Vielzahl von Modulen daher und ist immer noch so etwas wie die eierlegende Wollmilchsau. Bei  Apache handelt es sich um einen prozessbasierten Webserver, bei NGINX um einen eventbasierten Webserver. Viel weiter möchte ich auf dieses Thema eigentlich gar nicht eingehen, da hier das Tutorium zum Aufsetzten eines LEMP Servers im Vordergrund stehen soll.

Auch verzichte ich bewusst hier auf MySQL und installiere stattdessen MariaDB. Mehr dazu an passender Stelle.

Das ganze Tutorial bezieht sich auf die Installation eines LEMP Servers unter Debian 8.2 (Jessie).

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.

apt-get update && apt-get upgrade

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.

apt-get install vim-nox

Installation NGINX

Debian ist wohl auch auf Grund seiner Stabilität eines der beliebtesten Server Betriebssystem weltweit. Manch einer behauptet bevor es ein Paket ins Debian Repository schafft, ist es fast schon wieder veraltet. Das hat hinsichtlich der Stabilität sicherlich Vorteile, aber bedeutet im Umkehrschluss natürlich auch Abstriche bei der Aktualität. Da wir aber die neuste Version von NGINX installieren wollen, bedienen wir uns einfach direkt beim NGINX Repository.

wget //nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
echo 'deb //nginx.org/packages/debian/ jessie nginx' >> /etc/apt/sources.list
echo 'deb-src //nginx.org/packages/debian/ jessie nginx' >> /etc/apt/sources.list
apt-get update && apt-get install nginx

Die Paketverwaltung APT ist sicherlich eine feine Sache, aber bevor wir NGINX benutzen können, müssen wir noch ein bisschen Hand anlegen. Keine Sorge, das dauert keine 2 Minuten – es sind nur ein paar Änderungen in der Config.

vi /etc/nginx/nginx.conf

Wir ändern in der nginx.conf den default user zu www-data, passen den worker_processes an, wobei ihr hier die Anzahl eurer CPU Kerne verwenden solltet – hat euer Root Server bzw. vServer also einen CPU Kern, tragt ihr hier 1 ein, sind es zwei CPU Kerne dann 2, … und so weiter und so fort.

user www-data;
worker_processes 1;

Jetzt sind wir fast schon am Ende der Konfiguration angelangt. Wir deaktivieren nur noch zur Steigerung der I/O Performance die access logs. Und zu guter Letzt fügen wir noch folgende Zeile darunter ein – in Vorbereitung für unsere PHP Konfiguration zu einem späteren Zeitpunkt.

access_log off;
client_max_body_size 12m;

Zum  Abspeichern und Beenden einfach Esc und anschließend Shift+: drücken, wq eingeben und mit Enter Bestätigen. W und Q stehen hierbei für write und quit – also speichern und beenden. Damit hätten wir die erste Konfiguration für NGINX auch schon hinter uns. Wooohoooo!

Theoretisch ist euer Webserver nun auch schon unter der Server IP erreichbar. Zum Testen einfach //server-ip/ in eurem Browser eingeben und öffnen. Zu sehen sollte die NGINX Startseite sein. Da ihr aber wahrscheinlich mehr als eine Seite auf dem Webserver hostet werdet, bzw. evtl. das Webverzeichnis anpassen wollt, müssen wir noch einige kleine Anpassungen vornehmen, bzw. eine passende Konfigurationsdatei erstellen. Diese liegen unter Debian in der Regel in /etc/nginx/conf.d/.

Alle Files in diesem Ordner werden von NGINX bei jedem Start geladen. In dem Ordner finden wir zwei Beispiel Configs, diese können wir getrost löschen und eine neue für unsere erste Homepage erstellen.

cd /etc/nginx/conf.d
rm example_ssl.conf default.conf
vi geekmonkey.de.conf

Die Config sollte in etwa so aussehen, wobei ihr die natürlich an eure Seite anpassen müsst:

server {
    listen 80;
    root /var/www/geekmonkey.de;
    index index.php index.html index.htm;
    server_name geekmonkey.de geekmonkey.de;
    location / {
            try_files $uri $uri/ /index.php;
    }
    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
    }
}

Standardmäßig liegen die Webserverfiles bei NGINX unter /usr/share/nginx/html. Bei Debian liegen sie aber, zumindest unter Verwendung von Apache als Webserver meist unter /var/www. Da ich mich an diesen Ort gewöhnt habe, passe ich ihn, wie man oben in der Config sehen kann, einfach selbst an, wobei ich natürlich noch die passenden Rechte vergeben muss.

mkdir /var/www
mkdir /var/www/geekmonkey.de
chown -R www-data:www-data /var/www
chown -R www-data:www-data /var/www/geekmonkey.de

Das Erstellen von weiteren Domains, Subdomains oder anderen Vhosts läuft eigentlich immer gleich ab.

Bei einem Blick in die nginx.conf, die wir vorhin bearbeitet haben findet sich je nach Konfiguration am Ende folgende Zeile: include /etc/nginx/sites-enabled/*;

Wenn nicht, könnt könnt ihr die Zeile evtl. von Hand anpassen. Es hat sich in der Vergangenheit nämlich bewährt, zwei zusätzliche Ordner im NGINX Verzeichnis anzulegen. Site-enabled und site-available. Hier können wir bequem im Ordner site-available all unsere Configs ablegen und sie bei Bedarf mit Hilfe eines Symlinks in site-enabled aktivieren.

mkrid /etc/nginx/sites-available
mkdir /etc/nginx/sitels-enabled
ln -s /etc/nginx/sites-available/Konfig-1 /etc/nginx/sites-enabled/Konfig-1
ln -s /etc/nginx/sites-available/Konfig-2 /etc/nginx/sites-enabled/Konfig-2
...

Damit wären wir auch schon mit der Grundkonfiguration von NGINX fertig.

PHP-FPM

PHP, okay, aber was ist PHP-FPM? Hierbei handelt es sich um den PHP FastCGI Process Manager. Anders als Apache kommt NGINX ohne PHP Modul daher, d.h. PHP läuft als eigener Prozess und muss erst mit NGINX verknüpft werden. Da wir später noch MaraDB installieren werden, installieren wir das passende PHP Paket gleich mit.

apt-get install php5-fpm php5-mysqlnd

Es bietet sich an dieser Stelle direkt an, weitere nützliche und gebräuchliche PHP Pakete mit zu installieren.

apt-get install php5-gd php5-mcrypt

Jetzt müssen wir noch einige kleine Änderungen an der PHP Konfigurationsdatei vornehmen.

vi /etc/php5/fpm/php.ini

Dort ändern wir folgende Dinge ab – Tipp, Suchen könnt ihr in Vim mit /Suchbegriff.

Zunächst ändern wir maximale Uploadgröße. 2MB sind in der heutigen Zeit echt etwas wenig. Und wenn wir schon dabei sind, ändern wir noch gleich die maximale Post Größe – diese sollte in der regel immer etwas größer als die filesize gewählt werden – auf 12MB

upload_max_filesize = 10M
post_max_size = 12M

URL-Wrappen, bzw. url fopen erlaubt das Ausführen von extern gehosteten PHP files – was nicht selten dazu missbraucht wird ungesicherte Server zu kapern. Also deaktiviert es lieber.

allow_url_fopen = Off

Das wäre es auch schon. Wie gewohnt mit Esc, Shift+: und wq speichern und beenden. Zum Testen, ob bis jetzt alles funktioniert hat, erstellen wir schnell eine info.php

vi /var/www/geekmonkey.de/info.php

Mit folgendem Inhalt:

<?php
phpinfo();?>

Jetzt solltet ihr eigentlich, wenn alles geklappt habt, unter //server-ip/info.php eigentlich die PHP Info Seite sehen.

MariaDB

MySQL dürfte den meisten von euch wohl eher ein Name sein, als MariaDB. Warum also verwende ich hier auf geekmonkey.de bzw. in diesem Tutorial nicht MySQL sondern MariaDB? Ganz einfach, weil es eine unglaublich performante Weiterentwicklung von Oracles MySQL ist. MaraiDB ist also quasi ein MySQL Fork die ziemlich viele und coole neue Features mit sich bringt.

Wer dem Ganzen nicht traut, der kann natürlich auch weiterhin MySQL statt MariaDB installieren. Da es sich um einen Fork handelt und die beiden DBs zu 100% kompatibel sind, ist es theoretisch eh egal, wofür ihr euch entscheidet.

apt-get install mariadb-server

Hier zählt gleiches, wie auch beim root Passwort. Passwörter wie 123 oder qwert haben hier nichts zu suchen! Denkt euch also ein sicheres Passwort aus und schreibt es euch zur Not irgendwo auf. Es gibt Nichts schlimmeres, als kompromittierte Server, die in den Weiten des Internets ihr Unwesen treiben! Danke!

Auch hier nimmt uns APT zwar die meiste Arbeit ab, aber wir müssen noch zwei kleine Änderungen in der Config vornehmen.

vi /etc/mysql/my.conf

Hier kommentieren wir bind-address aus und fügen skip-networking hinzu.

#bind-address = 127.0.0.1
skip-networking

Zum Absichern können wir noch MySQL Secure Installation drüber laufen lassen. Ist aber nur optional.

mysql_secure_installation

Damit wären wir nun auch schon fast am Ende angelangt. Zu guter Letzt starten wir noch einmal alle Services neu.

systemctl restart nginx.servicesystemctl restart php5-fpm.servicesystemctl restart mysql.service

PHPMyAdmin

In der Regel kommt man eigentlich ohne Webinterface aus und kann einen Root bzw. vServer auch ohne Probleme via SSH konfigurieren und updaten. Auch weil man in der Regel nicht viele Veränderungen an einem laufenden System vornimmt. Aber ich persönlich möchte nicht mehr ohne PHPMyAdmin auskommen – einem grafischen Webinterface, womit ihr Zugriff auf eure SQL Datenbankenhabt. Deswegen gibt es zum Abschluss noch eine kurze Anleitung, wie ihr das Ganze zum Laufen bekommt. Die Installation läuft relativ einfach und unspektakulär, wie schon PHP oder MariaDB zu Beginn, mit Hilfe von APT.

apt-get install phpmyadmin

Im Zuge der Installation habt ihr die Auswahl zwischen apache2 und lighttpd. Da bei uns weder das Eine, noch das Andere zum Einsatz kommt, skippen wir das Ganze einfach, indem wir mit der Tab-Taste direkt zu <Ok> springen und mit Enter bestätigen.Die Frage nach dbconfig-common bestätigen wir mit <Yes> und geben zu guter Letzt noch unser MariaDB Admin Passwort ein und denken uns ein neues Passwort für die PHPMyAdmin Datenbank aus.

Zu guter Letzt fehlt uns noch eine Verlinkung, mit der wir per Browser auf unsere PHPMyAdmin Installation zugreifen können. Dafür setzten wir einfach einen Link an die gewünschte stelle.

ln -s /usr/share/phpmyadmin /var/www/eure-domain/oder-was/auch-immer

Wie gut, dass wir vorhn PHP mcrypt installiert haben, den das brauchen wir jetzt:

php5enmod mcrypt
service php5-fpm restart

Erreichbar ist das PHPmyAdmin Webinterface dann unter //server-ip/phpmyadmin.

Soweit so gut, das sollte es gewesen sein! Herzlichen Glückwusch, euer LEMP Server läuft!

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein