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 vonsudo
haben. 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 vonapt
verwenden 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 vonufw
ausgefü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 Port80
zulassen.
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
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_socket
und 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_socket
authentifiziert. Führen Sie den folgenden BefehlALTER USER
aus, 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:
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.