So installieren Sie Linux, Nginx, MySQL, PHP (LEMP-Stack) unter Ubuntu 18.04

Einführung

Der LEMP-Software-Stack ist eine Gruppe von Software, mit der dynamische Webseiten und Webanwendungen bereitgestellt werden können. Dies ist ein Akronym, das einLinux-Betriebssystem mit einem Nginx-Webserver (ausgesprochen wie „Engine-X“) beschreibt. Die Backend-Daten werden in derMySQL-Datenbank gespeichert und die dynamische Verarbeitung wird vonPHP übernommen.

Dieses Handbuch zeigt, wie Sie einen LEMP-Stack auf einem Ubuntu 18.04-Server installieren. Das Ubuntu-Betriebssystem kümmert sich um die erste Anforderung. Wir werden beschreiben, wie Sie den Rest der Komponenten in Betrieb nehmen können.

Voraussetzungen

Bevor Sie dieses Lernprogramm abschließen, sollten Sie auf Ihrem Server ein reguläres Nicht-Root-Benutzerkonto mit den Berechtigungen vonsudohaben. Richten Sie dieses Konto ein, indem Sie unsereinitial server setup guide for Ubuntu 18.04 ausfüllen.

Sobald Sie Ihren Benutzer verfügbar haben, können Sie mit den in diesem Handbuch beschriebenen Schritten beginnen.

[[Schritt-1 -–- Installieren des Nginx-Webservers]] == Schritt 1 - Installieren des Nginx-Webservers

Um Webseiten für die Besucher unserer Website anzuzeigen, setzen wir Nginx ein, einen modernen, effizienten Webserver.

Die gesamte in diesem Verfahren verwendete Software stammt aus den Standard-Paket-Repositorys von Ubuntu. Dies bedeutet, dass wir die Paketverwaltungssuite vonaptverwenden können, um die erforderlichen Installationen abzuschließen.

Da wir zum ersten Malapt für diese Sitzung verwenden, aktualisieren Sie zunächst den Paketindex Ihres Servers. Installieren Sie anschließend den Server:

sudo apt update
sudo apt install nginx

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

Wenn die Firewall vonufwausgeführt wird, wie im Handbuch zur Ersteinrichtung beschrieben, müssen Sie Verbindungen zu Nginx zulassen. Nginx registriert sich bei der Installation mitufw, daher ist das Verfahren recht einfach.

Es wird empfohlen, das restriktivste Profil zu aktivieren, das weiterhin den gewünschten Datenverkehr zulässt. Da Sie in diesem Handbuch kein SSL für Ihren Server konfiguriert haben, müssen Sie nur den Datenverkehr auf Port80zulassen.

Aktivieren Sie dies, indem Sie Folgendes eingeben:

sudo ufw allow 'Nginx HTTP'

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

sudo ufw status

Die Ausgabe dieses Befehls zeigt, dass HTTP-Verkehr zulässig ist:

OutputStatus: active

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

Mit der neuen Firewall-Regel können Sie testen, ob der Server in Betrieb ist, indem Sie in Ihrem Webbrowser auf den Domänennamen oder die öffentliche IP-Adresse Ihres Servers zugreifen.

Wenn Sie keinen auf Ihren Server verweisenden Domainnamen haben und die öffentliche IP-Adresse Ihres Servers nicht kennen, können Sie diese mit dem folgenden Befehl ermitteln:

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.

Alternativ können Sie überprüfen, auf welche IP-Adresse von anderen Standorten im Internet aus zugegriffen werden kann:

curl -4 icanhazip.com

Geben Sie die Adresse ein, die Sie in Ihrem Webbrowser erhalten, und Sie gelangen zur Standard-Zielseite von Nginx:

http://server_domain_or_IP

Nginx default page

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

[[Schritt-2 -–- Installieren von MySQL zum Verwalten von Site-Daten]] == Schritt 2 - Installieren von MySQL zum Verwalten von Site-Daten

Da Sie nun einen Webserver haben, müssen Sie MySQL (ein Datenbankverwaltungssystem) installieren, um die Daten für Ihre Site zu speichern und zu verwalten.

Installieren Sie MySQL, indem Sie Folgendes eingeben:

sudo apt install mysql-server

Die MySQL-Datenbanksoftware ist jetzt installiert, ihre Konfiguration ist jedoch noch nicht abgeschlossen.

Um die Installation zu sichern, wird MySQL mit einem Skript ausgeliefert, das Sie fragt, ob Sie einige unsichere Standardeinstellungen ändern möchten. Initiieren Sie das Skript, indem Sie Folgendes eingeben:

sudo mysql_secure_installation

Dieses Skript fragt Sie, ob SieVALIDATE PASSWORD PLUGIN konfigurieren möchten.

[.warning] #Warning: Das Aktivieren dieser Funktion ist eine Art Urteilsaufruf. Wenn diese Option aktiviert ist, werden Kennwörter, die nicht den angegebenen Kriterien entsprechen, von MySQL mit einem Fehler abgelehnt. Dies führt zu Problemen, wenn Sie ein schwaches Kennwort in Verbindung mit einer Software verwenden, die automatisch MySQL-Benutzeranmeldeinformationen konfiguriert, z. B. die Ubuntu-Pakete für phpMyAdmin. Es ist sicher, die Validierung deaktiviert zu lassen, aber Sie sollten immer sichere, eindeutige Kennwörter für Datenbankanmeldeinformationen verwenden.
#

Beantworten SieY mit Ja oder etwas anderem, um fortzufahren, ohne es zu aktivieren.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Wenn Sie die Validierung aktiviert haben, werden Sie vom Skript außerdem aufgefordert, eine Ebene für die Passwortvalidierung auszuwählen. Beachten Sie, dass bei der Eingabe von2 - für die stärkste Stufe - Fehler auftreten, wenn Sie versuchen, ein Kennwort festzulegen, das keine Zahlen, Groß- und Kleinbuchstaben sowie Sonderzeichen enthält oder auf einem allgemeinen Wörterbuch basiert Wörter.

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Als Nächstes werden Sie aufgefordert, ein Root-Passwort zu senden und zu bestätigen:

Please set the password for root here.

New password:

Re-enter new password:

Für den Rest der Fragen sollten SieY drücken und an jeder Eingabeaufforderung die TasteENTER drücken. Dadurch werden einige anonyme Benutzer und die Testdatenbank entfernt, Remote-Root-Anmeldungen deaktiviert und diese neuen Regeln geladen, sodass MySQL die von uns vorgenommenen Änderungen sofort berücksichtigt.

Beachten Sie, dass in Ubuntu-Systemen, auf denen MySQL 5.7 (und spätere Versionen) ausgeführt wird, der MySQL-Benutzer vonroottandardmäßig mit dem Pluginauth_socketund nicht mit einem Kennwort authentifiziert wird. Dies ermöglicht in vielen Fällen eine größere Sicherheit und Benutzerfreundlichkeit, kann jedoch auch kompliziert sein, wenn Sie einem externen Programm (z. B. phpMyAdmin) den Zugriff auf den Benutzer erlauben müssen.

Wenn die Verwendung des Pluginsauth_socket für den Zugriff auf MySQL zu Ihrem Workflow passt, können Sie mit Schritt 3 fortfahren. Wenn Sie jedoch bei der Verbindung mit MySQL lieber ein Kennwort alsroot verwenden möchten, müssen Sie die Authentifizierungsmethode vonauth_socket aufmysql_native_password umstellen. Öffnen Sie dazu die MySQL-Eingabeaufforderung von Ihrem Terminal aus:

sudo mysql

Überprüfen Sie als Nächstes mit dem folgenden Befehl, welche Authentifizierungsmethode jedes Ihrer MySQL-Benutzerkonten verwendet:

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

In diesem Beispiel können Sie sehen, dass sich der Benutzer vonroottatsächlich mit dem Pluginauth_socketauthentifiziert. Führen Sie den folgenden BefehlALTER USERaus, um das Konto vonrootfür die Authentifizierung mit einem Kennwort zu konfigurieren. Stellen Sie sicher, dass Siepassword in ein sicheres Passwort Ihrer Wahl ändern:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Führen Sie dannFLUSH PRIVILEGES aus, um den Server anzuweisen, die Grant-Tabellen neu zu laden und Ihre neuen Änderungen in Kraft zu setzen:

FLUSH PRIVILEGES;

Überprüfen Sie die von jedem Ihrer Benutzer verwendeten Authentifizierungsmethoden erneut, um sicherzustellen, dassroot nicht mehr mit demauth_socket-Plugin authentifiziert wird:

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

In dieser Beispielausgabe sehen Sie, dass sich der MySQL-Benutzer vonrootjetzt mit einem Kennwort authentifiziert. Sobald Sie dies auf Ihrem eigenen Server bestätigt haben, können Sie die MySQL-Shell verlassen:

exit

[.Hinweis]##

Note: Nachdem Sie den MySQL-Benutzer vonrooto konfiguriert haben, dass er sich mit einem Kennwort authentifiziert, können Sie mit dem zuvor verwendeten Befehlsudo mysql nicht mehr auf MySQL zugreifen. Stattdessen müssen Sie Folgendes ausführen:

mysql -u root -p

Nachdem Sie das gerade festgelegte Passwort eingegeben haben, wird die MySQL-Eingabeaufforderung.
angezeigt

Jetzt ist Ihr Datenbanksystem eingerichtet und Sie können mit der Installation von PHP fortfahren.

[[Schritt 3 - Installieren von PHP und Konfigurieren von Nginx zur Verwendung des PHP-Prozessors] == Schritt 3 - Installieren von PHP und Konfigurieren von Nginx zur Verwendung des PHP-Prozessors

Sie haben jetzt Nginx installiert, um Ihre Seiten zu bedienen, und MySQL, um Ihre Daten zu speichern und zu verwalten. Sie haben jedoch immer noch nichts, das dynamische Inhalte erzeugen könnte. Hier kommt PHP ins Spiel.

Da Nginx keine native PHP-Verarbeitung wie einige andere Webserver enthält, müssen Siephp-fpm installieren, was für "fastCGI process manager" steht. Wir werden Nginx anweisen, PHP-Anfragen zur Verarbeitung an diese Software weiterzuleiten.

[.Hinweis]##

Note: Abhängig von Ihrem Cloud-Anbieter müssen Sie möglicherweise dasuniverse-Repository von Ubuntu hinzufügen, das kostenlose Open-Source-Software enthält, die von der Ubuntu-Community verwaltet wird, bevor Sie dasphp-fpm-Paket installieren. Sie können dies tun, indem Sie Folgendes eingeben:

sudo add-apt-repository universe

Installieren Sie das Modulphp-fpm zusammen mit dem zusätzlichen Hilfspaketphp-mysql, mit dem PHP mit Ihrem Datenbank-Backend kommunizieren kann. Bei der Installation werden die erforderlichen PHP-Kerndateien abgerufen. Tun Sie dies, indem Sie Folgendes eingeben:

sudo apt install php-fpm php-mysql

Sie haben jetzt alle erforderlichen LEMP-Stack-Komponenten installiert, müssen jedoch noch einige Konfigurationsänderungen vornehmen, um Nginx anzuweisen, den PHP-Prozessor für dynamische Inhalte zu verwenden.

Dies erfolgt auf Serverblockebene (Serverblöcke ähneln den virtuellen Apache-Hosts). Öffnen Sie dazu eine neue Serverblock-Konfigurationsdatei im Verzeichnis/etc/nginx/sites-available/. In diesem Beispiel heißt die neue Serverblock-Konfigurationsdateiexample.com, obwohl Sie Ihre beliebige benennen können:

sudo nano /etc/nginx/sites-available/example.com

Wenn Sie eine neue Serverblock-Konfigurationsdatei bearbeiten, anstatt die Standarddatei zu bearbeiten, können Sie die Standardkonfiguration bei Bedarf problemlos wiederherstellen.

Fügen Sie der neuen Serverblock-Konfigurationsdatei den folgenden Inhalt hinzu, der aus der Standard-Serverblock-Konfigurationsdatei übernommen und geringfügig geändert wurde:

/etc/nginx/sites-available/example.com

server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name example.com;

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

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

        location ~ /\.ht {
                deny all;
        }
}

Die einzelnen Anweisungen und Positionsblöcke haben folgende Funktionen:

  • listen - Definiert, welchen Port Nginx abhört. In diesem Fall wird Port80 abgehört, der Standardport für HTTP.

  • root - Definiert den Dokumentstamm, in dem die von der Website bereitgestellten Dateien gespeichert werden.

  • index - Konfiguriert Nginx so, dass Serving-Dateien mit dem Namenindex.php priorisiert werden, wenn eine Indexdatei angefordert wird, sofern diese verfügbar ist.

  • server_name - Definiert, welcher Serverblock für eine bestimmte Anforderung an Ihren Server verwendet werden soll. Point this directive to your server’s domain name or public IP address.

  • location / - Der erste Standortblock enthält einetry_files-Direktive, die prüft, ob Dateien vorhanden sind, die einer URI-Anforderung entsprechen. Wenn Nginx die entsprechende Datei nicht finden kann, wird ein 404-Fehler zurückgegeben.

  • location ~ \.php$ - Dieser Speicherortblock behandelt die eigentliche PHP-Verarbeitung, indem er Nginx auf die Konfigurationsdateifastcgi-php.conf und die Dateiphp7.2-fpm.sock verweist, in der angegeben wird, welcher Socketphp-fpm zugeordnet ist.

  • location ~ /\.ht - Der letzte Speicherortblock behandelt.htaccess-Dateien, die Nginx nicht verarbeitet. Wenn durch Hinzufügen der Direktivedeny all.htaccess-Dateien in den Dokumentenstamm gelangen, werden sie den Besuchern nicht zugestellt.

Speichern und schließen Sie die Datei, nachdem Sie diesen Inhalt hinzugefügt haben. Aktivieren Sie Ihren neuen Serverblock, indem Sie eine symbolische Verknüpfung von Ihrer neuen Serverblockkonfigurationsdatei (im Verzeichnis/etc/nginx/sites-available/) zum Verzeichnis/etc/nginx/sites-enabled/ erstellen:

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

Lösen Sie dann die Verknüpfung der Standardkonfigurationsdatei aus dem Verzeichnis/sites-enabled/:

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

[.Hinweis]##

Note: Wenn Sie jemals die Standardkonfiguration wiederherstellen müssen, können Sie dies tun, indem Sie den symbolischen Link wie folgt neu erstellen:

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

Testen Sie Ihre neue Konfigurationsdatei auf Syntaxfehler, indem Sie Folgendes eingeben:

sudo nginx -t

Wenn Fehler gemeldet werden, überprüfen Sie Ihre Datei erneut, bevor Sie fortfahren.

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

sudo systemctl reload nginx

Damit ist die Installation und Konfiguration Ihres LEMP-Stacks abgeschlossen. Es ist jedoch ratsam zu bestätigen, dass alle Komponenten miteinander kommunizieren können.

[[Schritt-4 -–- Erstellen einer PHP-Datei zum Testen der Konfiguration]] == Schritt 4 - 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 den PHP-Prozessor übergeben kann.

Verwenden Sie dazu Ihren Texteditor, um eine PHP-Testdatei mit dem Nameninfo.php in Ihrem Dokumentstamm zu erstellen:

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

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

/var/www/html/info.php

Wenn Sie fertig sind, speichern und schließen Sie die Datei.

Jetzt können Sie diese Seite in Ihrem Webbrowser besuchen, indem Sie den Domainnamen oder die öffentliche IP-Adresse Ihres Servers gefolgt von/info.php aufrufen:

http://your_server_domain_or_IP/info.php

Sie sollten eine von PHP generierte Webseite mit Informationen zu Ihrem Server sehen:

PHP page info

Wenn Sie eine Seite sehen, die so aussieht, haben Sie die PHP-Verarbeitung mit Nginx erfolgreich eingerichtet.

Nachdem Sie sichergestellt haben, dass Nginx die Seite korrekt wiedergibt, entfernen Sie am besten die von Ihnen erstellte Datei, da sie nicht autorisierten Benutzern Hinweise zu Ihrer Konfiguration geben kann, die ihnen beim Versuch helfen können, einzudringen. Sie können diese Datei jederzeit neu generieren, wenn Sie sie später benötigen.

Entfernen Sie vorerst die Datei, indem Sie Folgendes eingeben:

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

Damit haben Sie jetzt einen vollständig konfigurierten und funktionsfähigen LEMP-Stack auf Ihrem Ubuntu 18.04-Server.

Fazit

Ein LEMP-Stack ist eine leistungsstarke Plattform, mit der Sie nahezu jede Website oder Anwendung von Ihrem Server aus einrichten und bedienen können.

Es gibt eine Reihe von nächsten Schritten, die Sie von hier aus unternehmen können. Beispielsweise sollten Sie sicherstellen, dass die Verbindungen zu Ihrem Server gesichert sind. Zu diesem Zweck könnten Siesecure your Nginx installation with Let’s Encrypt. Wenn Sie diesem Handbuch folgen, erwerben Sie ein kostenloses TLS / SSL-Zertifikat für Ihren Server, mit dem Inhalte über HTTPS bereitgestellt werden können.

Related