Installieren Sie Nginx, MySQL, PHP (LEMP-Stack) auf Ubuntu 20.04 LTS
In unserem vorherigen Tutorial haben wir besprochen, wie man einen LAMP-Stack unter Ubuntu 20.04 LTS Server installiert. In diesem Tutorial werden wir sehen, wie man Nginx, MySQL, PHP (LEMP-Stack) auf Ubuntu 20.04 LTS Serveredition installiert. LEMP ist das Akronym für Linux, Engine-x, MariaDB/MySQL, PHP/Perl/Python.
Installieren Sie Nginx, MySQL, PHP (LEMP-Stack) auf Ubuntu 20.04 LTS
Für den Zweck dieses Tutorials werde ich die folgende Testmaschine verwenden:
- Betriebssystem : Ubuntu 20.04 LTS Server
- IP-Adresse : 192.168.225.52/24
Lass uns anfangen.
1. Installieren Sie Nginx auf Ubuntu
Führen Sie den folgenden Befehl im Terminal aus, um den Nginx-Webserver zu installieren:
$ sudo apt install nginxNach der Installation von Nginx überprüfen Sie mit dem Befehl, ob der Nginx-Dienst ausgeführt wird oder nicht:
$ sudo systemctl status nginx
Beispielausgabe:
● 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-05-29 10:13:47 UTC; 56s ago
Docs: man:nginx(8)
Main PID: 1349 (nginx)
Tasks: 2 (limit: 2283)
Memory: 4.4M
CGroup: /system.slice/nginx.service
├─1349 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─1350 nginx: worker process
May 29 10:13:46 ubuntuserver systemd[1]: Starting A high performance web server and a reverse proxy server...
May 29 10:13:47 ubuntuserver systemd[1]: Started A high performance web server and a reverse proxy server.Wenn Sie eine Ausgabe wie oben sehen, wurde der Nginx-Dienst gestartet.
Falls der Nginx-Dienst noch nicht gestartet ist, können Sie ihn mit dem Befehl starten:
$ sudo systemctl enable nginx$ sudo systemctl start nginx1.1 Nginx-Webserver über die UFW-Firewall zulassen
UFW steht für Unkomplizierte Firewall und ist ein Programm zur Verwaltung einer Netfilter-Firewall, das einfach zu bedienen sein soll. UFW ist standardmäßig in allen Ubuntu-Versionen verfügbar.
Standardmäßig kann auf den Nginx-Webbrowser von entfernten Systemen nicht zugegriffen werden, wenn Sie die UFW-Firewall in Ubuntu 20.04 LTS aktiviert haben. Sie müssen die http- und https-Ports erlauben, indem Sie die nachstehenden Schritte befolgen.
Zuerst wollen wir sehen, welche Anwendungen ein Profil mit folgendem Befehl installiert haben:
$ sudo ufw app listBeispielausgabe:
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSHWie Sie sehen können, haben die Nginx- und OpenSSH-Anwendungen UFW-Profile installiert.
Wenn Sie sich das “Nginx Full”-Profil ansehen, werden Sie sehen, dass es den Verkehr zu den Ports 80 und 443 ermöglicht:
$ sudo ufw app info "Nginx Full"Beispielausgabe:
Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server
Ports:
80,443/tcp
Führen Sie nun den folgenden Befehl aus, um eingehenden HTTP- und HTTPS-Datenverkehr für dieses Profil zuzulassen:
$ sudo ufw allow in "Nginx Full"Sie werden eine Ausgabe wie unten sehen:
Rules updated
Rules updated (v6)Wenn Sie HTTPS-Verkehr zulassen möchten, aber nur HTTP (80)-Verkehr, führen Sie aus:
$ sudo ufw app info "Nginx HTTP"Lassen Sie uns die Nginx-Testseite ausführen.
Öffnen Sie dazu Ihren Webbrowser und navigieren Sie zu http://localhost/ oder http://IP-Address/.
Sie werden die Nginx-Willkommensseite wie unten gezeigt sehen.
Herzlichen Glückwunsch! Der Nginx-Server funktioniert!
2. Installiere MySQL auf Ubuntu
Um MySQL unter Ubuntu zu installieren, führen Sie aus:
$ sudo apt install mysql-server
Überprüfen Sie, ob der MySQL-Dienst läuft oder nicht, indem Sie den Befehl verwenden:
$ sudo systemctl status mysql
Beispielausgabe:
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-05-29 10:31:56 UTC; 51s ago
Main PID: 2288 (mysqld)
Status: "Server is operational"
Tasks: 39 (limit: 2283)
Memory: 325.6M
CGroup: /system.slice/mysql.service
└─2288 /usr/sbin/mysqld
May 29 10:31:49 ubuntuserver systemd[1]: Starting MySQL Community Server...
May 29 10:31:56 ubuntuserver systemd[1]: Started MySQL Community Server.Wie Sie in der obigen Ausgabe sehen, läuft Mysql!
2.1 Einrichten des Datenbank-Administratorkennworts (root) für MySQL
Standardmäßig ist das Passwort des MySQL-root-Benutzers leer. Es wird nicht empfohlen, ein leeres Passwort für das Datenbank-Administratorkonto zu verwenden. Sie müssen Ihren MySQL-Server sichern, indem Sie das folgende Skript ausführen:
$ sudo mysql_secure_installationEs wird Ihnen die Frage gestellt, ob Sie die Komponente "VALIDATE PASSWORD" einrichten möchten oder nicht. Diese Komponente ermöglicht es den Benutzern, ein starkes Passwort für Datenbankzugangsdaten zu konfigurieren. Wenn sie aktiviert ist, überprüft sie automatisch die Stärke des Passworts und zwingt die Benutzer, nur solche Passwörter festzulegen, die sicher genug sind. Es ist sicher, diese deaktiviert zu lassen. Sie müssen jedoch ein starkes und einzigartiges Passwort für die Datenbankzugangsdaten verwenden. Wenn Sie diese Komponente nicht aktivieren möchten, drücken Sie einfach eine beliebige Taste, um den Passwortprüfungs-Teil zu überspringen und mit den restlichen Schritten fortzufahren.
Wenn Ihre Antwort Ja lautet, werden Sie aufgefordert, das Niveau der Passwortvalidierung auszuwählen.
Securing the MySQL server deployment.
Connecting to MySQL using a blank password.
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 yDie verfügbaren Passwortüberprüfungen sind niedrig, mittel und stark. Geben Sie einfach die entsprechende Zahl ein (0 für niedriges, 1 für mittleres und 2 für starkes Passwort) und drücken Sie die ENTER-Taste.
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: 0Geben Sie nun das Passwort für den MySQL-Root-Benutzer ein. Bitte beachten Sie, dass Sie das Passwort für den MySQL-Root-Benutzer entsprechend der in dem vorherigen Schritt gewählten Passwort-Richtlinie verwenden müssen. Wenn Sie das Plugin nicht aktiviert haben, verwenden Sie einfach ein beliebiges starkes und einzigartiges Passwort Ihrer Wahl.
Please set the password for root here.
New password:
Re-enter new password:
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : ySobald Sie das Passwort zweimal eingegeben haben, sehen Sie die Passwortstärke (in unserem Fall ist sie 100). Wenn es für Sie in Ordnung ist, drücken Sie Y, um mit dem angegebenen Passwort fortzufahren. Wenn Sie mit der Passwortlänge nicht zufrieden sind, drücken Sie eine andere Taste und setzen Sie ein starkes Passwort. Ich bin mit meinem aktuellen Passwort zufrieden, also habe ich y gewählt.
Für die restlichen Fragen geben Sie einfach y ein und drücken ENTER. Dadurch wird der anonyme Benutzer entfernt, die Anmeldung des Root-Benutzers aus der Ferne deaktiviert und die Testdatenbank entfernt.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.
All done!Fertig! Wir haben das Passwort des MySQL-Root-Benutzers gesetzt.
2.2 Authentifizierungsmethode für MySQL-Root-Benutzer ändern
Standardmäßig ist der MySQL-Root-Benutzer ab MySQL 5.7 und neueren Versionen auf Ubuntu so eingestellt, dass er die Authentifizierung über das "auth_socket"-Plugin verwendet. Obwohl dies die Sicherheit erhöht, macht es die Dinge auch komplizierter, wenn Sie über externe Programme, zum Beispiel phpMyAdmin, auf Ihren Datenbankserver zugreifen. Um dieses Problem zu beheben, müssen Sie die Authentifizierungsmethode von auth_socket auf "caching_sha2_password" oder "mysql_native_password" ändern.
Ab MySQL Version 8.0 ist das bevorzugte und standardmäßige Authentifizierungs-Plugin caching_sha2_password. Das Authentifizierungs-Plugin caching_sha2_password bietet eine sicherere Passwortverschlüsselung als das Plugin mysql_native_password.
Um das Authentifizierungs-Plugin zu ändern, melden Sie sich mit folgendem Befehl am MySQL-Prompt an:
$ sudo mysqlFühren Sie den folgenden Befehl an der MySQL-Eingabeaufforderung aus, um die aktuelle Authentifizierungsmethode für alle MySQL-Benutzerkonten zu finden:
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;Beispielausgabe:
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$=s%UO"�o@>.@320vBX9Agb0kvpTpyiqIsh6XlD0UqNXLcl3KLzp46.Le. | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root | | auth_socket | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)Wie Sie sehen, verwendet der MySQL-Root-Benutzer das auth_socket-Plugin zur Authentifizierung.
Um das Authentifizierungs-Plugin auth_socket auf caching_sha2_password zu ändern, führen Sie den folgenden Befehl in der MySQL-Eingabeaufforderung aus. Wenn Sie das VALIDATE PASSWORD-Plugin aktiviert haben, stellen Sie sicher, dass Sie ein starkes Passwort basierend auf den aktuellen Richtlinienanforderungen verwendet haben. Ein starkes Passwort sollte aus mindestens 8 Zeichen bestehen, einschließlich eines Großbuchstabens, eines Kleinbuchstabens, einer Zahl und eines Sonderzeichens.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';Ersetzen Sie "Password123#@!" im obigen Befehl durch ein starkes und einzigartiges Passwort Ihrer Wahl.
Aktualisieren Sie die Änderungen mit dem Befehl:
mysql> FLUSH PRIVILEGES;
Überprüfen Sie nun, ob das aktuelle Authentifizierungs-Plugin mithilfe des Befehls geändert wurde oder nicht:
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;Beispielausgabe:
Gut! Jetzt kann der MySQL-Root-Benutzer sich mit Passwort authentifizieren, um auf die MySQL-Shell zuzugreifen.
Beenden von der MySQL-Eingabeaufforderung:
mysql> exitHinweis:
Obwohl das Plugin caching_sha2_password eine verstärkte sichere Verschlüsselung bietet, hat es einige Kompatibilitätsprobleme mit bestehenden MySQL-Installationen. Für Details siehe diesen Link. Wenn Sie auf Kompatibilitätsprobleme stoßen, müssen Sie das Plugin "mysql_native_password" als Standard-Authentifizierungs-Plugin einstellen.
Um zum mysql_native_password-Plugin zu wechseln, führen Sie den folgenden Befehl an der MySQL-Eingabeaufforderung aus.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';Aktualisieren Sie die Änderungen mit dem Befehl:
mysql> FLUSH PRIVILEGES;
Überprüfen Sie nun erneut, ob die Authentifizierungsmethode geändert wurde oder nicht, indem Sie den Befehl verwenden:
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;Beispielausgabe:
Beenden Sie die MySQL-Eingabeaufforderung, indem Sie den folgenden Befehl eingeben:
exit3. PHP auf Ubuntu installieren
Um PHP zu installieren, führen Sie aus:
$ sudo apt-get install php-fpm php-mysqlNach der Installation von PHP müssen wir es sichern, indem wir eine einfache Änderung in der php.ini-Datei vornehmen.
Um dies zu tun, bearbeiten Sie die Datei php.ini mit Ihrem bevorzugten Editor:
$ sudo vi /etc/php/7.4/fpm/php.iniFinden Sie die folgende Zeile:
;cgi.fix_pathinfo=1Kommentiere es aus und ändere seinen Wert von 1 auf 0 (null).
cgi.fix_pathinfo=0Speichern und schließen Sie die Datei. Starten Sie dann den PHP-FPM-Dienst neu, damit die Änderungen wirksam werden.
$ sudo systemctl restart php7.4-fpmÜberprüfen Sie, ob der PHP-FPM-Dienst mit dem Befehl ausgeführt wird oder nicht:
$ sudo systemctl status php7.4-fpmBeispielausgabe:
● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: en>
Active: active (running) since Fri 2020-05-29 10:40:45 UTC; 11s ago
Docs: man:php-fpm7.4(8)
Process: 10711 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/ph>
Main PID: 10693 (php-fpm7.4)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 2283)
Memory: 7.0M
CGroup: /system.slice/php7.4-fpm.service
├─10693 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
├─10709 php-fpm: pool www
└─10710 php-fpm: pool www
May 29 10:40:44 ubuntuserver systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
May 29 10:40:45 ubuntuserver systemd[1]: Started The PHP 7.4 FastCGI Process Manager.3.1 Konfigurieren Sie Nginx so, dass PHP-FPM verwendet wird
Wir müssen Nginx so konfigurieren, dass es PHP-FPM verwendet.
Um dies zu tun, bearbeiten Sie die Standard-vHost (Serverblock) von Nginx /etc/nginx/sites-available/default Datei:
$ sudo vi /etc/nginx/sites-available/defaultFinden Sie den Serverbereich und geben Sie die FQDN oder die IP-Adresse Ihres Ubuntu-Servers wie unten gezeigt ein. Überprüfen Sie außerdem, ob Sie die Zeile index.php hinzugefügt haben. Alle Änderungen werden in Fettschrift angezeigt.
[...]
server {
listen 80 default_server;
listen [::]:80 default_server;
[...]
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name 192.168.225.52;
[...]Hier,
- listen 80; -> auf IPv4 hören.
- listen [::]:80 default_server ; -> hört auf ipv6.
- index.php -> Fügen Sie dies hinzu, wenn Sie PHP verwenden.
- root /var/www/html; -> Nginx-Dokumentstammverzeichnis.
- server_name 192.168.225.52; -> Die IP-Adresse unseres Ubuntu-Servers.
Scrollen Sie dann ein wenig nach unten und finden Sie den "#location ~ \.php$" -Abschnitt.
Kommentieren Sie die folgenden Zeilen aus und ändern Sie sie wie unten gezeigt.
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
Siehe den folgenden Screenshot. Die Änderungen sind mit roter Farbe markiert/unterstrichen.
Speichern und die Datei beenden.
Achten Sie genau darauf, wenn Sie die fastcgi_pass-Direktive innerhalb des location ~ \.php$ -Blocks ändern. Sie müssen den korrekten Dateinamen angeben, der tatsächlich im Verzeichnis /var/run/php auf Ihrem Server gespeichert ist. Um dies zu überprüfen, führen Sie aus:
$ ls /var/run/php/
php-fpm.sock php7.4-fpm.pid php7.4-fpm.sock
Wie Sie sehen können, lautet der Name der Datei php7.4-fpm.sock. Stellen Sie sicher, dass Sie in dieser Direktive den richtigen Namen angegeben haben.
Überprüfen Sie die Nginx-Konfigurationsdatei auf Syntaxfehler mit dem Befehl:
$ sudo nginx -tBeispielausgabe:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulWenn Sie keine Fehler sehen, starten Sie den Nginx-Dienst neu, damit die Änderungen wirksam werden.
Um dies zu tun, führen Sie aus:
$ sudo systemctl restart nginxLassen Sie uns nun eine Beispiel-PHP-Datei erstellen, um die PHP-Konfiguration über den Browser zu testen.
Erstellen Sie dazu eine Datei namens „info.php“ im Stammordner des Nginx-Dokuments.
$ sudo vi /var/www/html/info.phpFügen Sie die folgenden Zeilen hinzu:
<?php
phpinfo();
?>Speichern Sie die Datei und beenden Sie sie. Starten Sie den Nginx-Dienst neu, damit die Änderungen wirksam werden.
$ sudo systemctl restart nginxÖffnen Sie dann Ihren Webbrowser und navigieren Sie zu http://IP-address/info.php.
Sie werden die PHP-Details sehen.
Herzlichen Glückwunsch! PHP funktioniert!!
3.2 PHP-Module installieren
Um die Funktionalität von PHP zu verbessern, können Sie einige zusätzliche PHP-Module installieren.
Um die verfügbaren PHP-Module aufzulisten, führen Sie aus:
$ sudo apt-cache search php- | lessBeispielausgabe:
Verwenden Sie die Pfeile, um zwischen den Ergebnissen nach oben und unten zu navigieren. Zum Beenden geben Sie q ein.
Um die Details eines bestimmten PHP-Moduls zu finden, zum Beispiel php-gd, führen Sie Folgendes aus:
$ sudo apt-cache show php-gdUm ein PHP-Modul zu installieren, führen Sie aus:
$ sudo apt-get install php-gdUm alle Module zu installieren (nicht notwendig, jedoch), führen Sie aus:
$ sudo apt-get install php*Vergessen Sie nicht, den Nginx-Dienst nach der Installation eines PHP-Moduls neu zu starten.
Herzlichen Glückwunsch! Wir haben den LEMP-Stack erfolgreich auf einem Ubuntu 20.04 LTS-Server eingerichtet. Beginnen Sie damit, Websites und Webanwendungen in Ihrem neuen LEMP-Webstack bereitzustellen.
Als Nächstes lesen:
- Installiere phpMyAdmin mit LEMP-Stack auf Ubuntu 20.04 LTS







