Wie installiere ich Linux, Nginx, MariaDB, PHP (LEMP-Stack) auf Debian 10?

Einführung

Der LEMP-Software-Stack ist eine Gruppe von Software, mit der dynamische Webseiten und Webanwendungen bereitgestellt werden können. Der Name "LEMP" ist ein Akronym, das ein L -Inux-Betriebssystem mit einem (* E *) Nginx-Webserver beschreibt. Die Backend-Daten werden in einer M ariaDB-Datenbank gespeichert und die dynamische Verarbeitung wird von P HP übernommen.

Obwohl dieser Software-Stack normalerweise * MySQL * als Datenbankverwaltungssystem enthält, verwenden einige Linux-Distributionen - einschließlich Debian - https://mariadb.org [MariaDB] als Ersatz für MySQL.

In diesem Handbuch installieren Sie einen LEMP-Stack auf einem Debian 10-Server mit MariaDB als Datenbankverwaltungssystem.

Voraussetzungen

Um dieses Handbuch zu vervollständigen, benötigen Sie Zugriff auf einen Debian 10-Server. Dieser Server sollte einen regulären Benutzer haben, der mit "+ sudo " - Berechtigungen konfiguriert ist, und eine Firewall, die mit " ufw +" aktiviert ist. Um dies einzurichten, können Sie unserer Initial Server Setup with Debian 10 Anleitung folgen.

Schritt 1 - Installieren des Nginx-Webservers

Um Webseiten für die Besucher Ihrer Website bereitzustellen, verwenden wir Nginx, einen beliebten Webserver, der für seine allgemeine Leistung und Stabilität bekannt ist.

Die gesamte Software, die Sie für dieses Verfahren verwenden, wird direkt aus Debians Standard-Paket-Repositorys stammen. Dies bedeutet, dass Sie die Paketverwaltungssuite "+ apt +" verwenden können, um die Installation abzuschließen.

Da Sie "+ apt +" zum ersten Mal für diese Sitzung verwenden, sollten Sie zunächst Ihren lokalen Paketindex aktualisieren. Anschließend können Sie den Server installieren:

sudo apt update
sudo apt install nginx

Unter Debian 10 ist Nginx so konfiguriert, dass es bei der Installation ausgeführt wird.

Wenn die Firewall "+ ufw " ausgeführt wird, müssen Sie Verbindungen zu Nginx zulassen. Sie sollten das restriktivste Profil aktivieren, das weiterhin den gewünschten Datenverkehr zulässt. Da Sie noch kein SSL für Ihren Server konfiguriert haben, müssen Sie vorerst nur HTTP-Datenverkehr auf Port " 80 +" zulassen.

Sie können dies aktivieren, indem Sie Folgendes eingeben:

sudo ufw allow 'Nginx HTTP'

Sie können die Änderung überprüfen, indem Sie Folgendes eingeben:

sudo ufw status

In der angezeigten Ausgabe sollte HTTP-Verkehr zulässig sein:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Testen Sie nun, ob der Server in Betrieb ist, indem Sie in Ihrem Webbrowser auf den Domainnamen oder die öffentliche IP-Adresse Ihres Servers zugreifen. Wenn auf Ihrem Server kein Domainname angezeigt wird und Sie die öffentliche IP-Adresse Ihres Servers nicht kennen, geben Sie eine der folgenden Zeichen in Ihr Terminal ein:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Dadurch werden einige IP-Adressen ausgedruckt. Sie können sie nacheinander in Ihrem Webbrowser ausprobieren.

Geben Sie eine der Adressen ein, die Sie in Ihrem Webbrowser erhalten. Sie sollten zur Standard-Zielseite von Nginx gelangen:

http://

Wenn Sie die obige Seite sehen, haben Sie Nginx erfolgreich installiert.

Schritt 2 - MariaDB installieren

Nachdem Sie einen Webserver eingerichtet haben, müssen Sie das Datenbanksystem installieren, um Daten für Ihre Site speichern und verwalten zu können.

In Debian 10 wurde das Metapaket "+ mysql-server ", das traditionell zur Installation des MySQL-Servers verwendet wurde, durch " default-mysql-server +" ersetzt. Dieses Metapaket verweist auf MariaDB, einen Community-Zweig des ursprünglichen MySQL-Servers von Oracle, und ist derzeit der Standard-MySQL-kompatible Datenbankserver, der in debian-basierten Paketmanager-Repositorys verfügbar ist.

Aus Gründen der Langzeitkompatibilität wird jedoch empfohlen, MariaDB anstelle des Metapakets mit dem eigentlichen Programmpaket "+ mariadb-server +" zu installieren.

Führen Sie zum Installieren dieser Software Folgendes aus:

sudo apt install mariadb-server

Es wird empfohlen, nach Abschluss der Installation ein Sicherheitsskript auszuführen, das mit MariaDB vorinstalliert wird. Dieses Skript entfernt einige unsichere Standardeinstellungen und sperrt den Zugriff auf Ihr Datenbanksystem. Starten Sie das interaktive Skript, indem Sie Folgendes ausführen:

sudo mysql_secure_installation

Dieses Skript führt Sie durch eine Reihe von Eingabeaufforderungen, in denen Sie einige Änderungen an Ihrem MariaDB-Setup vornehmen können. Bei der ersten Eingabeaufforderung werden Sie aufgefordert, das aktuelle Kennwort für * database root * einzugeben. Dies ist nicht mit der * Systemwurzel * zu verwechseln. Der Benutzer * database root * ist ein Administrator mit vollständigen Berechtigungen für das Datenbanksystem. Da Sie gerade MariaDB installiert haben und noch keine Konfigurationsänderungen vorgenommen haben, ist dieses Passwort leer. Drücken Sie einfach an der Eingabeaufforderung die Taste "+ ENTER +".

Bei der nächsten Eingabeaufforderung werden Sie gefragt, ob Sie ein * root * -Passwort für die Datenbank einrichten möchten. Da MariaDB für den * root * -Benutzer eine spezielle Authentifizierungsmethode verwendet, die normalerweise sicherer ist als die Verwendung eines Kennworts, müssen Sie diese jetzt nicht festlegen. Geben Sie "+ A " ein und drücken Sie " ENTER".

Von dort aus können Sie + Y + und dann + ENTER + drücken, um die Standardeinstellungen für alle nachfolgenden Fragen zu übernehmen. Dadurch werden anonyme Benutzer und die Testdatenbank entfernt, die Remote-Anmeldung * root * deaktiviert und diese neuen Regeln geladen, sodass MariaDB die von Ihnen vorgenommenen Änderungen sofort berücksichtigt. + Wenn Sie fertig sind, melden Sie sich bei der MariaDB-Konsole an, indem Sie Folgendes eingeben:

sudo mariadb

Dadurch wird eine Verbindung zum MariaDB-Server als Benutzer der Verwaltungsdatenbank * root * hergestellt, was durch die Verwendung von + sudo + beim Ausführen dieses Befehls abgeleitet wird. Sie sollten die Ausgabe so sehen:

OutputWelcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 74
Server version: 10.3.15-MariaDB-1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Beachten Sie, dass Sie kein Kennwort angeben mussten, um als * root * -Nutzer eine Verbindung herzustellen. Das funktioniert, weil die Standardauthentifizierungsmethode für den administrativen MariaDB-Benutzer "+ unix_socket " anstelle von " password +" ist. Auch wenn dies auf den ersten Blick sicherheitsrelevant erscheint, erhöht dies die Sicherheit des Datenbankservers, da sich nur die Systembenutzer mit sudo-Berechtigungen, die über die Konsole oder eine ausgeführte Anwendung eine Verbindung herstellen, als * root * MariaDB-Benutzer anmelden dürfen mit den gleichen Privilegien. In der Praxis bedeutet dies, dass Sie den Benutzer * root * der Verwaltungsdatenbank nicht verwenden können, um eine Verbindung mit Ihrer PHP-Anwendung herzustellen.

Um die Sicherheit zu erhöhen, empfiehlt es sich, dedizierte Benutzerkonten mit weniger umfangreichen Berechtigungen für jede Datenbank einzurichten, insbesondere wenn Sie mehrere Datenbanken auf Ihrem Server hosten möchten. Um ein solches Setup zu demonstrieren, erstellen wir eine Datenbank mit dem Namen * example_database * und einen Benutzer mit dem Namen * example_user *. Sie können diese Namen jedoch durch andere Werte ersetzen. + Um eine neue Datenbank zu erstellen, führen Sie den folgenden Befehl in Ihrer MariaDB-Konsole aus:

CREATE DATABASE ;

Jetzt können Sie einen neuen Benutzer erstellen und ihm vollständige Berechtigungen für die gerade erstellte benutzerdefinierte Datenbank erteilen. Der folgende Befehl definiert das Kennwort dieses Benutzers als "++". Sie sollten diesen Wert jedoch durch ein sicheres Kennwort Ihrer Wahl ersetzen.

GRANT ALL ON .* TO ''@'localhost' IDENTIFIED BY '' WITH GRANT OPTION;

Dadurch erhält der Benutzer * example_user * die vollständigen Berechtigungen für die Datenbank * example_database *, während dieser Benutzer daran gehindert wird, andere Datenbanken auf Ihrem Server zu erstellen oder zu ändern.

Löschen Sie die Berechtigungen, um sicherzustellen, dass sie in der aktuellen Sitzung gespeichert und verfügbar sind:

FLUSH PRIVILEGES;

Beenden Sie anschließend die MariaDB-Shell:

exit

Sie können testen, ob der neue Benutzer über die richtigen Berechtigungen verfügt, indem Sie sich erneut bei der MariaDB-Konsole anmelden. Verwenden Sie hierzu die benutzerdefinierten Benutzeranmeldeinformationen:

mariadb -u  -p

Beachten Sie das "+ -p +" - Flag in diesem Befehl, das Sie zur Eingabe des Kennworts auffordert, das beim Erstellen des Benutzers "* example_user *" verwendet wurde. Stellen Sie nach der Anmeldung an der MariaDB-Konsole sicher, dass Sie Zugriff auf die * example_database * -Datenbank haben:

SHOW DATABASES;

Dadurch erhalten Sie die folgende Ausgabe:

Output+--------------------+
| Database           |
+--------------------+
|    |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)

Geben Sie Folgendes ein, um die MariaDB-Shell zu beenden:

exit

Zu diesem Zeitpunkt ist Ihr Datenbanksystem eingerichtet und Sie können mit der Installation von PHP, der letzten Komponente des LEMP-Stacks, fortfahren.

Schritt 3 - PHP für die Verarbeitung installieren

Sie haben Nginx installiert, um Ihre Inhalte bereitzustellen, und MySQL installiert, um Ihre Daten zu speichern und zu verwalten. Jetzt können Sie PHP installieren, um Code zu verarbeiten und dynamischen Inhalt für den Webserver zu generieren.

Während Apache den PHP-Interpreter in jede Anfrage einbettet, benötigt Nginx ein externes Programm, das die PHP-Verarbeitung übernimmt und als Brücke zwischen dem PHP-Interpreter selbst und dem Webserver fungiert. Dies ermöglicht eine bessere Gesamtleistung auf den meisten PHP-basierten Websites, erfordert jedoch eine zusätzliche Konfiguration. Sie müssen + php-fpm + installieren, was für "PHP fastCGI process manager" steht, und Nginx anweisen, PHP-Anforderungen zur Verarbeitung an diese Software weiterzuleiten. Zusätzlich benötigen Sie + php-mysql und ein PHP-Modul, mit dem PHP mit MySQL-basierten Datenbanken kommunizieren kann. Kern-PHP-Pakete werden automatisch als Abhängigkeiten installiert.

Um die Pakete + php-fpm und` + php-mysql` zu installieren, führen Sie Folgendes aus:

sudo apt install php-fpm php-mysql

Sie haben jetzt Ihre PHP-Komponenten installiert. Als Nächstes konfigurieren Sie Nginx, um sie zu verwenden.

Schritt 4 - Konfigurieren von Nginx zur Verwendung des PHP-Prozessors

Bei Verwendung des Nginx-Webservers können server blocks (ähnlich wie bei virtuellen Hosts in Apache) verwendet werden, um Konfigurationsdetails zu kapseln und mehr als eine Domäne auf einem einzelnen Server zu hosten. In diesem Handbuch wird * Ihre_Domäne * als Beispieldomänenname verwendet. Weitere Informationen zum Einrichten eines Domainnamens mit DigitalOcean finden Sie unter Einführung in DigitalOcean DNS.

Unter Debian 10 hat Nginx standardmäßig einen Serverblock aktiviert und ist so konfiguriert, dass Dokumente aus einem Verzeichnis unter + / var / www / html + bereitgestellt werden. Dies funktioniert zwar gut für eine einzelne Site, es kann jedoch schwierig werden, sie zu verwalten, wenn Sie mehrere Sites hosten. Anstatt "+ / var / www / html " zu ändern, erstellen wir eine Verzeichnisstruktur in " / var / www " für die Website "* your_domain *" und belassen " / var / www / html +" als Standardverzeichnis für " wird bedient, wenn eine Client-Anfrage mit keiner anderen Site übereinstimmt.

Erstellen Sie das Stammverzeichnis für * Ihre_Domäne * wie folgt:

sudo mkdir /var/www/

Weisen Sie als Nächstes den Besitz des Verzeichnisses mit der Umgebungsvariablen $ USER zu, die auf Ihren aktuellen Systembenutzer verweisen soll:

sudo chown -R $USER:$USER /var/www/

Öffnen Sie anschließend eine neue Konfigurationsdatei im Verzeichnis "+ sites-available " von Nginx mit Ihrem bevorzugten Befehlszeileneditor. Hier verwenden wir " nano +":

sudo nano /etc/nginx/sites-available/

Dadurch wird eine neue leere Datei erstellt. Fügen Sie die folgende Bare-Bones-Konfiguration ein:

/ etc / nginx / sites-available / your_domain

server {
   listen 80;
   listen [::]:80;

   root /var/www/;
   index index.php index.html index.htm;

   server_name ;

   location / {
       try_files $uri $uri/ =404;
   }

   location ~ \.php$ {
       include snippets/fastcgi-php.conf;
       fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
   }
}

Dies ist eine Grundkonfiguration, die den Port "+ 80 " überwacht und Dateien aus dem soeben erstellten Webstamm bereitstellt. Es antwortet nur auf Anfragen an den Host oder die IP-Adresse, die nach " Servername " angegeben wurden, und alle Dateien, die auf " .php " enden, werden von " php-fpm +" verarbeitet, bevor Nginx die Ergebnisse an den Benutzer sendet.

Speichern und schließen Sie die Datei, wenn Sie mit der Bearbeitung fertig sind. Wenn Sie die Datei mit + nano + erstellt haben, geben Sie dazu + CTRL + + + X + ein und bestätigen Sie mit + y + und + ENTER +.

Aktivieren Sie Ihre Konfiguration, indem Sie im Verzeichnis + sites-enabled + von Nginx auf die Konfigurationsdatei verweisen:

sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/

Dadurch wird Nginx angewiesen, die Konfiguration beim nächsten Laden zu verwenden. Sie können Ihre Konfiguration auf Syntaxfehler testen, indem Sie Folgendes eingeben:

sudo nginx -t

Wenn Fehler gemeldet werden, kehren Sie zu Ihrer Konfigurationsdatei zurück, um deren Inhalt zu überprüfen, bevor Sie fortfahren.

Wenn Sie bereit sind, laden Sie Nginx erneut, um die Änderungen vorzunehmen:

sudo systemctl reload nginx

Als Nächstes erstellen Sie eine Datei in Ihrem neuen Webstammverzeichnis, um die PHP-Verarbeitung zu testen.

Schritt 5 - Erstellen einer PHP-Datei zum Testen der Konfiguration

Ihr LEMP-Stack sollte jetzt vollständig eingerichtet sein. Sie können es testen, um zu überprüfen, ob Nginx + .php + Dateien korrekt an Ihren PHP-Prozessor übergeben kann.

Sie können dies tun, indem Sie eine Test-PHP-Datei in Ihrem Dokumentenstamm erstellen. Öffnen Sie eine neue Datei mit dem Namen "+ info.php +" in Ihrem Dokumentenstamm in Ihrem Texteditor:

nano /var/www//info.php

Geben Sie die folgenden Zeilen ein oder fügen Sie sie in die neue Datei ein. Dies ist ein gültiger PHP-Code, der Informationen zu Ihrem Server zurückgibt:

/var/www/your_domain/info.php

<?php
phpinfo();

Wenn Sie fertig sind, speichern und schließen Sie die Datei, indem Sie "+ CTRL " + " X " und dann " y " und " ENTER +" zur Bestätigung eingeben.

Sie können jetzt in Ihrem Webbrowser auf diese Seite zugreifen, indem Sie den Domainnamen oder die öffentliche IP-Adresse aufrufen, die Sie in Ihrer Nginx-Konfigurationsdatei eingerichtet haben, gefolgt von "+ / info.php +":

http:///info.php

Sie sehen eine Webseite mit detaillierten Informationen zu Ihrem Server:

Nachdem Sie die relevanten Informationen zu Ihrem PHP-Server auf dieser Seite überprüft haben, entfernen Sie am besten die von Ihnen erstellte Datei, da sie vertrauliche Informationen zu Ihrer PHP-Umgebung und Ihrem Debian-Server enthält. Sie können + rm + verwenden, um diese Datei zu entfernen:

rm /var/www//info.php

Sie können diese Datei jederzeit neu generieren, wenn Sie sie später benötigen. Als Nächstes testen wir die Datenbankverbindung von der PHP-Seite aus.

Schritt 6 - Testen der Datenbankverbindung von PHP aus (optional)

Wenn Sie testen möchten, ob PHP eine Verbindung zu MariaDB herstellen und Datenbankabfragen ausführen kann, können Sie eine Testtabelle mit Dummy-Daten erstellen und deren Inhalt über ein PHP-Skript abfragen.

Stellen Sie zunächst eine Verbindung zur MariaDB-Konsole mit dem Datenbankbenutzer her, den Sie unter folgendem Link erstellt haben: # step-2-% E2% 80% 94-installation-mariadb [Schritt 2] dieses Handbuchs:

mariadb -u  -p

Erstellen Sie eine Tabelle mit dem Namen * todo_list *. Führen Sie an der MariaDB-Konsole die folgende Anweisung aus:

CREATE TABLE . (
   item_id INT AUTO_INCREMENT,
   content VARCHAR(255),
   PRIMARY KEY(item_id)
);

Fügen Sie nun einige Zeilen Inhalt in die Testtabelle ein. Möglicherweise möchten Sie den nächsten Befehl einige Male mit unterschiedlichen Werten wiederholen:

INSERT INTO . (content) VALUES ("");

Führen Sie Folgendes aus, um zu bestätigen, dass die Daten erfolgreich in Ihrer Tabelle gespeichert wurden:

SELECT * FROM .;

Sie werden die folgende Ausgabe sehen:

Output+---------+--------------------------+
| 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 Ihre Testtabelle gültige Daten enthält, können Sie die MariaDB-Konsole beenden:

exit

Jetzt können Sie das PHP-Skript erstellen, das eine Verbindung zu MariaDB herstellt und nach Ihren Inhalten fragt. Erstellen Sie mit Ihrem bevorzugten Editor eine neue PHP-Datei in Ihrem benutzerdefinierten Webstammverzeichnis. Wir werden dafür + nano verwenden:

nano /var/www//

Fügen Sie Ihrem PHP-Skript den folgenden Inhalt hinzu:

<?php
$user = "";
$password = "";
$database = "";
$table = "";

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 und schließen Sie die Datei, wenn Sie mit der Bearbeitung fertig sind.

Sie können jetzt in Ihrem Webbrowser auf diese Seite zugreifen, indem Sie den Domainnamen oder die öffentliche IP-Adresse aufrufen, die Sie in Ihrer Nginx-Konfigurationsdatei eingerichtet haben, gefolgt von "+ / todo_list.php +":

http:///todo_list.php

Sie sollten eine Seite wie diese sehen, die den Inhalt zeigt, den Sie in Ihre Testtabelle eingefügt haben:

image: https: //assets.digitalocean.com/articles/lemp_debian10/todo_list.png [Beispiel für eine PHP-Aufgabenliste]

Das bedeutet, dass Ihre PHP-Umgebung bereit ist, eine Verbindung zu Ihrem MariaDB-Server herzustellen und mit ihm zu interagieren.

Fazit

In diesem Handbuch haben Sie eine flexible Grundlage für die Bereitstellung von PHP-Websites und -Anwendungen für Ihre Besucher mithilfe von Nginx als Webserver geschaffen. Sie haben Nginx so eingerichtet, dass PHP-Anforderungen über "+ php-fpm +" verarbeitet werden. Außerdem haben Sie eine MariaDB-Datenbank zum Speichern der Daten Ihrer Website eingerichtet.

Um Ihr aktuelles Setup weiter zu verbessern, können Sie install Composer für Abhängigkeit und Paketverwaltung in PHP und Sie können auch install a OpenSSL certificate für Ihre Website installieren Verwenden von https://www.digitalocean.com/community/tutorials/an-einführung-zum-Verschlüsseln-von-Let’s Encrypt].