Step-by-Step Anleitung wie der LEMP Webserver (Linux + Nginx + MySQL + PHP) unter Debian Wheezy in wenigen Schritten installiert wird.
Definition LEMP Stack
Als LEMP Stack wird in der IT Welt eine Softwarezusammenstellung für die Ausführung von dynamischen Webseiten bezeichnet. Es besteht aus folgenden vier Kernkomponenten, welche alle perfekt miteinander arbeiten. Der Unterschied zum klassischen LAMP Stack besteht nur im Webserver, Nginx statt Apache:
Linux (Betriebssystem)
Nginx (ausgeprochen EngineX) (Webserver)
MySQL (Datenbank)
PHP (Skript Interpreter)
Nginx (ausgesprochen: EnigneX) ist ein Webserver, welcher mehr und mehr Marktanteil bekommt. Er gilt im Zusammenspiel mit php-fpm als sehr performant und gerade für große Umgebungen als sehr geeignet. Es besteht aber auch die Möglichkeit Apache mit php-fpm zu betreiben. Ich möchte in diesem Tutorial zeigen wie der Nginx Webserver mit PHP und MySQL installiert werden kann.
Aktuellste Nginx Version für Debian
Die Debian Wheezy Standardrepositories haben derzeit die Nginx Version 1.2.1 inkludiert, welche leider etwas veraltet ist. Aktuell ist aber bereits 1.4.7 (Stand: April 2014). Ich empfehle auch diese zu installieren und nicht die Standardrepositories zu verwenden.
Die Jungs von Dotdeb sind da sehr viel aktiver und bieten sofort nach Release die aktuellen Versionen in ihren Debian Mirrors an und sind im Bereich Webhosting um Jahre schneller als die Debian Maintainer. Dotdeb ist auch der einzige Mirror, welchen ich ausser den Debian Mirrors verwende. Zudem gibt es hier auch PHP 5.5 Installationspakete für Debian, welche ebenfalls in den Standardmirrors nicht verfügbar ist. So schlagen wir gleich zwei Fliegen mit einer Klappe
Um den dotdeb Mirror hinzuzufügen wird die /etc/sources.list…
[bash]vi /etc/apt/sources.list[/bash]…und um folgende zwei Einträge erweitert:
[bash]deb http://packages.dotdeb.org wheezy alldeb-src http://packages.dotdeb.org wheezy all[/bash]
Wenn statt einer PHP 5.4 auch PHP 5.5 verwendet werden soll (was ich wegen der Geschwindigkeit empfehle), dann sind in der sources.list noch folgende zwei Zeilen zu ergänzen:
[bash]deb http://packages.dotdeb.org wheezy-php55 alldeb-src http://packages.dotdeb.org wheezy-php55 all[/bash]
Anschließend wird noch der GnuPG key heruntergeladen und importiert.
[bash]wget http://www.dotdeb.org/dotdeb.gpgapt-key add dotdeb.gpg && rm dotdeb.gpg[/bash]
Ein apt-get update aktualisiert nun die Paketlisten (in diesem Schritt wird noch nicht installiert, keine Sorge)
[bash]apt-get update[/bash]Installation von Nginx mit PHP 5.5 unter Debian Wheezy
Nun wird die eigentliche Nginx + PHP Installation via apt-get install durchgeführt
[bash]apt-get install nginx php5-fpm[/bash]Der Webserver sollte nun bereits gestartet sein und auf den Port 80 hören. Zum Testen kann einfach die Server-IP oder der Hostname des Servers aufgerufen werden. So sieht die Standardwebseite von Nginx aus:
Nginx spricht aber derzeit noch kein PHP, welches wir nun in der „default“ Konfiguration aktivieren. Später wird für jeden vServer eine eigene Configfile erstellt.
Dazu wird die default Datei editiert…
[bash]vi /etc/nginx/sites-available/default[/bash]… und im Bereich „server{“ die folgenden Zeilen auskommentiert, sodass der PHP Teil wie folgt aussieht (die # kommentieren jeweils eine Zeile aus):
[bash]# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000#
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}[/bash]
Der PHP FPM Worker wurde nun in der Config eingetragen. Damit die Änderung aktiv wird muss der Nginx noch neu gestartet werden:
[bash]/etc/init.d/nginx restart[/bash]Im zweiten Schritt wird die php fpm Konfigurationsdatei editiert…
[bash]vi /etc/php5/fpm/pool.d/www.conf[/bash]…und folgende Punkte hinzugefügt bzw. auskommentiert (Strichpunkt enfernen):
[bash]listen.owner = www-datalisten.group = www-data
listen.mode = 0660[/bash]
Nach der Änderung sollte der PHP-FPM Prozess neu gestartet werden
[bash]/etc/init.d/php5-fpm restart[/bash]Um nun zu testen ob unser Nginx nun wirklich PHP spricht, wird einfach eine test.php Datei im Standardverzeichnis /usr/share/nginx/html angelegt
[bash]vi /usr/share/nginx/html/test.php[/bash]Als Inhalt lassen wir phpinfo ausgeben:
[bash]<?php phpinfo(); ?>[/bash]Ein Aufruf der IP bzw. des Hostnames (zB: http://192.168.1.100/test.php) sollte folgende Ausgabe bereit halten:
[sam id=“2″ codes=“true“]
MySQL Server 5.6 installieren
Nun wir es Zeit den MySQL Server zu installieren. Das bereits die dotdeb Mirrors eingebunden sind, kann die aktuellste Version bequem via apt-get installiert werden:
[bash]apt-get install mysql-server mysql-php[/bash]Währen der Installation wird nach einem Passwort für den Root Datenbank User gefragt. Diese könnt ihr beliebig festlegen. Falls ihr es vergessen habt könnt ihr das MySQL Root Passwort wiederherstellen.
MySQL Datenbank und Datenbankbenutzer anlegen
Der MySQL Server ist nun installiert und wir können die erste Datenbank und den ersten User anlegen. Über folgenden Befehl verbinden wir uns mit der MySQL Server Konsole:
[bash]mysql -u root -p[/bash]Ihr werdet nun nach eurem Passwort gefragt, das ihr bei der Installation in der grauen Box eingegeben habt. Wir sind nun mit der MySQL Server Konsole verbunden und legen die erste Datenbank und den ersten User an:
[bash]create database datenbank1;grant all privileges on datenbank1.* to ‚dbuser1’@’localhost‘ identified by ‚Passwort‘ with grant option;[/bash]
datenbank1 – steht für den Datenbanknamen
dbuser1 – steht für den Benutzernamen
localhost – Bedeutet das der Benutzer nur vom lokalen Server auf die Datenbank zugreifen darf.
Passwort – steht für das Passwort, welches der Benutzer zur Authentifizierung benutzt.
Ein externer Zugriff auf MySQL Datenbank kann unter Umständen gewährt werden, ist aber nicht zu empfehlen, wenn es nicht benötigt wird.
Moinsen,
ja und wie schaffe ich es dann das phpmyadmin mit nginx läuft? 🙂
wär geil wen da einer helfen könnt…
PHPMyAdmin ist überhaupt kein Problem. Einfach von der Herstellerseite downloaden und in ein Verzeichnis entpacken.
Alternativ via „apt-get install phpmyadmin“ installieren und das root in der default Nginx Konfiguration hinzufügen:
root /usr/share/phpmyadmin;
Gruß
Patrick
Achja, hätte ich selbst drauf kommen können^^ …
Ich habe schon die Ganze Zeit auf eine Anleitung gewartet. Ich arbeite zwar schon seit 2 – 3 Jahre mit Linux Debian/Ubuntu etc. Server Versionen, aber habe bei nginx meistens Probleme gehabt. Aber dank deiner Seite, hab ich viel gelernt. 🙂
Vielen dank 😉
Gutes Tutorial für das schnelle Aufsetzen eines Servers.
Weitere (zum Teil komplizierte) Beschreibungen und Sicherheitsvorkehrungen für den produktiven Einsatz habe ich hier ganz gut Schritt für Schritt zusammengefasst gefunden: http://eduard-dopler.de/572/nginx-webserver-auf-raspberry-pi-performant-und-sicher/
Ich befinde mich in einer Ausbildung zum Medientechniker und muss derzeit PHP Programmieren und MySQL einbinden etc. und freue mich sehr über deinen Blog und diese Artikel, welche mir echt behilflich sind, das ganze zu verstehen!
Grüße Joachim
php-mysql existiert bei mir nicht?
Das Problem hatte ich auch, bei meiner Recherche bin ich darauf gestoßen das das Paket php5-mysql heißt. Hoffe das hilft dir 🙂
@Patrick
Wie immer kurzes und knackiges Tutorial – merci, es alles auf Anhieb geklappt!
Liebe Grüße aus Barcelona – insomnia
Danke für den Tutorial. Ist eigentlich nicht so kompliziert aber es macht es einfacher, wenn man einfach die Schritte folgen kann und auch nicht selbst alle APT-Quellen suchen muss 😉
Im Schritt „MySQL Server 5.6 installieren“ bekam ich die Meldung „E: Paket mysql-php kann nicht gefunden werden.“
Also musste ich erst „apt-get install mysql-server-5.6“ ausführen und dann „sudo apt-get install php5-mysql“
Beste Grüße
Hi,
also erstmal ein dickes Danke für dieses TUT, genau das habe ich gesucht 🙂
Ich habe gerade MySQL wie oben genannt installiert, nun wollte ich auch für root ein Passwort setzen, leider bekomme ich dabei folgende Fehlermeldung:
„root@vps123456:~# mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‚/var/run/mysqld/mysqld.sock‘ (2)“
Weiß da jemand weiter?