Wie man Linux, Nginx, MySQL, PHP (LEMP-Stack) auf Ubuntu installiert
Einführung
Der LEMP-Software-Stack dient dazu, dynamische Webseiten und Webanwendungen, die in PHP geschrieben sind, bereitzustellen. Dies ist ein Akronym, das ein Linux-Betriebssystem beschreibt, mit einem Nginx (ausgesprochen wie „Engine-X“)-Webserver. Die Backend-Daten werden in der MySQL-Datenbank gespeichert und die dynamische Verarbeitung wird von PHP übernommen.
Dieser Leitfaden zeigt, wie man einen LEMP-Stack auf einem Ubuntu-Server installiert. Das Betriebssystem Ubuntu übernimmt den Linux-Teil des Stacks. Wir werden beschreiben, wie man die restlichen Komponenten einrichtet und zum Laufen bringt.
Hinweis: Dieses Tutorial richtet sich in erster Linie an Ubuntu 22.04 LTS mit PHP 8.1. Für Benutzer von Ubuntu 24.04 LTS passen Sie die PHP-Versionsangaben in allen Befehlen von
php8.1-fpmaufphp8.3-fpman. Stellen Sie außerdem sicher, dass Sie auch alle PHP-FPM-Socket-Pfade in Ihrer Nginx-Konfiguration aktualisieren (z. B./run/php/php8.3-fpm.sockfür Ubuntu 24.04 verwenden).
Wie man Linux, Nginx, MySQL, PHP (LEMP-Stack) auf Ubuntu installiert
- Installation des Nginx-Webservers
- MySQL installieren
- PHP installieren
- Konfiguration von Nginx zur Nutzung des PHP-Prozessors
- Testen von PHP mit Nginx
- Testen der Datenbankverbindung aus PHP
Voraussetzungen
Verwenden Sie einen nicht-root sudo-Benutzer unter Ubuntu mit aktiviertem UFW-Firewall. Folgen Sie unserem Leitfaden zur ersten Servereinrichtung für Ubuntu, um dies zu konfigurieren.
Schritt 1 – Installation des Nginx-Webservers
Um Webseiten für Besucher anzuzeigen, werden Sie Nginx verwenden, einen leistungsstarken Webserver. Sie werden den APT-Paketmanager nutzen, um diese Software zu beziehen.
Aktualisieren Sie den Paketindex Ihres Servers und installieren Sie dann Nginx:
sudo apt updateFühren Sie danach apt install aus, um Nginx zu installieren:
sudo apt install nginxWenn Sie dazu aufgefordert werden, drücken Sie Y und ENTER, um zu bestätigen, dass Sie Nginx installieren möchten. Sobald die Installation abgeschlossen ist, wird der Nginx-Webserver auf Ihrem Ubuntu-Server aktiv und betriebsbereit sein.
Überprüfen Sie, ob Nginx läuft:
sudo systemctl status nginxSie sollten eine Ausgabe sehen, die anzeigt, dass Nginx aktiv ist:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since...Unter Ubuntu wird Nginx so konfiguriert, dass es nach der Installation automatisch gestartet wird.
Erlauben Sie HTTP-Verkehr durch die ufw-Firewall. Nginx registriert bei der Installation mehrere UFW-Anwendungsprofile. Verfügbare Profile prüfen:
sudo ufw app listAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSHAktivieren Sie das restriktivste Profil, das den erforderlichen Datenverkehr zulässt. Da SSL noch nicht konfiguriert ist, erlauben Sie nur HTTP-Datenverkehr auf Port 80:
Aktivieren Sie dies, indem Sie Folgendes ausführen:
sudo ufw allow 'Nginx HTTP'
Überprüfen Sie die Firewall-Änderung:
sudo ufw statusDiese Ausgabe zeigt, dass HTTP-Verkehr jetzt erlaubt ist:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)Um die Domain-Funktionalität des Nginx-Servers zu testen, navigieren Sie mit Ihrem bevorzugten Webbrowser zu http://your_domain.
Wenn Sie keinen Domainnamen auf Ihren Server verweisen lassen und Ihre öffentliche IP-Adresse des Servers nicht kennen, können Sie sie herausfinden, indem Sie einen der folgenden Befehle ausführen:
ip addr showhostname -IDies wird einige IP-Adressen ausgeben. Sie können jede von ihnen nacheinander in Ihrem Webbrowser ausprobieren.
Alternativ können Sie überprüfen, welche IP-Adresse von anderen Standorten im Internet aus erreichbar ist:
curl -4 icanhazip.comGeben Sie die Adresse ein, die Sie in Ihrem Webbrowser erhalten, und sie führt Sie zur Standard-Startseite von Nginx:
http://<server_domain_or_IP>Wenn Sie diese Seite erhalten, bedeutet dies, dass Sie Nginx erfolgreich installiert und den HTTP-Verkehr für Ihren Webserver aktiviert haben.
Schritt 2 — Installation von MySQL
Installiere MySQL, um Website-Daten zu speichern und zu verwalten. MySQL ist das Standard-Datenbankverwaltungssystem für PHP-Umgebungen.
Verwenden Sie erneut apt, um diese Software zu erwerben und zu installieren:
sudo apt install mysql-serverWenn Sie dazu aufgefordert werden, bestätigen Sie die Installation, indem Sie Y drücken, und anschließend ENTER.
Nach der Installation führen Sie das Sicherheits-Skript aus, um unsichere Voreinstellungen zu entfernen und den Datenbankzugriff zu sichern:
sudo mysql_secure_installationEs wird Ihnen eine Frage angezeigt, in der Sie gefragt werden, ob Sie das VALIDATE PASSWORD PLUGIN konfigurieren möchten.
Hinweis: Das Aktivieren dieser Funktion ist eine Art Ermessensfrage. Wenn sie aktiviert ist, werden Passwörter, die nicht den angegebenen Kriterien entsprechen, von MySQL mit einem Fehler abgelehnt. Es ist sicher, die Validierung deaktiviert zu lassen, aber Sie sollten immer starke, einzigartige Passwörter für Datenbank-Zugangsdaten verwenden.
Antworten Sie mit Y für Ja oder mit etwas anderem, um ohne Aktivierung fortzufahren:
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: Wenn Sie mit „Ja“ antworten, werden Sie aufgefordert, ein Niveau der Passwortüberprüfung auszuwählen. Bedenken Sie, dass Sie, wenn Sie 2 für die höchste Stufe eingeben, Fehler erhalten, wenn Sie versuchen, ein Passwort festzulegen, das keine Zahlen, Groß- und Kleinbuchstaben sowie Sonderzeichen enthält:
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1Unabhängig davon, ob Sie sich entschieden haben, das VALIDATE PASSWORD PLUGIN einzurichten, wird Ihr Server Sie auffordern, ein Passwort für den MySQL-root-Benutzer auszuwählen und zu bestätigen. Dies ist nicht mit dem System-Root zu verwechseln. Der Datenbank-Root-Benutzer ist ein administrativer Benutzer mit vollen Rechten im Datenbanksystem. Auch wenn die Standard-Authentifizierungsmethode für den MySQL-Root-Benutzer die Verwendung eines Passworts überflüssig macht, auch wenn eines festgelegt ist, sollten Sie hier ein starkes Passwort als zusätzliche Sicherheitsmaßnahme festlegen. Darauf werden wir gleich eingehen.
Wenn Sie die Passwortüberprüfung aktiviert haben, wird Ihnen die Passwortstärke für das von Ihnen eingegebene Root-Passwort angezeigt und Ihr Server wird fragen, ob Sie mit diesem Passwort fortfahren möchten. Wenn Sie mit Ihrem aktuellen Passwort zufrieden sind, drücken Sie Y für „Ja“ an der Eingabeaufforderung:
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : yFür die restlichen Fragen drücken Sie Y und dann die ENTER-Taste bei jeder Eingabeaufforderung. Dadurch werden einige anonyme Benutzer und die Testdatenbank entfernt, Remote-Root-Anmeldungen deaktiviert und diese neuen Regeln geladen, sodass MySQL die von Ihnen vorgenommenen Änderungen sofort übernimmt.
Wenn Sie fertig sind, testen Sie, ob Sie sich in die MySQL-Konsole einloggen können:
sudo mysqlDies wird eine Verbindung zum MySQL-Server als administrativer Datenbankbenutzer root herstellen, was durch die Verwendung von sudo beim Ausführen dieses Befehls angezeigt wird. Sie sollten die folgende Ausgabe erhalten:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28-0ubuntu4 (Ubuntu)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>Um die MySQL-Konsole zu verlassen, geben Sie Folgendes ein:
exitBeachten Sie, dass Sie kein Passwort angeben mussten, um sich als root-Benutzer zu verbinden, obwohl Sie eines beim Ausführen des mysql_secure_installation-Skripts festgelegt haben. Der Grund dafür ist, dass die Standard-Authentifizierungsmethode für den administrativen MySQL-Benutzer unter Ubuntu auth_socket ist, anstatt eine Methode zu verwenden, die ein Passwort benötigt. Dies mag auf den ersten Blick wie ein Sicherheitsproblem erscheinen, macht den Datenbankserver jedoch sicherer, da nur Systembenutzer mit sudo-Rechten, die sich über die Konsole oder über eine Anwendung, die mit denselben Rechten läuft, anmelden, als root-MySQL-Benutzer einloggen dürfen. Praktisch bedeutet das, dass Sie den administrativen Datenbank-root-Benutzer nicht verwenden können, um sich von Ihrer PHP-Anwendung aus zu verbinden.
Für erhöhte Sicherheit ist es am besten, für jede Datenbank eigene Benutzerkonten mit eingeschränkten Rechten einzurichten, insbesondere wenn Sie planen, mehrere Datenbanken auf Ihrem Server zu hosten.
Hinweis: Bestimmte ältere Versionen der nativen MySQL-PHP-Bibliothek mysqlnd unterstützen caching_sha2_authentication nicht, die Standard-Authentifizierungsmethode für erstellte Benutzer in MySQL 8. Aus diesem Grund müssen Sie beim Erstellen von Datenbankbenutzern für PHP-Anwendungen auf MySQL 8 möglicherweise sicherstellen, dass sie stattdessen auf mysql_native_password eingestellt sind. Wir zeigen in Schritt 6, wie das geht.
Ihr MySQL-Server ist jetzt installiert und gesichert. Als Nächstes installieren Sie PHP, die letzte Komponente des LEMP-Stacks.
Schritt 3 – PHP installieren
Installieren Sie PHP, um Code zu verarbeiten und dynamische Inhalte zu erzeugen. Nginx benötigt ein externes Programm zur PHP-Verarbeitung.
PHP-FPM („FastCGI-Process-Manager“) verarbeitet PHP effizient und bietet zusätzliche Sicherheitsfunktionen, wodurch die Leistung von PHP-basierten Websites verbessert wird. Installieren Sie php-fpm, um PHP-Anfragen von Nginx weiterzuleiten, und php-mysql, um die PHP-MySQL-Kommunikation zu aktivieren. Kern-PHP-Pakete werden automatisch als Abhängigkeiten installiert.
Um die Pakete php8.1-fpm und php-mysql zu installieren, führen Sie Folgendes aus:
sudo apt install php8.1-fpm php-mysqlWenn Sie dazu aufgefordert werden, drücken Sie Y und ENTER, um die Installation zu bestätigen.
Überprüfen Sie, ob PHP-FPM läuft:
sudo systemctl status php8.1-fpmSie sollten eine Ausgabe sehen, die zeigt, dass PHP-FPM aktiv ist:
● php8.1-fpm.service - The PHP 8.1 FastCGI Process Manager
Loaded: loaded
Active: active (running)Du kannst auch die PHP-Version überprüfen:
php -vPHP 8.1.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.1.xKonfigurieren Sie Nginx so, dass diese PHP-Komponenten verwendet werden.
Schritt 4 — Konfigurieren von Nginx zur Nutzung des PHP-Prozessors
Erstellen Sie Nginx Serverblöcke (ähnlich wie Apache-Virtualhosts), um die Konfiguration zu kapseln und mehrere Domains auf einem Server zu hosten. Dieser Leitfaden verwendet your_domain als Beispieldomain.
Info: Um mehr darüber zu erfahren, wie man einen Domainnamen bei Linux-Console.net einrichtet, lesen Sie unsere Einführung in das Linux-Console.net DNS.
Auf Ubuntu 22.04 aktiviert Nginx einen Standard-Server-Block, der Dokumente aus /var/www/html bereitstellt. Für mehrere Websites erstellen Sie eine Verzeichnisstruktur innerhalb von /var/www für ihre_domain und lassen /var/www/html als Standard-Backup-Verzeichnis bestehen.
Erstellen Sie das Root-Webverzeichnis für your_domain wie folgt:
sudo mkdir /var/www/your_domainWeisen Sie als Nächstes den Eigentümer des Verzeichnisses mit der Umgebungsvariable $USER zu, die auf Ihren aktuellen Systembenutzer verweist:
sudo chown -R $USER:$USER /var/www/your_domainÖffnen Sie dann eine neue Konfigurationsdatei im sites-available-Verzeichnis von Nginx mit Ihrem bevorzugten Kommandozeilen-Editor. Hier verwenden wir nano:
sudo nano /etc/nginx/sites-available/your_domainDies wird eine neue, leere Datei erstellen. Fügen Sie die folgende Grundkonfiguration ein:
server {
listen 80;
server_name your_domain www.your_domain;
root /var/www/your_domain;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}So funktioniert jede dieser Direktiven und Standortblöcke:
listen— Legt fest, auf welchem Port Nginx lauschen wird. In diesem Fall lauscht es auf Port80, dem Standardport für HTTP.root— Definiert das Dokumentenstammverzeichnis, in dem die von dieser Website bereitgestellten Dateien gespeichert werden.index— Legt fest, in welcher Reihenfolge Nginx Indexdateien für diese Website priorisieren wird. Es ist üblich,index.html-Dateien höher zu priorisieren alsindex.php-Dateien, um das schnelle Einrichten einer Wartungs-Seite in PHP-Anwendungen zu ermöglichen. Sie können diese Einstellungen anpassen, um besser zu den Anforderungen Ihrer Anwendung zu passen.server_name— Legt fest, auf welche Domainnamen und/oder IP-Adressen dieser Serverblock reagieren soll. Weisen Sie diese Direktive auf den Domainnamen oder die öffentliche IP-Adresse Ihres Servers.location /— Der erste Location-Block enthält einetry_files-Direktive, die prüft, ob Dateien oder Verzeichnisse vorhanden sind, die einer URL-Anfrage entsprechen. Wenn Nginx die passende Ressource nicht finden kann, wird ein 404-Fehler zurückgegeben.location ~ \.php$— Dieser Location-Block übernimmt die eigentliche PHP-Verarbeitung, indem er Nginx auf diefastcgi-php.conf-Konfigurationsdatei und diephp8.1-fpm.sock-Datei verweist, die angibt, welcher Socket mitphp8.1-fpmverbunden ist.location ~ /\.ht— Der letzte Location-Block bezieht sich auf.htaccess-Dateien, die Nginx nicht verarbeitet. Durch Hinzufügen der Direktivedeny allwird verhindert, dass etwaige.htaccess-Dateien, die zufällig in das Dokumenten-Root gelangen, den Besuchern ausgeliefert werden.
Wenn Sie mit dem Bearbeiten fertig sind, speichern Sie die Datei und schließen Sie sie. Wenn Sie nano verwenden, können Sie dies tun, indem Sie CTRL+X drücken und dann Y und ENTER zur Bestätigung.
Aktivieren Sie Ihre Konfiguration, indem Sie auf die Konfigurationsdatei aus dem sites-enabled-Verzeichnis von Nginx verlinken:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/Dann trennen Sie die Standardkonfigurationsdatei vom Verzeichnis /sites-enabled/:
sudo unlink /etc/nginx/sites-enabled/defaultHinweis: Wenn Sie jemals die Standardkonfiguration wiederherstellen müssen, können Sie dies tun, indem Sie den symbolischen Link wie folgt neu erstellen:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/Dies wird Nginx anweisen, die Konfiguration beim nächsten Neustart zu verwenden. Sie können Ihre Konfiguration auf Syntaxfehler überprüfen, indem Sie Folgendes ausführen:
sudo nginx -tWenn Fehler gemeldet werden, gehen Sie zurück zu Ihrer Konfigurationsdatei, um deren Inhalt zu überprüfen, bevor Sie fortfahren.
Wenn Sie bereit sind, laden Sie Nginx neu, um die Änderungen anzuwenden:
sudo systemctl reload nginxIhre neue Website ist nun aktiv, aber das Webverzeichnis /var/www/your_domain ist noch leer. Erstellen Sie eine index.html-Datei an diesem Ort, damit Sie testen können, ob Ihr neuer Serverblock wie erwartet funktioniert:
nano /var/www/your_domain/index.htmlFügen Sie den folgenden Inhalt in diese Datei ein:
<html>
<head>
<title>your_domain website</title>
</head>
<body>
<h1>Hello World!</h1>
<p>This is the landing page of <strong>your_domain</strong>.</p>
</body>
</html>Gehen Sie nun zu Ihrem Browser und rufen Sie den Domainnamen oder die IP-Adresse Ihres Servers auf, wie sie in der server_name-Direktive in der Konfigurationsdatei Ihres Server-Blocks angegeben ist:
http://server_domain_or_IPSie erhalten eine Seite wie die folgende:
Wenn Sie diese Seite erhalten, bedeutet das, dass Ihr Nginx-Serverblock wie erwartet funktioniert.
Sie können diese Datei vorerst als temporäre Startseite für Ihre Anwendung belassen, bis Sie eine index.php-Datei einrichten, die sie ersetzt.
Warnung: Nachdem Sie Ihre index.php-Datei hinzugefügt haben, stellen Sie sicher, dass Sie die index.html-Datei aus Ihrem Dokumentenstamm entfernen oder umbenennen. Wenn beide Dateien vorhanden sind, liefert Nginx standardmäßig index.html aus, und Ihre PHP-Seite wird nicht angezeigt – dies ist eine häufige Verwirrung für neue Benutzer.
Ihr LEMP-Stack ist nun vollständig konfiguriert. Im nächsten Schritt erstellen Sie ein PHP-Skript, um zu testen, ob Nginx tatsächlich in der Lage ist, .php-Dateien innerhalb Ihrer neu konfigurierten Website zu verarbeiten.
Schritt 5 – Testen von PHP mit Nginx
Ihr LEMP-Stack sollte nun vollständig eingerichtet sein. Sie können ihn testen, um zu überprüfen, ob Nginx .php-Dateien korrekt an Ihren PHP-Prozessor weiterleiten kann.
Sie können dies tun, indem Sie eine Test-PHP-Datei in Ihrem Dokumentenstamm erstellen. Öffnen Sie eine neue Datei namens info.php in Ihrem Dokumentenstamm in Ihrem bevorzugten Texteditor:
nano /var/www/your_domain/info.phpFügen Sie die folgenden Zeilen in die neue Datei ein. Dies ist gültiger PHP-Code, der Informationen über Ihren Server zurückgibt:
<?php
phpinfo();Wenn Sie fertig sind, speichern Sie die Datei und schließen Sie sie.
Sie können nun auf diese Seite in Ihrem Webbrowser zugreifen, indem Sie den Domainnamen oder die öffentliche IP-Adresse, die Sie in Ihrer Nginx-Konfigurationsdatei eingerichtet haben, gefolgt von /info.php, aufrufen:
http://server_domain_or_IP/info.phpSie erhalten eine Webseite mit detaillierten Informationen zu Ihrem Server:
Nachdem Sie die relevanten Informationen über Ihren PHP-Server über diese Seite überprüft haben, ist es am besten, die von Ihnen erstellte Datei zu entfernen, da sie sensible Informationen über Ihre PHP-Umgebung und Ihren Ubuntu-Server enthält. Sie können rm verwenden, um diese Datei zu löschen:
sudo rm /var/www/your_domain/info.phpSie können diese Datei jederzeit erneut erstellen, wenn Sie sie später benötigen.
Schritt 6 — Testen der Datenbankverbindung von PHP aus (Optional)
Wenn Sie testen möchten, ob PHP in der Lage ist, eine Verbindung zu MySQL herzustellen und Datenbankabfragen auszuführen, können Sie eine Testtabelle mit Beispieldaten erstellen und deren Inhalte über ein PHP-Skript abfragen. Bevor Sie dies tun, müssen Sie eine Testdatenbank und einen neuen MySQL-Benutzer erstellen, der korrekt für den Zugriff darauf konfiguriert ist.
Hinweis: Einige ältere Versionen der nativen MySQL PHP-Bibliothek mysqlnd unterstützen caching_sha2_authentication, die Standard-Authentifizierungsmethode für MySQL 8, möglicherweise nicht. Sie müssen sicherstellen, dass sie stattdessen auf mysql_native_password konfiguriert sind.
Wir erstellen eine Datenbank mit dem Namen example_database und einen Benutzer mit dem Namen example_user, aber Sie können diese Namen durch andere Werte ersetzen.
Verbinden Sie sich zunächst mit dem root-Konto mit der MySQL-Konsole:
sudo mysqlUm eine neue Datenbank zu erstellen, führen Sie den folgenden Befehl in Ihrer MySQL-Konsole aus:
CREATE DATABASE example_database;Jetzt können Sie einen neuen Benutzer erstellen und ihm volle Rechte für die benutzerdefinierte Datenbank gewähren, die Sie erstellt haben.
Der folgende Befehl erstellt einen neuen Benutzer namens example_user und verwendet mysql_native_password als Standard-Authentifizierungsmethode. Wir legen das Passwort dieses Benutzers auf password fest, Sie sollten diesen Wert jedoch durch ein sicheres, eigenes Passwort ersetzen.
CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';Jetzt müssen wir diesem Benutzer Berechtigungen für die Datenbank example_database erteilen:
GRANT ALL ON example_database.* TO 'example_user'@'%';Dies gibt dem Benutzer example_user volle Berechtigungen für die Datenbank example_database, verhindert jedoch, dass dieser Benutzer andere Datenbanken auf Ihrem Server erstellt oder verändert.
Beenden Sie nun die MySQL-Shell mit folgendem Befehl:
exitSie können überprüfen, ob der neue Benutzer die richtigen Berechtigungen hat, indem Sie sich erneut in der MySQL-Konsole anmelden, diesmal mit den Zugangsdaten des benutzerdefinierten Benutzers. Beachten Sie das -p-Flag in diesem Befehl, das Sie zur Eingabe des beim Erstellen des Benutzers example_user verwendeten Passworts auffordert:
mysql -u example_user -pMelden Sie sich nach dem Einloggen in die MySQL-Konsole an und bestätigen Sie, dass Sie Zugriff auf die Datenbank example_database haben:
SHOW DATABASES;Dies wird die folgende Ausgabe zurückgeben:
+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)Als Nächstes erstellen wir eine Testtabelle mit dem Namen todo_list. Führen Sie in der MySQL-Konsole die folgende Anweisung aus:
CREATE TABLE example_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);Fügen Sie ein paar Zeilen Inhalt in die Testtabelle ein. Möglicherweise möchten Sie den nächsten Befehl ein paar Mal wiederholen und dabei verschiedene Werte verwenden:
INSERT INTO example_database.todo_list (content) VALUES ("My first important item");Um zu bestätigen, dass die Daten erfolgreich in Ihrer Tabelle gespeichert wurden, führen Sie aus:
SELECT * FROM example_database.todo_list;Ihre Ausgabe sollte wie folgt angezeigt werden:
+---------+--------------------------+
| item_id | content |
+---------+--------------------------+
| 1 | My first important item |
| 2 | My second important item |
| 3 | My third important item |
| 4 | and this one more thing |
+---------+--------------------------+
4 rows in set (0.000 sec)Nachdem Sie bestätigt haben, dass Sie gültige Daten in Ihrer Testtabelle haben, können Sie die MySQL-Konsole verlassen:
exitJetzt können Sie das PHP-Skript erstellen, das eine Verbindung zu MySQL herstellt und Ihre Inhalte abfragt. Erstellen Sie eine neue PHP-Datei in Ihrem benutzerdefinierten Web-Root-Verzeichnis mit Ihrem bevorzugten Editor. Dafür verwenden wir nano:
nano /var/www/your_domain/todo_list.phpDas folgende PHP-Skript verbindet sich mit der MySQL-Datenbank und fragt den Inhalt der todo_list-Tabelle ab, wobei die Ergebnisse in einer Liste angezeigt werden. Wenn es ein Problem mit der Datenbankverbindung gibt, wird eine Ausnahme ausgelöst.
Fügen Sie den folgenden Inhalt zu Ihrem todo_list.php-Skript hinzu:
<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";
try {
$db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
echo "<h2>TODO</h2><ol>";
foreach($db->query("SELECT content FROM $table") as $row) {
echo "<li>" . $row['content'] . "</li>";
}
echo "</ol>";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
Speichern Sie die Datei und schließen Sie sie, wenn Sie mit der Bearbeitung fertig sind.
Sie können jetzt auf diese Seite in Ihrem Webbrowser zugreifen, indem Sie den für Ihre Website konfigurierten Domainnamen oder die öffentliche IP-Adresse aufrufen, gefolgt von /todo_list.php:
http://server_domain_or_IP/todo_list.phpSie sollten eine Seite wie die folgende erhalten, die den Inhalt zeigt, den Sie in Ihre Testtabelle eingefügt haben:
Das bedeutet, dass Ihre PHP-Umgebung bereit ist, eine Verbindung zu Ihrem MySQL-Server herzustellen und mit ihm zu interagieren.
Häufig gestellte Fragen
Wofür wird der LEMP-Stack verwendet?
Der LEMP-Stack hostet dynamische, auf PHP basierende Websites und Anwendungen, einschließlich WordPress, Laravel, Magento, Drupal und benutzerdefinierter PHP-Projekte. Er ist besonders effektiv für stark frequentierte Websites, die eine effiziente Handhabung gleichzeitiger Verbindungen erfordern.
Was ist der Unterschied zwischen LEMP- und LAMP-Stacks?
LEMP verwendet Nginx, das Verbindungen asynchron mit einer ereignisgesteuerten Architektur verarbeitet – effizient für gleichzeitige Benutzer. LAMP verwendet Apache, das traditionell für jede Anfrage einen eigenen Thread erstellt (obwohl moderne Apache-Versionen ereignisgesteuerte Modi unterstützen). LEMP bietet im Allgemeinen eine bessere Leistung für statische Inhalte und Szenarien mit hoher gleichzeitiger Nutzung, während LAMP eine einfachere .htaccess-Konfiguration und eine breitere Modulauswahl bietet.
Welche Ubuntu-Version sollte ich für LEMP verwenden?
Ubuntu 22.04 LTS ist das Hauptziel dieses Leitfadens und bietet PHP 8.1, MySQL 8.0 und Nginx mit langfristigem Support. Ubuntu 24.04 LTS (neueste Version) enthält standardmäßig PHP 8.3 und ist mit diesem Leitfaden kompatibel, indem die PHP-FPM-Socketpfade und Versionsnummern entsprechend angepasst werden.
Wie installiere ich den LEMP-Stack auf Ubuntu 24.04?
Folgen Sie diesen grundlegenden Schritten:
- Installieren Sie Nginx:
sudo apt install nginx - Installiere MySQL:
sudo apt install mysql-server - Führen Sie das MySQL-Sicherheitsskript aus:
sudo mysql_secure_installation - Installiere PHP-FPM:
sudo apt install php-fpm php-mysql - Konfigurieren Sie einen Nginx-Serverblock mit PHP-FPM-Integration
- Test mit
info.phpund Datenbankverbindung
Siehe die vollständige Schritt-für-Schritt-Anleitung in den Schritten 1-6 oben.
Welche Version von PHP sollte ich mit Nginx und MySQL installieren?
Verwenden Sie die standardmäßige PHP-Version Ihres Ubuntu für die beste Kompatibilität:
- Ubuntu 22.04: PHP 8.1 (installiert über
php8.1-fpm) - Ubuntu 24.04: PHP 8.3 (Passen Sie die Befehle für diese Version auf
php8.3-fpman)
Beide Versionen funktionieren ausgezeichnet mit Nginx und MySQL 8.0, unterstützen moderne Frameworks und erhalten regelmäßige Sicherheitsupdates.
Wie konfiguriere ich Nginx, um PHP-Dateien zu verarbeiten?
Fügen Sie einen location ~ \.php$-Block zu Ihrer Nginx-Serverkonfiguration hinzu, der PHP-Anfragen über einen Unix-Socket an PHP-FPM weiterleitet:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}Passen Sie den Socket-Pfad basierend auf Ihrer PHP-Version an, testen Sie mit sudo nginx -t und laden Sie mit sudo systemctl reload nginx neu.
Warum erhalte ich nach der Installation von PHP-FPM einen „502 Bad Gateway“-Fehler?
502-Fehler weisen darauf hin, dass Nginx nicht mit PHP-FPM kommunizieren kann. Häufige Ursachen:
- PHP-FPM läuft nicht: Überprüfen Sie mit
sudo systemctl status php8.1-fpmund starten Sie es bei Bedarf - Falscher Socket-Pfad: Überprüfen Sie, ob
/run/php/php8.1-fpm.sockexistiert und mit Ihrer Nginx-Konfiguration übereinstimmt - Berechtigungsproblem: Stellen Sie sicher, dass der Nginx-Benutzer (www-data) auf die Socket-Datei zugreifen kann
- PHP-FPM-Konfigurationsfehler: Überprüfen Sie die Protokolle unter
/var/log/php8.1-fpm.log
Lösung: Starten Sie beide Dienste neu:
sudo systemctl restart php8.1-fpm nginxWie sichere ich MySQL nach der Installation ab?
Führen Sie das integrierte Sicherheitsskript aus:
sudo mysql_secure_installationFolgen Sie den Anweisungen, um:
- Passwortvalidierungs-Plugin aktivieren
- Starkes Root-Passwort festlegen
- Anonyme Benutzer entfernen
- Remote-Root-Login deaktivieren
- Testdatenbank entfernen
- Ladeberechtigungen neu
Für Anwendungsdatenbanken sollten Sie spezielle Benutzer mit eingeschränkten Rechten erstellen, anstatt das Root-Konto zu verwenden.
Kann ich mehrere Websites auf einem LEMP-Server betreiben?
Ja, erstellen Sie separate Nginx-Serverblöcke für jede Domain:
- Verzeichnis erstellen:
sudo mkdir -p /var/www/second_domain - Serverblock erstellen:
sudo nano /etc/nginx/sites-available/second_domain - Mit eindeutigen
server_name- undroot-Direktiven konfigurieren - Aktivieren:
sudo ln -s /etc/nginx/sites-available/second_domain /etc/nginx/sites-enabled/ - Testen und neu laden:
sudo nginx -t && sudo systemctl reload nginx
Jede Website kann eigene PHP-Einstellungen und Datenbankbenutzer haben.
Wie kann ich PHP auf eine neuere Version aktualisieren?
Ubuntu-Paketaktualisierungen handhaben kleinere Versionen automatisch. Für Versionsupgrades der Hauptversion:
Fügen Sie Ondřejs PHP PPA (vertrauenswürdiges Drittanbieter-Repository) hinzu:
sudo add-apt-repository ppa:ondrej/php sudo apt updateNeue PHP-FPM-Version installieren:
sudo apt install php8.3-fpm php8.3-mysql -yAktualisiere den Nginx-Konfigurations-Socket-Pfad auf
/run/php/php8.3-fpm.sockNginx testen und neu laden
Optional alte Version entfernen:
sudo apt purge php8.1-fpm
Testen Sie immer zuerst in der Staging-Umgebung, bevor Sie Produktionssysteme aktualisieren.
Häufige Probleme beheben
502 Bad Gateway Fehler
Das häufigste Problem beim LEMP-Stack tritt auf, wenn Nginx nicht mit PHP-FPM kommunizieren kann:
PHP-FPM-Status prüfen:
sudo systemctl status php8.1-fpmSocket-Pfad überprüfen:
ls -la /run/php/Die erwartete Ausgabe sollte die Datei php8.1-fpm.sock anzeigen.
Häufige Lösungen:
- PHP-FPM neu starten:
sudo systemctl restart php8.1-fpm - Überprüfen Sie, ob der Nginx-Serverblock-Pfad zum Socket mit dem tatsächlichen PHP-FPM-Socket übereinstimmt
- Überprüfen Sie die Dateiberechtigungen:
sudo chown www-data:www-data /run/php/php8.1-fpm.sock
Zugriff verweigert Fehler
Webverzeichnis-Berechtigungen korrigieren:
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domainMySQL-Verbindungsprobleme
MySQL-Root-Passwort zurücksetzen:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
FLUSH PRIVILEGES;
EXIT;MySQL-Dienst überprüfen:
sudo systemctl status mysqlPHP wird nicht verarbeitet
PHP-Module überprüfen:
php -m | grep -E 'mysql|fpm'PHP-FPM-Konfiguration überprüfen:
sudo nginx -t
sudo php-fpm8.1 -tDebugge 404-Fehler:
- Überprüfen Sie, ob
index.phpin der Nginx-index-Direktive aufgeführt ist - Überprüfen, ob die Datei existiert:
ls -la /var/www/your_domain/ - Überprüfen Sie die Nginx-Fehlerprotokolle:
sudo tail -f /var/log/nginx/error.log
Schlussfolgerung
In diesem Leitfaden haben Sie eine flexible Grundlage geschaffen, um PHP-Websites und -Anwendungen für Ihre Besucher bereitzustellen, wobei Sie Nginx als Webserver und MySQL als Datenbanksystem verwenden. Sie können dies auch mit einem Apache-Webserver tun. Schauen Sie sich unser Tutorial an, wie Sie den Linux-, Apache-, MySQL- und PHP-(LAMP)-Stack auf Ubuntu installieren. Sie können Ihre Website auch mit Let’s Encrypt sichern, das kostenlose, vertrauenswürdige Zertifikate bereitstellt. Erfahren Sie, wie Sie dies mit unserem Leitfaden zu Let’s Encrypt für Apache machen können.
Danke, dass Sie mit der Linux-Console.net-Community lernen.



