Website-Suche

Installieren Sie Nginx, MariaDB, PHP (LEMP-Stack) auf einem Ubuntu 18.04 LTS Server


In unserem vorherigen Tutorial haben wir besprochen, wie man einen LAMP-Stack unter Ubuntu 18.04 LTS installiert. In diesem Tutorial werden wir sehen, wie man Nginx, MariaDB, PHP (LEMP-Stack) auf der minimalen Ubuntu 18.04 LTS Server-Edition installiert. Wie ich im vorherigen Tutorial erwähnt habe, ist LEMP das Akronym für Linux, Engine-x, MariaDB/MySQL, PHP/Perl/Python. Für dieses Tutorial werde ich die folgende Testmaschine verwenden:

  • Betriebssystem : Ubuntu 18.04 LTS Server
  • IP-Adresse : 192.168.225.22/24

Lass uns anfangen.

Installieren Sie Nginx, MariaDB, PHP (LEMP-Stack) unter Ubuntu 18.04 LTS

1. Nginx installieren

Öffnen Sie das Terminal und führen Sie den folgenden Befehl aus, um den Nginx-Webserver zu installieren:

$ sudo apt install nginx

Nach 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 Sat 2018-07-07 12:10:05 UTC; 57s ago
Docs: man:nginx(8)
Process: 1846 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 1833 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 1849 (nginx)
Tasks: 2 (limit: 2322)
CGroup: /system.slice/nginx.service
├─1849 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─1851 nginx: worker process

Jul 07 12:10:05 ubuntuserver systemd[1]: Starting A high performance web server and a reverse proxy server...
Jul 07 12:10:05 ubuntuserver systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Jul 07 12:10:05 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 es noch nicht gestartet wurde, können Sie es mit folgendem Befehl starten:

$ sudo systemctl start nginx

1.1 Firewall anpassen, um den Nginx-Webserver zuzulassen

Standardmäßig kann auf den Nginx-Webbrowser von entfernten Systemen nicht zugegriffen werden, wenn Sie die UFW-Firewall in Ubuntu 18.04 LTS aktiviert haben. Sie müssen den HTTP- und HTTPS-Verkehr über UFW zulassen, indem Sie die folgenden Schritte ausführen.

Zuerst wollen wir sehen, welche Anwendungen ein Profil mit folgendem Befehl installiert haben:

$ sudo ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH

Wie 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"
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"
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 eine Seite sehen, die ungefähr wie unten aussieht.

Wenn Sie eine Ausgabe wie oben sehen, herzlichen Glückwunsch! Der Nginx-Server funktioniert!

2. Installiere MariaDB

MariaDB ist der Drop-in-Ersatz des MySQL-Datenbankservers.

Um es zu installieren, führen Sie aus:

$ sudo apt install mariadb-server mariadb-client

Die Version von MariaDB in den offiziellen Ubuntu-Repositories könnte veraltet sein. Wenn Sie die neueste MariaDB installieren möchten, fügen Sie das offizielle MariaDB-Repository für Ubuntu hinzu und installieren Sie es wie unten gezeigt.

Zuerst fügen Sie das MariaDB-Repository hinzu und importieren den Schlüssel wie unten gezeigt.

$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 
$ sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://sgp1.mirrors.linux-console.net/mariadb/repo/10.3/ubuntu bionic main'

Nachdem Sie das Repository hinzugefügt haben, führen Sie die folgenden Befehle aus, um MariaDB zu installieren.

$ sudo apt update
$ sudo apt install mariadb-server

Überprüfen Sie mit dem Befehl, ob der MariaDB-Dienst läuft oder nicht:

$ sudo systemctl status mysql

Beispielausgabe:

● mariadb.service - MariaDB database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-07-07 12:15:13 UTC; 2min 57s ago
Main PID: 3428 (mysqld)
Status: "Taking your SQL requests now..."
Tasks: 27 (limit: 2322)
CGroup: /system.slice/mariadb.service
└─3428 /usr/sbin/mysqld

Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: mysql
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: performance_schema
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: Phase 6/7: Checking and upgrading tables
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: Processing databases
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: information_schema
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: performance_schema
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: Phase 7/7: Running 'FLUSH PRIVILEGES'
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: OK
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3534]: Checking for insecure root accounts.
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3538]: Triggering myisam-recover for all MyISAM tables and aria-recover for all Aria tables

Mysql läuft!

2.1 Datenbank-Administratorbenutzer (root) Passwort einrichten

Während der MariaDB-Installation wird ein Passwort für das administrative Benutzerkonto (root) festgelegt.

Wenn Sie versuchen, das Passwort manuell mit dem Befehl einzurichten:

$ mysql_secure_installation

Sie können sich nicht anmelden, um das Passwort festzulegen. Sie werden einen Fehler wie unten sehen.

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
 SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Enter current password for root (enter for none):

Um dieses Problem zu beheben, melden Sie sich als MySQL-Datenbankadministrator mit dem Befehl an:

$ sudo mysql -u root

Nachdem Sie sich in die MySQL-Eingabeaufforderung eingeloggt haben, führen Sie die folgenden Befehle nacheinander aus.

use mysql;
update user set plugin='' where User='root';
flush privileges;
\q

Jetzt können Sie das Datenbank-Administrationspasswort mit folgendem Befehl festlegen:

$ mysql_secure_installation

Geben Sie das Passwort password ein und drücken Sie die ENTER-Taste, um die Standardwerte zu akzeptieren.

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
 SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): # Press ENTER
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] # Press ENTER
New password: # Enter password
Re-enter new password: # Re-enter password
Password updated successfully!
Reloading privilege tables..
 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] # Press ENTER
 ... 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? [Y/n] # Press ENTER
 ... Success!

By default, MariaDB 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? [Y/n] # Press ENTER
 - Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
 ... Failed! Not critical, keep moving...
 - 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? [Y/n] # Press ENTER
 ... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.

Das war's. Das Passwort für das Datenbank-Administratorkonto wurde festgelegt.

3. PHP installieren

Um PHP zu installieren, führen Sie aus:

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

Nach der Installation von PHP müssen wir es durch eine einfache Änderung absichern.

Um dies zu tun, bearbeiten Sie die php.ini-Datei:

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

Finden Sie die folgende Zeile:

;cgi.fix_pathinfo=1

Kommentiere es aus und ändere seinen Wert von 1 zu 0 (Null).

cgi.fix_pathinfo=0

Speichern und schließen Sie die Datei. Starten Sie dann den PHP-FPM-Dienst neu, damit die Änderungen wirksam werden.

$ sudo systemctl restart php7.2-fpm

Überprüfen Sie, ob der PHP-FPM-Dienst mit dem Befehl ausgeführt wird oder nicht:

$ sudo systemctl status php7.2-fpm

Beispielausgabe:

● php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-07-07 12:23:46 UTC; 7s ago
Docs: man:php-fpm7.2(8)
Main PID: 11005 (php-fpm7.2)
Status: "Ready to handle connections"
Tasks: 3 (limit: 2322)
CGroup: /system.slice/php7.2-fpm.service
├─11005 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
├─11018 php-fpm: pool www
└─11019 php-fpm: pool www

Jul 07 12:23:46 ubuntuserver systemd[1]: Starting The PHP 7.2 FastCGI Process Manager...
Jul 07 12:23:46 ubuntuserver systemd[1]: Started The PHP 7.2 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) Datei von Nginx /etc/nginx/sites-available/default:

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

Finden Sie den Serverabschnitt und setzen Sie den FQDN oder die IP-Adresse Ihres Ubuntu-Servers wie unten gezeigt. Überprüfen Sie auch, ob Sie die Zeile index.php hinzugefügt haben. Alle Änderungen werden in fetten Buchstaben 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.22;
[...]

Lassen Sie uns die obigen Zeilen aufschlüsseln und sehen, was jede Zeile bedeutet.

  • listen 80; –> auf ipv4 hören.
  • listen [::]:80 default_server ; –> hört auf ipv6.
  • root /var/www/html; –> Nginx-Dokumentstammverzeichnis.
  • server_name 192.168.225.22; –> IP-Adresse unseres Ubuntu-Servers.

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

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:/run/php/php7.2-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;
 }
}

Speichern und die Datei verlassen.

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 /run/php-Verzeichnis auf Ihrem Server gespeichert ist. Um dies zu überprüfen, führen Sie aus:

$ ls /run/php/
php7.2-fpm.pid php7.2-fpm.sock

Wie Sie sehen können, ist der Name der Datei php7.2-fpm.sock, nicht php7.0-fpm.sock, wie es in der location ~ \.php$-Direktive aufgeführt ist. 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 -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, damit die Änderungen wirksam werden.

Um dies zu tun, führen Sie aus:

$ sudo systemctl restart nginx

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

Um dies zu tun, erstellen Sie eine Datei namens info.php im Nginx-Dokumentstammordner.

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

Fü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.

Ö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- | less

Beispielausgabe:

PHP-Module suchen

Verwenden Sie die Pfeile, um zwischen den Ergebnissen auf- und abwärts zu navigieren. Um die Ergebnisse zu verlassen, 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-gd

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

$ sudo apt-get install php-gd

Um alle Module zu installieren (nicht notwendig, allerdings), 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 dem Ubuntu 18.04 LTS-Server eingerichtet. Beginnen Sie mit der Bereitstellung von Websites und Webanwendungen in Ihrem neuen LEMP-Webstack.

Prost!