LEMP Stack · 11 min read · Oct 12, 2025

Wie man Nginx mit PHP und MySQL (LEMP-Stack) auf Ubuntu 22.04 installiert

Der LEMP-Software-Stack ist eine Gruppe von Open-Source-Software, die es einem Server ermöglicht, dynamische Websites und Apps, die in PHP geschrieben sind, zu hosten. Es ist ein Akronym für L inux, Nginx (ausgesprochen als E ngine-X), M ySQL und P HP.

Dieser Leitfaden zeigt Ihnen, wie Sie einen LEMP-Stack auf einem Ubuntu 22.04-Server installieren. Sie werden auch lernen, Anwendungen wie phpMyAdmin zu installieren.

Voraussetzungen

  • Ein Server, der Ubuntu 22.04 ausführt.
  • Ein Nicht-Root-Benutzer mit Sudo-Rechten.
  • Die unkomplizierte Firewall (UFW) ist aktiviert und läuft.
  • Alles ist aktualisiert. $ sudo apt update && sudo apt upgrade

Schritt 1 - Firewall konfigurieren

Der erste Schritt vor der Installation von Paketen besteht darin, die Firewall so zu konfigurieren, dass HTTP- und HTTPS-Verbindungen erlaubt sind.

Überprüfen Sie den Status der Firewall.

$ sudo ufw status

Sie sollten etwas sehen, das wie folgt aussieht.

Status: aktiv

Zu                         Aktion      Von
--                         ------      ----
OpenSSH                    ERLAUBEN    Überall
OpenSSH (v6)               ERLAUBEN    Überall (v6)

Erlauben Sie HTTP- und HTTPS-Ports.

$ sudo ufw allow http
$ sudo ufw allow https

Überprüfen Sie den Status erneut, um zu bestätigen.

$ sudo ufw status
Status: aktiv

Zu                         Aktion      Von
--                         ------      ----
OpenSSH                    ERLAUBEN    Überall
80/tcp                     ERLAUBEN    Überall
443/tcp                    ERLAUBEN    Überall
OpenSSH (v6)               ERLAUBEN    Überall (v6)
80/tcp (v6)                ERLAUBEN    Überall (v6)
443/tcp (v6)               ERLAUBEN    Überall (v6)

Schritt 2 - PHP installieren

Ubuntu 22.04 wird standardmäßig mit PHP 8.1 ausgeliefert. Sie können es installieren, indem Sie den folgenden Befehl ausführen.

$ sudo apt install php-fpm php-cli php-mysqlnd php-mbstring php-xml php-gd

Wir haben die MySQL-, CLI-, GD-, Mbstring- und XML-Erweiterungen von PHP installiert. Sie können zusätzliche Erweiterungen gemäß Ihren Anforderungen installieren.

Um immer auf der neuesten Version von PHP zu bleiben oder wenn Sie mehrere Versionen von PHP installieren möchten, fügen Sie Ondrejs PHP-Repository hinzu.

Fügen Sie Ondrejs PHP-Repository hinzu.

$ sudo add-apt-repository ppa:ondrej/php

Jetzt können Sie jede Version von PHP installieren.

$ sudo apt install php8.0-fpm php8.0-cli

Überprüfen Sie die installierte PHP-Version.

$ php --version
PHP 8.1.2 (cli) (built: Jun 13 2022 13:52:54) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    mit Zend OPcache v8.1.2, Copyright (c), von Zend Technologies

Schritt 3 - MySQL installieren

Ubuntu 22.04 wird mit der neuesten Version von MySQL ausgeliefert. Sie können es mit einem einzigen Befehl installieren.

$ sudo apt install mysql-server

Überprüfen Sie die MySQL-Version.

$ mysql --version
mysql  Ver 8.0.29-0ubuntu0.22.04.2 für Linux auf x86_64 ((Ubuntu))

Dieser Schritt ist notwendig für MySQL-Versionen 8.0.28 und höher. Geben Sie die MySQL-Shell ein.

$ sudo mysql

Führen Sie den folgenden Befehl aus, um das Passwort für Ihren Root-Benutzer festzulegen. Stellen Sie sicher, dass es eine Mischung aus Zahlen, Großbuchstaben, Kleinbuchstaben und Sonderzeichen enthält.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';

Verlassen Sie die Shell.

mysql> exit

Führen Sie das MySQL-Sicherheitsinstallationsskript aus.

$ sudo mysql_secure_installation

Sie werden aufgefordert, die Komponente zur Passwortvalidierung zu installieren. Sie überprüft die Stärke der in MySQL verwendeten Passwörter. Drücken Sie Y, um es zu installieren.

Als Nächstes werden Sie aufgefordert, das Niveau der Passwortvalidierungspolitik festzulegen. Wählen Sie 2, da dies die stärkste ist.

Geben Sie als Nächstes Ihr Root-Passwort ein. Drücken Sie N, um die Änderung abzulehnen.

Drücken Sie Y, um anonyme Benutzer zu entfernen, entfernte Root-Logins zu verweigern, die Testdatenbank zu entfernen und die Berechtigungstabellen neu zu laden.

Schritt 4 - MySQL konfigurieren

Melden Sie sich bei der MySQL-Shell an. Geben Sie Ihr Root-Passwort ein, wenn Sie dazu aufgefordert werden.

$ sudo mysql -u root -p

Erstellen Sie eine Beispiel-Datenbank.

mysql> CREATE DATABASE exampledb;

Erstellen Sie ein SQL-Benutzerkonto.

mysql> CREATE USER 'exampleuser'@'localhost' IDENTIFIED BY 'YourPassword2!';

Gewähren Sie dem Benutzer alle Berechtigungen für die Datenbank.

mysql> GRANT ALL PRIVILEGES ON exampledb.* TO 'exampleuser'@'localhost';

Aktualisieren Sie die Benutzerberechtigungen.

mysql> FLUSH PRIVILEGES;

Verlassen Sie die Shell.

mysql> exit

Lassen Sie uns erneut in die MySQL-Shell einloggen, indem wir den neu erstellten Benutzer verwenden.

$ sudo mysql -u exampleuser -p

Erstellen Sie eine Testtabelle.

mysql> CREATE TABLE exampledb.name_list ( sno INT AUTO_INCREMENT, content VARCHAR(255), PRIMARY KEY(sno) );

Fügen Sie Testdaten ein.

mysql> INSERT INTO exampledb.name_list (content) VALUES ("Navjot");

Wiederholen Sie den obigen Befehl mehrere Male, um weitere Einträge hinzuzufügen. Führen Sie den folgenden Befehl aus, um den Inhalt der Tabelle zu überprüfen.

mysql> SELECT * FROM exampledb.name_list;

Sie erhalten die folgende Ausgabe.

+-----+---------+
| sno | content |
+-----+---------+
|   1 | Navjot  |
|   2 | Adam    |
|   3 | Josh    |
|   4 | Peter   |
+-----+---------+
4 Zeilen in der Menge (0.00 sec)

Verlassen Sie die MySQL-Shell.

mysql> exit

Schritt 5 - Nginx installieren

Ubuntu 22.04 wird mit einer älteren Version von Nginx ausgeliefert. Um die neueste Version zu installieren, müssen Sie das offizielle Nginx-Repository herunterladen.

Importieren Sie den Signaturschlüssel von Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Fügen Sie das Repository für die stabile Version von Nginx hinzu.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Aktualisieren Sie die System-Repositorys.

$ sudo apt update

Installieren Sie Nginx.

$ sudo apt install nginx

Überprüfen Sie die Installation.

$ nginx -v
nginx version: nginx/1.22.0

Schritt 6 - PHP-FPM konfigurieren

Öffnen Sie php.ini zur Bearbeitung.

$ sudo nano /etc/php/8.1/fpm/php.ini

Um die Dateigrößen für Uploads festzulegen, ändern Sie die Werte der Variablen upload_max_filesize und post_max_size.

upload_max_filesize = 50M
...
post_max_size = 50M

Konfigurieren Sie das PHP-Speicherlimit je nach Ihren Serverressourcen und Anforderungen.

memory_limit = 256M

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Öffnen Sie die Datei /etc/php/8.0/fpm/pool.d/www.conf.

$ sudo nano /etc/php/8.0/fpm/pool.d/www.conf

Wir müssen den Unix-Benutzer/die Gruppe der PHP-Prozesse auf nginx setzen. Suchen Sie die Zeilen user=www-data und group=www-data in der Datei und ändern Sie sie in nginx.

...
; Unix-Benutzer/-Gruppe der Prozesse
; Hinweis: Der Benutzer ist obligatorisch. Wenn die Gruppe nicht festgelegt ist, wird die Gruppe des Standardbenutzers verwendet.
;       wird verwendet.
user = nginx
group = nginx
...

Suchen Sie auch die Zeilen listen.owner=www-data und listen.group=www-data in der Datei und ändern Sie sie in nginx.

listen.owner = nginx
listen.group = nginx

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Starten Sie den PHP-FPM-Prozess neu.

$ sudo systemctl restart php8.1-fpm

Schritt 7 - phpMyAdmin installieren

Laden Sie die Archivdatei von phpMyAdmin für die englische Sprache herunter.

$ wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-english.tar.gz

Erstellen Sie ein öffentliches Verzeichnis für die Website.

$ sudo mkdir /var/www/html/example.com -p

Entpacken Sie das Archiv in das öffentliche Verzeichnis.

$ sudo tar -xzvf phpMyAdmin-5.2.0-english.tar.gz -C /var/www/example.com

Wechseln Sie in das öffentliche Verzeichnis.

$ cd /var/www/html/example.com

Benennen Sie das entpackte Verzeichnis in etwas Unauffälliges um, um die Sicherheit zu verbessern.

$ sudo mv phpMyAdmin-5.2.0-english sm175

Schritt 8 - phpMyAdmin konfigurieren

Kopieren Sie die Beispielkonfigurationsdatei.

$ sudo cp sm175/config.sample.inc.php sm175/config.inc.php

Öffnen Sie die Konfigurationsdatei zur Bearbeitung.

$ sudo nano sm175/config.inc.php

Suchen Sie die Zeile $cfg['blowfish_secret'] = ''; und geben Sie eine 32-Zeichen zufällige Zeichenfolge für die cookie-basierte Authentifizierung ein.

Sie können den Online-Blowfish-Generator von phpSolved verwenden oder es über die Befehlszeile tun.

Kopieren Sie den Wert und fügen Sie ihn wie gezeigt ein.

$cfg['blowfish_secret'] = 'Tc/HfLPBOAPxJ-rhQP}HJoZEK69c3j:m';

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Ändern Sie den Besitz der Website und von phpMyAdmin auf den Nginx-Server.

$ sudo chown -R nginx:nginx /var/www/html/example.com

Löschen Sie das Setup-Verzeichnis von phpMyAdmin.

$ sudo rm -rf /var/www/html/example.com/sm175/setup

Schritt 9 - Opcache konfigurieren

Opcache ist das Caching-System von PHP. Es funktioniert, indem es den vorcompilierten Skript-Bytecode im Speicher speichert, sodass jede Seite, die ein Benutzer besucht, schneller geladen wird. Opcache ist standardmäßig installiert. Um dies zu überprüfen, überprüfen Sie die PHP-Version.

$ php --version
PHP 8.1.2 (cli) (built: Jun 13 2022 13:52:54) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    mit Zend OPcache v8.1.2, Copyright (c), von Zend Technologies

Das sagt uns, dass Opcache installiert und verfügbar ist. Falls es hier nicht angezeigt wird, können Sie es manuell installieren, indem Sie den folgenden Befehl ausführen.

$ sudo apt install php-opcache

Um die Opcache-Einstellungen zu ändern, öffnen Sie die Datei /etc/php/8.1/fpm/conf.d/10-opcache.ini zur Bearbeitung.

$ sudo nano /etc/php/8.1/fpm/conf.d/10-opcache.ini

Die folgenden Einstellungen sollten Ihnen den Einstieg in die Verwendung von Opcache erleichtern und werden allgemein für eine gute Leistung empfohlen. Sie können eine Konfiguration aktivieren, indem Sie sie durch Entfernen des Semikolons davor entkommentieren.

opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Schritt 10 - Certbot für SSL installieren

Wir müssen Certbot installieren, um kostenlose SSL-Zertifikate zu generieren, die von Let’s Encrypt angeboten werden.

Sie können Certbot entweder über das Repository von Ubuntu installieren oder die neueste Version mit dem Snapd-Tool herunterladen. Wir werden die Snapd-Version verwenden.

Ubuntu 22.04 wird standardmäßig mit Snapd installiert. Führen Sie die folgenden Befehle aus, um sicherzustellen, dass Ihre Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core
$ sudo snap refresh core

Installieren Sie Certbot.

$ sudo snap install --classic certbot

Verwenden Sie den folgenden Befehl, um sicherzustellen, dass der Certbot-Befehl ausgeführt werden kann, indem Sie einen symbolischen Link zum Verzeichnis /usr/bin erstellen.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Schritt 11 - Testen einer Demoseite

Erstellen Sie die Seite

Erstellen und öffnen Sie eine Testseite zur Bearbeitung.

$ sudo nano /var/www/html/example.com/index.php

Fügen Sie den folgenden Code ein.

Mitgliederliste
    "; foreach($db->query("SELECT content FROM $table") as $row) { echo "
  1. " . $row['content'] . "
  2. "; } echo "
"; } catch (PDOException $e) { print "Fehler!: " . $e->getMessage() . "
"; die(); }

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Erstellen Sie ein SSL-Zertifikat

Führen Sie den folgenden Befehl aus, um ein SSL-Zertifikat zu generieren.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com

Der obige Befehl lädt ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/example.com auf Ihrem Server herunter.

Generieren Sie ein Diffie-Hellman-Gruppen-Zertifikat.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Öffnen Sie die Datei /etc/letsencrypt/renewal/example.com.conf zur Bearbeitung.

$ sudo nano /etc/letsencrypt/renewal/example.com.conf

Fügen Sie den folgenden Code am Ende ein.

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Wir haben das SSL-Zertifikat mit der Standalone-Option von Certbot generiert. Es führt seinen eigenen Webserver aus, um das Zertifikat zu erstellen, was bedeutet, dass Nginx während der Erneuerung abgeschaltet werden sollte. Die pre_hook- und post_hook-Befehle werden vor und nach der Erneuerung ausgeführt, um den Nginx-Server automatisch herunterzufahren und neu zu starten, sodass keine manuelle Intervention erforderlich ist.

Um zu überprüfen, ob die SSL-Erneuerung einwandfrei funktioniert, führen Sie einen Testlauf des Prozesses durch.

$ sudo certbot renew --dry-run

Wenn Sie keine Fehler sehen, sind Sie bereit. Ihr Zertifikat wird automatisch erneuert.

Nginx konfigurieren

Erstellen und öffnen Sie die Datei /etc/nginx/conf.d/example.conf zur Bearbeitung.

$ sudo nano /etc/nginx/conf.d/example.conf

Fügen Sie den folgenden Code ein.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  example.com;

    access_log  /var/log/nginx/example.com.access.log;
    error_log   /var/log/nginx/example.com.error.log;

    ssl_certificate      /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    root /var/www/html/example.com;

    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # PHP-Skripte an den FastCGI-Server weiterleiten
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

# HTTPS erzwingen
server {
    listen       80;
    listen       [::]:80;
    server_name  example.com;
    return 301   https://$host$request_uri;
}

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Öffnen Sie die Datei /etc/nginx/nginx.conf zur Bearbeitung.

$ sudo nano /etc/nginx/nginx.conf

Fügen Sie die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; hinzu.

server_names_hash_bucket_size  64;

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Überprüfen Sie Ihre Nginx-Konfiguration.

$ sudo nginx -t

Wenn Sie keine Fehler sehen, sind Sie bereit. Starten Sie den Nginx-Server.

$ sudo systemctl start nginx

Laden Sie Ihre Website, indem Sie https://example.com in Ihrem Browser besuchen, und Sie werden die folgende Seite sehen.

LEMP-Testseiten-Ausgabe

Sie können auf Ihre phpMyAdmin-Installation zugreifen, indem Sie die URL https://example.com/sm175 in Ihrem Browser besuchen. Sie können entweder Ihren Root-Benutzer oder den zuvor erstellten Benutzer eingeben, um sich anzumelden.

Fazit

Damit endet unser Tutorial, in dem Sie gelernt haben, wie man einen LEMP-Stack auf einem Ubuntu 22.04-Server einrichtet und eine Demoseite erstellt. Wenn Sie Fragen haben, posten Sie diese in den Kommentaren unten.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.