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.
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.
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).
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.
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