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!