GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Installieren Sie Nginx, MySQL, PHP (LEMP Stack) auf Ubuntu 20.04 LTS

In unserem vorherigen Tutorial haben wir besprochen, wie man den LAMP-Stack in Ubuntu 20.04 LTS installiert Server. In diesem Tutorial erfahren Sie, wie Sie Nginx, MySQL, PHP (LEMP-Stack) auf der Ubuntu 20.04 LTS-Server-Edition installieren. LEMP ist die Abkürzung für L inux, En gine-x, M ariaDB/M ySQL, P HP/P erl/P ython.

Installieren Sie Nginx, MySQL, PHP (LEMP Stack) auf Ubuntu 20.04 LTS

Für dieses Tutorial verwende ich die folgende Testmaschine:

  • Betriebssystem :Ubuntu 20.04 LTS-Server
  • IP-Adresse :192.168.225.52/24

Fangen wir an.

1. Installieren Sie Nginx auf Ubuntu

Führen Sie den folgenden Befehl im Terminal aus, um den Nginx-Webserver zu installieren:

$ sudo apt install nginx

Überprüfen Sie nach der Installation von Nginx, ob der Nginx-Dienst ausgeführt wird oder nicht, indem Sie den folgenden Befehl verwenden:

$ 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 wurde, können Sie ihn mit dem Befehl starten:

$ sudo systemctl enable nginx
$ sudo systemctl start nginx

1.1 Nginx-Webserver über UFW-Firewall zulassen

UFW , steht für U nkompliziert F irew all, ist ein Programm zur Verwaltung einer Netfilter-Firewall, das einfach zu bedienen ist. UFW ist standardmäßig in allen Ubuntu-Versionen verfügbar.

Standardmäßig kann von Remote-Systemen nicht auf den Nginx-Webbrowser zugegriffen werden, wenn Sie die UFW-Firewall in Ubuntu 20.04 LTS aktiviert haben. Sie müssen http zulassen und https Ports, indem Sie die unten angegebenen Schritte befolgen.

Lassen Sie uns zunächst mit dem Befehl anzeigen, welche Anwendungen ein Profil installiert haben:

$ sudo ufw app list

Beispielausgabe:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Wie Sie sehen können, haben Nginx- und OpenSSH-Anwendungen UFW-Profile installiert.

Wenn Sie sich das „Nginx Full“ ansehen Profil, werden Sie sehen, dass es Datenverkehr zu den Ports 80 ermöglicht und 443 :

$ 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 Folgendes aus:

$ sudo ufw app info "Nginx HTTP"

Lassen Sie uns fortfahren und die Nginx-Testseite ausführen.

Öffnen Sie dazu Ihren Webbrowser und navigieren Sie zu http://localhost/ oder http://IP-Adresse/ .

Sie sehen die Nginx-Willkommensseite wie unten gezeigt.

Herzliche Glückwünsche! Nginx-Server funktioniert!

2. Installieren Sie MySQL auf Ubuntu

Um MySQL auf Ubuntu zu installieren, führen Sie Folgendes aus:

$ sudo apt install mysql-server

Überprüfen Sie, ob der MySQL-Dienst ausgeführt wird 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 Kennworts des Administratorbenutzers (Root) der Datenbank für Mysql

Standardmäßig ist MySQL root Benutzerkennwort ist leer. Es wird nicht empfohlen, ein leeres Passwort für das Datenbankadministratorkonto zu verwenden. Sie müssen Ihren MySQL-Server sichern, indem Sie das folgende Skript ausführen:

$ sudo mysql_secure_installation

Sie werden gefragt, ob Sie "VALIDATE PASSWORD" einrichten möchten Komponente oder nicht. Diese Komponente ermöglicht es den Benutzern, sichere Passwörter für Datenbankanmeldeinformationen zu konfigurieren. Wenn aktiviert, überprüft es automatisch die Stärke des Passworts und zwingt die Benutzer, nur die Passwörter festzulegen, die sicher genug sind. Es ist sicher, dies deaktiviert zu lassen . Sie müssen jedoch ein sicheres und eindeutiges Kennwort für Datenbankanmeldeinformationen verwenden. Wenn Sie diese Komponente nicht aktivieren möchten, drücken Sie einfach eine beliebige Taste, um den Teil der Kennwortvalidierung zu überspringen und mit den restlichen Schritten fortzufahren.

Wenn Ihre Antwort Ja ist , werden Sie aufgefordert, die Ebene 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 y

Die verfügbaren Passwortvalidierungen sind niedrig , mittel und stark . Geben Sie einfach die entsprechende Zahl ein (0 für niedriges, 1 für mittleres und 2 für sicheres Passwort) und drücken Sie die EINGABETASTE.

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: 0

Geben Sie nun das Passwort für den MySQL-Root-Benutzer ein. Bitte beachten Sie, dass Sie das Passwort für den mysql-Root-Benutzer verwenden müssen, abhängig von der Passwortrichtlinie, die Sie im vorherigen Schritt ausgewählt haben. Wenn Sie das Plugin nicht aktiviert haben, verwenden Sie einfach ein sicheres und eindeutiges 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) : y

Sobald Sie das Passwort zweimal eingegeben haben, sehen Sie die Passwortstärke (in unserem Fall ist es 100 ). Wenn es für Sie in Ordnung ist, drücken Sie Y, um mit dem bereitgestellten Passwort fortzufahren. Wenn Sie mit der Passwortlänge nicht zufrieden sind, drücken Sie eine beliebige andere Taste und legen Sie ein sicheres Passwort fest. Ich bin mit meinem aktuellen Passwort einverstanden, also habe ich y gewählt .

Geben Sie für die restlichen Fragen einfach y ein und drücken Sie ENTER. Dadurch wird der anonyme Benutzer entfernt, die Anmeldung des Root-Benutzers aus der Ferne verweigert 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!

Erledigt! Wir haben das Passwort des MySQL-Root-Benutzers festgelegt.

2.2 Authentifizierungsmethode für MySQL-Root-Benutzer ändern

Standardmäßig ist der MySQL-Root-Benutzer so eingestellt, dass er sich mit "auth_socket" authentifiziert Plugin ab MySQL 5.7 und neueren Versionen auf Ubuntu. Obwohl dies die Sicherheit erhöht, wird es auch komplizierter, wenn Sie mit externen Programmen, z. B. phpMyAdmin, auf Ihren Datenbankserver zugreifen. Um dieses Problem zu beheben, müssen Sie die Authentifizierungsmethode von auth_socket in "caching_sha2_password" ändern oder "mysql_native_password" .

Ab MySQL 8.0-Version ist das bevorzugte und standardmäßige Authentifizierungs-Plugin caching_sha2_password . Das caching_sha2_password-Authentifizierungs-Plugin bietet eine sicherere Passwortverschlüsselung als das mysql_native_password-Plugin.

Um das Authentifizierungs-Plugin zu ändern, melden Sie sich mit dem Befehl:

bei Ihrer MySQL-Eingabeaufforderung an
$ sudo mysql

Fü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"�[email protected]>[email protected] | 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 auth_socket Plugin für die Authentifizierung.

Um das auth_socket-Plugin in caching_sha2_password zu ändern, führen Sie den folgenden Befehl an der mysql-Eingabeaufforderung aus. Wenn Sie das Plug-in VALIDATE PASSWORD aktiviert haben, stellen Sie sicher, dass Sie ein sicheres Passwort gemäß den aktuellen Richtlinienanforderungen verwendet haben. Ein starkes Sollte besteht aus mindestens 8 Zeichen, darunter ein Großbuchstabe, ein Kleinbuchstabe, eine Zahl und ein Sonderzeichen.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';

Ersetzen Sie "Password123#@!" mit einem starken und eindeutigen Passwort Ihrer Wahl im obigen Befehl.

Aktualisieren Sie die Änderungen mit dem Befehl:

mysql> FLUSH PRIVILEGES;

Überprüfen Sie nun, ob das aktuelle Authentifizierungs-Plugin geändert wurde oder nicht, indem Sie den Befehl verwenden:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Beispielausgabe:

Gut! Jetzt kann sich der myql-Root-Benutzer mit einem Passwort authentifizieren, um auf die mysql-Shell zuzugreifen.

Beenden Sie die mysql-Eingabeaufforderung:

mysql> exit

Hinweis:

Obwohl das Plugin caching_sha2_password eine verbesserte sichere Verschlüsselung bietet, hat es einige Kompatibilitätsprobleme mit bestehenden MySQL-Installationen. Einzelheiten finden Sie unter diesem Link . Wenn Sie auf Kompatibilitätsprobleme gestoßen sind, müssen Sie "mysql_native_password" festlegen plugin als Standard-Authentifizierungs-Plugin.

Um zu mysql_native_password zu wechseln plugin, 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:

exit

3. Installieren Sie PHP auf Ubuntu

Um PHP zu installieren, führen Sie Folgendes aus:

$ sudo apt-get install php-fpm php-mysql

Nach der Installation von PHP müssen wir es sichern, indem wir eine einfache Änderung in php.ini vornehmen Datei.

Bearbeiten Sie dazu die php.ini Datei mit Ihrem bevorzugten Editor:

$ sudo vi /etc/php/7.4/fpm/php.ini

Suchen Sie die folgende Zeile:

;cgi.fix_pathinfo=1

Entkommentieren Sie es und ändern Sie seinen Wert von 1 auf 0 (Null) .

cgi.fix_pathinfo=0

Speichern und schließen Sie die Datei. Starten Sie dann den PHP-FPM-Dienst neu, um die Änderungen zu übernehmen.

$ sudo systemctl restart php7.4-fpm

Überprüfen Sie, ob der PHP-FPM-Dienst ausgeführt wird oder nicht, indem Sie den Befehl verwenden:

$ sudo systemctl status php7.4-fpm

Beispielausgabe:

● 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 für die Verwendung von PHP-FPM

Wir müssen Nginx für die Verwendung von PHP-FPM konfigurieren.

Bearbeiten Sie dazu den Standard-vhost (Serverblock) von Nginx /etc/nginx/sites-available/default Datei:

$ sudo vi /etc/nginx/sites-available/default

Suchen Sie den Abschnitt Server und stellen Sie den FQDN oder die IP-Adresse Ihres Ubuntu-Servers wie unten gezeigt ein. Überprüfen Sie außerdem, ob Sie die index.php hinzugefügt haben Linie. Alle Änderungen sind in Fettschrift dargestellt.

[...]
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,

  • hör zu 80; -> auf ipv4 hören.
  • listen [::]:80 default_server; -> auf ipv6 hören.
  • index.php -> Fügen Sie dies hinzu, wenn Sie PHP verwenden.
  • root /var/www/html; -> Nginx-Dokumentstammverzeichnis.
  • Servername 192.168.225.52; -> Die IP-Adresse unseres Ubuntu-Servers.

Scrollen Sie dann ein wenig nach unten und suchen Sie "#location ~ \.php$" Abschnitt.

Entkommentieren und ändern Sie die folgenden Zeilen 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 rot markiert/unterstrichen.

Speichern und beenden Sie die Datei.

Passen Sie genau auf, wenn Sie fastcgi_pass ändern Direktive innerhalb der location ~ \.php$ Block. Sie müssen den korrekten Dateinamen mit dem angeben, was tatsächlich in /var/run/php gespeichert ist Verzeichnis auf Ihrem Server. Führen Sie zur Überprüfung Folgendes 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 Anweisung den richtigen Namen angegeben haben.

Überprüfen Sie die Nginx-Konfigurationsdatei auf Syntaxfehler mit dem Befehl:

$ sudo nginx -t

Beispielausgabe:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Wenn Sie keine Fehler sehen, starten Sie den Nginx-Dienst neu, um die Änderungen zu übernehmen.

Führen Sie dazu Folgendes aus:

$ sudo systemctl restart nginx

Lassen Sie uns nun eine Beispiel-PHP-Datei erstellen, um die PHP-Konfiguration über den Browser zu testen.

Erstellen Sie dazu eine Datei mit dem Namen "info.php" im Nginx-Dokumentenstammordner.

$ sudo vi /var/www/html/info.php

Fügen Sie die folgenden Zeilen hinzu:

<?php
phpinfo();
?>

Speichern und beenden Sie die Datei. Starten Sie den Nginx-Dienst neu, um die Änderungen zu übernehmen.

$ sudo systemctl restart nginx

Öffnen Sie dann Ihren Webbrowser und navigieren Sie zu http://IP-Adresse/info.php .

Sie sehen die PHP-Details.

Herzliche Glückwünsche! 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 Folgendes aus:

$ sudo apt-cache search php- | less

Beispielausgabe:

Verwenden Sie die Pfeile und , um sich zwischen den Ergebnissen nach oben und unten zu bewegen. Geben Sie zum Beenden q ein .

Um die Details eines bestimmten PHP-Moduls zu finden, zum Beispiel php-gd , ausführen:

$ sudo apt-cache show php-gd

Um ein PHP-Modul zu installieren, führen Sie Folgendes aus:

$ sudo apt-get install php-gd

Um alle Module zu installieren (jedoch nicht notwendig), führen Sie Folgendes aus:

$ sudo apt-get install php*

Vergessen Sie nicht, den Nginx-Dienst nach der Installation eines PHP-Moduls neu zu starten.

Herzliche Glückwünsche! Wir haben den LEMP-Stack erfolgreich auf dem Ubuntu 20.04 LTS-Server eingerichtet. Beginnen Sie mit der Bereitstellung von Websites und Webanwendungen in Ihrem neuen LEMP-Webstack.

Weiterlesen:

  • Installieren Sie phpMyAdmin mit LEMP Stack auf Ubuntu 20.04 LTS

Ubuntu
  1. So installieren Sie Nginx mit PHP und MySQL (LEMP Stack) unter Ubuntu 18.04

  2. So installieren Sie Phorum mit Nginx auf Ubuntu 18.04 LTS

  3. So installieren Sie Nginx mit PHP und MySQL (LEMP Stack) unter Ubuntu 20.04 LTS

  4. So installieren Sie LAMP Stack auf Ubuntu 22.04 LTS

  5. So installieren Sie LEMP Stack Nginx, MySQL, PHP unter Ubuntu 22.04

So installieren Sie den LEMP-Stack auf Ubuntu 20.04 Server/Desktop

So installieren Sie Nginx, MySQL und PHP (LEMP) unter Ubuntu 20.04

So installieren Sie Nginx unter Ubuntu 18.04 LTS

So installieren Sie Nginx, MySQL und PHP (LEMP) auf einem Ubuntu 15.04-Server

So installieren Sie LEMP (Linux, Nginx, MySQL, PHP) auf einem Ubuntu 14.04 LTS Cloud Server

So installieren Sie Nginx, MySQL, PHP (LEMP) Stack auf einem Debian 8.3 Cloud Server