LEMP Stack Installation

Installation des LEMP-Stacks auf Ubuntu 20.04 Server/Desktop

Diese Anleitung zeigt Ihnen, wie Sie den LEMP-Stack (Nginx, MariaDB und PHP7.4) unter Ubuntu 20.04 installieren.

LEMP steht für Linux, Nginx (Engine-X), MariaDB/MySQL und PHP, die alle quelloffen und frei verwendbar sind. Es ist der gängigste Software-Stack, der dynamische Websites und Webanwendungen betreibt.

Linux ist das Betriebssystem, Nginx ist der Webserver, MariaDB/MySQL ist der Datenbankserver und PHP ist die serverseitige Skriptsprache, die für die Erstellung dynamischer Webseiten verantwortlich ist.

Voraussetzungen
Um diesem Tutorial zu folgen, benötigen Sie ein Ubuntu 20.04 Betriebssystem, das auf Ihrem lokalen Computer oder auf einem entfernten Server läuft.

Schritt 1: Software-Pakete aktualisieren

Bevor wir den LEMP-Stack installieren, ist es ratsam, das Repository und die Softwarepakete zu aktualisieren, indem Sie die folgenden Befehle auf Ihrem Ubuntu 20.04 Betriebssystem ausführen.

sudo apt update
sudo apt upgrade

Schritt 2: Nginx Webserver installieren

Nginx ist ein leistungsstarker Webserver und heutzutage sehr beliebt. Er kann auch als Reverse-Proxy und Caching-Server verwendet werden. Geben Sie den folgenden Befehl ein, um den Nginx-Webserver zu installieren.

sudo apt install nginx

Nach der Installation können wir den automatischen Start von Nginx beim Booten aktivieren, indem wir den folgenden Befehl ausführen.

sudo systemctl enable nginx

Dann starten Sie Nginx mit diesem Befehl:

sudo systemctl start nginx

Überprüfen Sie nun den Status von Nginx.

sudo systemctl status nginx

Ausgabe:

● 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 Fri 2020-04-10 14:11:43 UTC; 3s ago
       Docs: man:nginx(8)
    Process: 8533 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 8545 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 8549 (nginx)
      Tasks: 3 (limit: 9451)
     Memory: 3.9M
     CGroup: /system.slice/nginx.service
             ├─8549 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ├─8550 nginx: worker process
             └─8551 nginx: worker process

“Enabled” bedeutet, dass der automatische Start beim Booten aktiviert ist, und wir können sehen, dass Nginx läuft. In der Ausgabe können Sie auch sehen, wie viel RAM Nginx verbraucht. Wenn der obige Befehl nicht sofort nach der Ausführung beendet wird. Sie müssen “q” drücken, damit er beendet wird.

Überprüfen Sie die Nginx-Version.

nginx -v

Ausgabe:

nginx version: nginx/1.17.9 (Ubuntu)

Geben Sie nun die öffentliche IP-Adresse Ihres Ubuntu 20.04-Servers in die Adresszeile des Browsers ein. Sie sollten die “Willkommen bei Nginx”-Webseite sehen, was bedeutet, dass der Nginx-Webserver ordnungsgemäß läuft. Wenn Sie LEMP auf Ihrem lokalen Ubuntu 20.04-Computer installieren, geben Sie 127.0.0.1 oder localhost in die Adressleiste des Browsers ein.

Ubuntu 20.04 LEMP

Wenn die Verbindung verweigert wird oder nicht zustande kommt, kann es sein, dass eine Firewall eingehende Anfragen an TCP-Port 80 verhindert. Wenn Sie eine iptables-Firewall verwenden, müssen Sie den folgenden Befehl ausführen, um TCP-Port 80 zu öffnen.

sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT

Wenn Sie die UFW-Firewall verwenden, führen Sie diesen Befehl aus, um den TCP-Port 80 zu öffnen.

sudo ufw allow http

Schließlich müssen wir www-data (Nginx-Benutzer) als Eigentümer des Web-Verzeichnisses festlegen. Standardmäßig gehört es dem Benutzer root.

sudo chown www-data:www-data /usr/share/nginx/html -R

Schritt 3: MariaDB-Datenbankserver installieren

MariaDB ist ein Drop-in-Ersatz für MySQL. Er wurde von ehemaligen Mitgliedern des MySQL-Teams entwickelt, die befürchten, dass Oracle MySQL in ein Closed-Source-Produkt verwandeln könnte. Geben Sie den folgenden Befehl ein, um MariaDB unter Ubuntu 20.04 zu installieren.

sudo apt install mariadb-server mariadb-client

Nach der Installation sollte der MariaDB-Server automatisch gestartet werden. Verwenden Sie systemctl, um seinen Status zu überprüfen.

systemctl status mariadb

Ausgabe:

● mariadb.service - MariaDB 10.3.22 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-04-10 14:19:16 UTC; 18s ago
       Docs: man:mysqld(8)
             https://mariadb.com/kb/en/library/systemd/
   Main PID: 9161 (mysqld)
     Status: "Taking your SQL requests now..."
      Tasks: 31 (limit: 9451)
     Memory: 64.7M
     CGroup: /system.slice/mariadb.service
             └─9161 /usr/sbin/mysqld

Wenn er nicht läuft, starten Sie ihn mit diesem Befehl:

sudo systemctl start mariadb

Um MariaDB beim Booten automatisch starten zu lassen, führen Sie

sudo systemctl enable mariadb

Führen Sie nun das Sicherheitsskript nach der Installation aus.

sudo mysql_secure_installation

Wenn Sie aufgefordert werden, das MariaDB-Root-Passwort einzugeben, drücken Sie die Eingabetaste, da das Root-Passwort noch nicht festgelegt ist. Geben Sie dann y ein, um das Root-Passwort für den MariaDB-Server festzulegen.

Ubuntu 20.04 LEMP installieren Stack

Als nächstes können Sie die Eingabetaste drücken, um alle verbleibenden Fragen zu beantworten, wodurch der anonyme Benutzer entfernt, die Remote-Root-Anmeldung deaktiviert und die Testdatenbank entfernt wird. Dieser Schritt ist eine Grundvoraussetzung für die Sicherheit der MariaDB-Datenbank. (Beachten Sie, dass Y groß geschrieben wird, was bedeutet, dass dies die Standardantwort ist).

LEMP auf Ubuntu 20.04 Server installieren

Standardmäßig verwendet das MaraiDB-Paket unter Ubuntu unix_socket zur Authentifizierung der Benutzeranmeldung, was bedeutet, dass Sie sich mit dem Benutzernamen und dem Passwort des Betriebssystems bei der MariaDB-Konsole anmelden können. Sie können also den folgenden Befehl ausführen, um sich ohne Angabe des MariaDB-Root-Passworts anzumelden.

sudo mariadb -u root

Zum Beenden, führen Sie

exit;

Prüfen Sie die Versionsinformationen des MariaDB-Servers.

mariadb --version

Wie Sie sehen können, haben wir MariaDB 10.3.22 installiert.

mariadb  Ver 15.1 Distrib 10.3.22-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Schritt 4: PHP7.4 installieren

PHP7.4 ist im Repository von Ubuntu 20.04 enthalten und bietet eine geringfügige Leistungssteigerung gegenüber PHP7.3. Geben Sie den folgenden Befehl ein, um PHP7.4 und einige gängige Erweiterungen zu installieren.

sudo apt install php7.4 php7.4-fpm php7.4-mysql php-common php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-mbstring php7.4-xml php7.4-gd php7.4-curl

PHP-Erweiterungen werden in der Regel für Content-Management-Systeme (CMS) wie WordPress benötigt. Wenn Ihrer Installation zum Beispiel php7.4-xml fehlt, können einige Seiten Ihrer WordPress-Site leer sein und Sie können im Nginx-Fehlerprotokoll einen Fehler wie diesen finden:

PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function xml_parser_create()

Die Installation dieser PHP-Erweiterungen sorgt dafür, dass Ihr CMS reibungslos läuft. Starten Sie nun php7.4-fpm.

sudo systemctl start php7.4-fpm

Aktivieren Sie den Autostart beim Booten.

sudo systemctl enable php7.4-fpm

Status prüfen:

systemctl status php7.4-fpm

Beispiel Ausgabe:

● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor pr>
     Active: active (running) since Fri 2020-04-10 14:40:26 UTC; 12s ago
       Docs: man:php-fpm7.4(8)
    Process: 21019 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /ru>
   Main PID: 21012 (php-fpm7.4)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req>
      Tasks: 3 (limit: 9451)
     Memory: 9.4M
     CGroup: /system.slice/php7.4-fpm.service
             ├─21012 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
             ├─21017 php-fpm: pool www
             └─21018 php-fpm: pool www

Wenn der obige Befehl nicht sofort nach der Ausführung beendet wird. Sie müssen “q” drücken, damit er beendet wird.

Schritt 5: Einen Nginx-Server-Block erstellen

Ein Nginx-Server-Block ist wie ein virtueller Host im Apache. Wir werden den Standard-Server-Block nicht verwenden, da er nicht ausreicht, um PHP-Code auszuführen, und wenn wir ihn ändern, wird er unübersichtlich. Entfernen Sie also den Standard-Symlink im Verzeichnis sites-enabled, indem Sie den folgenden Befehl ausführen. (Er ist immer noch als /etc/nginx/sites-available/default verfügbar.)

sudo rm /etc/nginx/sites-enabled/default

Verwenden Sie dann einen Befehlszeilen-Texteditor wie Nano, um eine brandneue Serverblockdatei im Verzeichnis /etc/nginx/conf.d/ zu erstellen.

sudo nano /etc/nginx/conf.d/default.conf

Fügen Sie den folgenden Text in die Datei ein. Das folgende Snippet sorgt dafür, dass Nginx auf IPv4-Port 80 und IPv6-Port 80 mit einem Catch-All-Server-Namen lauscht.

server {
  listen 80;
  listen [::]:80;
  server_name _;
  root /usr/share/nginx/html/;
  index index.php index.html index.htm index.nginx-debian.html;

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

  location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
  }

 # 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;
  }
}

Speichern und schließen Sie die Datei. (Um eine Datei im Nano-Texteditor zu speichern, drücken Sie Strg+O und dann zur Bestätigung die Eingabetaste. Zum Beenden drücken Sie Strg+X.)

Testen Sie dann die Nginx-Konfigurationen.

sudo nginx -t

Wenn der Test erfolgreich ist, laden Sie Nginx neu.

sudo systemctl reload nginx

Schritt 6: Test PHP

Um PHP-FPM mit dem Nginx-Webserver zu testen, müssen wir eine Datei info.php im Verzeichnis webroot erstellen.

sudo nano /usr/share/nginx/html/info.php

Fügen Sie den folgenden PHP-Code in die Datei ein.


Speichern und schließen Sie die Datei. Geben Sie nun in der Adressleiste des Browsers server-ip-address/info.php ein. Ersetzen Sie sever-ip-address durch Ihre tatsächliche IP. Wenn Sie diese Anleitung auf Ihrem lokalen Computer durchführen, geben Sie 127.0.0.1/info.php oder localhost/info.php ein.

Sie sollten die PHP-Informationen Ihres Servers sehen. Das bedeutet, dass PHP-Skripte mit dem Nginx-Webserver ordnungsgemäß ausgeführt werden können.

Ubuntu 20.04 Nginx PHP 7.4

Herzlichen Glückwunsch! Sie haben Nginx, MariaDB und PHP7.4 erfolgreich auf Ubuntu 20.04 installiert. Um die Sicherheit Ihres Servers zu gewährleisten, sollten Sie die Datei info.php jetzt löschen, damit sie nicht von Hackern eingesehen werden kann.

sudo rm /usr/share/nginx/html/info.php

Tipp zur Fehlerbehebung

Wenn Sie auf Fehler stoßen, können Sie das Nginx-Fehlerprotokoll (/var/log/nginx/error.log) überprüfen, um herauszufinden, was los ist.

Automatischer Neustart von Nginx

Wenn Ihr Nginx-Prozess aus irgendeinem Grund beendet wird, müssen Sie den folgenden Befehl ausführen, um ihn neu zu starten.

sudo systemctl restart nginx

Anstatt diesen Befehl manuell einzugeben, können wir Nginx automatisch neu starten lassen, indem wir die systemd-Diensteinheit nginx.service bearbeiten. Um die Standardkonfiguration des systemd-Dienstes außer Kraft zu setzen, erstellen wir ein separates Verzeichnis.

sudo mkdir -p /etc/systemd/system/nginx.service.d/

Erstellen Sie dann eine Datei unter diesem Verzeichnis.

sudo nano /etc/systemd/system/nginx.service.d/restart.conf

Fügen Sie die folgenden Zeilen in die Datei ein, damit Nginx 5 Sekunden nach Erkennen eines Fehlers automatisch neu startet. Der Standardwert von RetartSec ist 100ms, was zu klein ist. Nginx kann sich beschweren, dass “die Startanforderung zu schnell wiederholt wurde”, wenn RestartSec nicht groß genug ist.

[Service]
Restart=always
RestartSec=5s

Speichern und schließen Sie die Datei. Laden Sie dann systemd neu, damit die Änderungen wirksam werden.

sudo systemctl daemon-reload

Um zu überprüfen, ob dies funktioniert, beenden Sie Nginx mit:

sudo pkill nginx

Prüfen Sie dann den Nginx-Status. Sie werden feststellen, dass Nginx automatisch neu gestartet wurde.

systemctl status nginx