LEMP-Stack auf Debian 11 Bullseye

LEMP ist eine Sammlung von Open-Source-Softwares, die häufig für die Bereitstellung von Webanwendungen verwendet wird. LEMP ist ein Akronym, das die Konfiguration eines Linux-Systems mit einem Nginx (ausgesprochen EngineX, daher das E im Akronym) Webserver, einer MySQL- oder MariaDB-Datenbank und PHP verwendet wird. Kurz LEMP = Linux Nginx MySQL PHP

Debian 11 - LEMP Stack Installation - NGINX - MariaDB/MySQL 10.7 - PHP 8 - SSL
Dieses Video ansehen auf YouTube.
Mit dem abspielen des Videos stimmst du den Datenschutzrichtlinien (siehe Datenschutz) von Youtube zu.

Betriebssystem aktualisieren

Aktualisiere dein Debian-Betriebssystem, so dass alle vorhandenen Pakete auf dem neuesten Stand sind:

sudo apt update && sudo apt upgrade -y

Abhängigkeiten installieren

Benötigte Abhängigkeiten installieren. Verwende folgenden Befehl, um zu installieren oder zu überprüfen, ob sie vorhanden sind.

sudo apt-get install software-properties-common dirmngr ca-certificates apt-transport-https nano wget curl -y

Installieren von Nginx – (LEMP-Stack)

Um die LEMP-Stack-Installation zu starten, beginnen wir mit dem Nginx Webserver. Entweder die neueste Nginx-Mainline oder Stable von der zu installierenden Ondřej Surý Repository, um die aktuellere Version zu haben. Ubuntu-Benutzer können die PPA Repositories nutzen.

Um die neueste Version von Nginx Mainline oder Stable zu verwenden, müssen Sie zuerst das Repository importieren.

Option 1: Mainline-Repository importieren:

curl -sSL https://packages.sury.org/nginx-mainline/README.txt | sudo bash -x

Option 2: Stabiles Repository importieren:

curl -sSL https://packages.sury.org/nginx/README.txt | sudo bash -x


Aktualisiere dein Repository, um die neue Änderung widerzuspiegeln:

sudo apt update

Nachdem die Nginx-Repository installiert und aktiviert wurde, installieren wir Nginx mit dem folgenden:

sudo apt install nginx-core nginx-common nginx nginx-full

Möglicherweise wirst du aufgefordert werden, die vorhandenen zu behalten oder zu ersetzen unter /etc/nginx/nginx.conf Konfigurationsdatei während der Installation. Es wird empfohlen, die aktuelle Konfigurationsdatei beizubehalten, indem du (n) auswählst.

Überprüfe nun, ob das neueste Nginx aus dem Ondřej Surý-Repository installiert wurde mit apt-cache.

apt-cache policy nginx

Brotli-Support installieren

Bearbeite die nginx.conf um Brodle zu aktivieren

nano /etc/nginx/nginx.conf

Fügen nun die zusätzlichen Zeilen im HTTP{} Abschnitt hinzu:

brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_types application/atom+xml application/javascript application/json application/rss+xml
application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype
application/x-font-ttf application/x-javascript application/xhtml+xml application/xml
font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon
image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml;

Das brotli_comp_level ist einstellbar zwischen 1 (niedrigste) und 11 (höchste). Normalerweise nutzen die meisten Server die goldene Mitte, aber wenn dein Server leistungsstark ist, kannst du das Level 11 nehmen und dabei die CPU-Auslastung überwachen.

Teste als Nächstes, ob die Änderungen korrekt funktionieren, bevor du sie live schaltest:

sudo nginx -t

Ist die Konfiguration in Ordnung, können wir NGINX nun neustarten

sudo systemctl restart nginx

Aktivieren von NGINX beim Systemstart

sudo systemctl enable nginx

Überprüfen des NGINX Status

systemctl status nginx

Installation von MySQL / MariaDB-Server

Das offizielle Bash-Skript ist oft der beste und einfachste Weg, MariaDB auf Debian 11 zu installieren, da man sofortige Updates erhält, wenn Sicherheits- oder neue Funktionen verfügbar sind. Dieselbe Methode kann verwendet werden, um die alternativen Versionen wie MariaDB 10.5 zu installieren und kann verwendet werden, um MariaDB 10.8 und höher in Zukunft zu installieren mariadb-server-version={Versionsnummer}.

Importieren Sie MariaDB 10.6/10.7 Repo mit dem offiziellen Bash-Skript

Option 1. MariaDB 10.6-Repository importieren:
curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version=10.6 --skip-maxscale --skip-tools

Option 2. MariaDB 10.7-Repository importieren:
curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version=10.7 --skip-maxscale --skip-tools

Repository Listen Updaten
sudo apt update

Um MariaDB zu installieren, müssen die Client- und Serverpakete installiert werden.

sudo apt-get install -y mariadb-server mariadb-client

Überprüfen der Version
mariadb --version

MariaDB Server Status überprüfen
systemctl status mariadb

MariaDB Server Starten
sudo systemctl start mariadb

MariaDB Server Stoppen
sudo systemctl stop mariadb

MariaDB Server beim Systemstart automatisch starten
sudo systemctl enable mariadb

MariaDB Server neustarten
sudo systemctl restart mariadb

MariaDB Sicherheitsskript

Bei der Installation einer frischen MariaDB sind die Standardeinstellungen sehr schwach, dass potenzielle Eindringversuche oder das Ausnutzen von Hackern möglich sind. Eine Lösung besteht darin, das Installationssicherheitsskript mit der MariaDB Installation zu starten.

Verwenden Sie zunächst den folgenden Befehl, um die (mysql_secure_installation):

sudo mysql_secure_installation

Danach musst du einige Angaben machen und Passwörter definieren.

PHP Installation

Der letzte Teil des Tutorials besteht darin, PHP zu installieren.

Standardmäßig ist PHP im Standard-Repository von Debian verfügbar. Um jedoch die neueste Version ähnlich wie Nginx zu haben, konzentriert sich das Tutorial auf den Import der neuesten PHP-Version von Ondřej Surý. Diese ist stets aktueller.

Ondřej Surý PHP Repository importieren

Der erste Schritt ist das Importieren und Installieren der GPG-Schlüssel bevor du das Repository hinzufügst.

curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x

sudo apt update

Installieren von PHP 7.4 / 8.0 oder 8.1 FPM

So installierst du PHP-FPM 7.4
sudo apt install php7.4 php7.4-fpm php7.4-cli php7.4-curl php7.4-zip php7.4-mysql -y

So installierst du PHP-FPM 8.0
sudo apt install php8.0 php8.0-fpm php8.0-cli php8.0-curl php8.0-zip php8.0-mysql -y

So installierst du PHP-FPM 8.1
sudo apt install php8.1 php8.1-fpm php8.1-cli php8.1-curl php8.1-zip php8.1-mysql -y

Nach der Installation wird der PHP-FPM-Dienst automatisch gestartet und du kannst den Status überprüfen, um sicherzustellen, dass er in Ordnung ist.

systemctl status php8.1-fpm

Überprüfe welche PHP Version aktiv ist
php --version

PHP Testseite

Um PHP-FPM mit dem Nginx-Webserver zu testen, kannst du eine Datei im Webroot-Verzeichnis erstellen.

sudo nano /var/www/html/info.php

Inhalt der Datei:

<?php
phpinfo();
?>

In der Adressleiste des Internetbrowsers können wir überprüfen ob die PHP-Webseite angezeigt wird (Server-IP-Adresse/info.php). Beispiel http://127.0.0.1/info.php

Klappt dies, kann die Datei wieder gelöscht werden.

sudo rm -f /var/www/html/info.php

Erstelle einen Nginx-Serverblock

Um einzelne Domains zu konfigurieren müssen wir NGINX noch Bescheid geben, welche Domain auf welchen Ordner zeigt und wie die Einstellungen sind.

Erstellen von Serverblockverzeichnissen

Die (.conf) Dateien befinden sich normalerweise in (sites-available) und (sites-enabled). Benutzer, die aus verschiedenen Distributionen kommen, würden feststellen, dass dies bereits installiert ist; Für Rocky Linux müssen wie sie jedoch erstellen.

Erstellen der Verzeichnisse
sudo mkdir /etc/nginx/sites-available && sudo mkdir /etc/nginx/sites-enabled

Bearbeite die Nginx-Konfigurationsdatei
sudo nano /etc/nginx/nginx.conf

Füge dann im HTTP-Abschnitt der (nginx.conf) Konfigurationsdatei:
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;

Der server_names_hash_bucket_size erhöht den Speicher, der dem Analysieren von Domänennamen zugewiesen wird.

Konfigurationsdatei für Serverblock erstellen

Erstelle nun mit einem Texteditor eine Serverblockdatei mit dem Namen der Domain und .conf hintendran:

sudo nano /etc/nginx/sites-available/lemp.renefuerst.eu.conf

Die Konfigurationsdatei mit einem funktionierenden Beispiel mit aktiviertem PHP-FPM einrichten.

server {
listen 80;
listen [::]:80;
server_name lemp.renefuerst.eu www.lemp.renefuerst.eu;
root /var/www/lemp.renefuerst.eu/;
index index.php index.html index.htm;

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

location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}

# A long browser cache lifetime can speed up repeat visits to your page
location ~* .(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires 360d;
}

# disable access to hidden files
location ~ /.ht {
access_log off;
log_not_found off;
deny all;
}
}

Test-Landingpage erstellen

Eine gute Idee ist es, eine Beispieltest-Site zu erstellen. Unten ist ein Standardtest index.html eingerichtet:

Falls du dein permanentes oder Test-Webverzeichnis noch nicht erstellt hast:

sudo mkdir -p /var/www/lemp.renefuerst.eu/

Du musst die Berechtigungen konfigurieren und kannst als aktuell angemeldeter Benutzer mit dem $USER Variable:

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

Die letzte Berechtigungseinstellung besteht darin, der Öffentlichkeit das Lesen des Webverzeichnisses (Zugriff auf Ihre Site) mit der Berechtigung chmod 755 zu ermöglichen:

sudo chmod -R 755 /var/www

Als Nächstes erstelle die index.html Datei:

sudo nano /var/www/lemp.renefuerst.eu/index.php

Füge Beispiel HTML oder PHP Code ein.

Nginx-Serverblock aktivieren

Um die Konfigurationsdatei zu aktivieren müssen wir einen symbolischen Link erstellen (symlink) für die Serverblock-Konfigurationsdatei im (sites-available) Verzeichnis zum (sites-enabled) Verzeichnis mit dem folgenden Befehl:

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf

Nginx-Serverblock testen

sudo nginx -t

Öffne als Nächstes den Internetbrowser und gib die Domain-Adresse ein (beispiel.com) um zu testen, ob der Server erreichbar ist.

Nginx mit dem kostenlosen SSL-Zertifikat von Let's Encrypt

Idealerweise willst du Nginx ausführen mit einer verschlüsselten HTTPS-Verbindung mit einem SSL-Zertifikat. Der beste Weg, dies zu tun, ist die Verwendung von Let's Encrypt, eine kostenlose, automatisierte und offene Zertifizierungsstelle.

Installiere zuerst das certbot-Paket wie folgt:

sudo apt install python3-certbot-nginx -y

Führe nach der Installation den folgenden Befehl aus, um die Erstellung des Zertifikats zu starten:

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email deine@emailadressehier.com -d lemp.renefuerst.eu

Ein ideales Setup umfasst eine erzwungene HTTPS 301-Weiterleitungen, einen Strict-Transport-Security-Header und OCSP-Stapling. Passe einfach die E-Mail und den Domainnamen an deine Anforderungen an.

Jetzt lautet deine URL HTTPS://lemp.renefuerst.eu statt HTTP://lemp.renefuerst.eu.

Wenn du das alte HTTP-URL verwendest, wird es automatisch umgeleitet zu HTTPS.