Wie installiert man Nginx mit PHP und MariaDB (LEMP-Stack) mit Opcache, Redis und Let’s Encrypt auf Fedora 32?

Ein LEMP-Softwarestapel ist eine Gruppe von Open-Source-Software, die zusammen installiert wird, damit ein Server Websites und Anwendungen hosten kann. Es ist ein Akronym für Linux, ENginx-Server, MySQL (unter Verwendung von MariaDB) und PHP.

In dieser Anleitung werden Sie einen LEMP-Stack auf einem Fedora 32-basierten Server installieren. Wir werden auch phpMyAdmin, Redis, Opcache und Let’s Encrypt SSL installieren.

Voraussetzungen

Ein Server, auf dem Fedora 32 läuft.

Ein Nicht-Root-Sudo-Benutzer.

Stellen Sie sicher, dass alles aktualisiert wird.

$ sudo dnf upgrade

Wenige Pakete, die Ihr System benötigt.

$ sudo dnf install wget curl nano -y

Einige dieser Pakete sind möglicherweise bereits auf Ihrem System installiert.

Deaktivieren Sie SELinux.

$ sudo setenforce 0

Konfigurieren der Firewall

Der erste Schritt ist die Konfiguration der Firewall. Auf dem Fedora-Server ist die Firewall Firewalld vorinstalliert.

Überprüfen Sie, ob die Firewall läuft.

$ sudo firewall-cmd --state

Sie sollten die folgende Ausgabe erhalten.

running

Setzen Sie die Standardzone der Firewall auf öffentlich.

$ sudo firewall-cmd --set-default-zone=public

Überprüfen Sie die aktuell erlaubten Dienste/Ports.

$ sudo firewall-cmd --zone=public --permanent --list-services

Es sollte die folgende Ausgabe zeigen.

dhcpv6-client mdns ssh

Lassen Sie HTTP- und HTTPS-Ports zu.

$ sudo firewall-cmd --zone=public --permanent --add-service=http
$ sudo firewall-cmd --zone=public --permanent --add-service=https

Überprüfen Sie den Status der Firewall erneut.

$ sudo firewall-cmd --zone=public --permanent --list-services

Sie sollten eine ähnliche Ausgabe sehen.

dhcpv6-client http https mdns ssh

Laden Sie die Firewall neu.

$ sudo systemctl reload firewalld

PHP installieren

Fedora 32 wird standardmäßig mit PHP 7.4 ausgeliefert, aber um ein aktualisiertes PHP-Repository zu haben, werden wir das REMI-Repository hinzufügen.

Installieren Sie das REMI-Repository, das das offizielle Fedora-Repository für die Installation von PHP-Paketen ist.

$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm

Aktivieren Sie das remiRepository und deaktivieren Sie das remi-modularRepository. Dadurch wird das für die Installation von PHP 7.4-Paketen erforderliche Repository aktiviert.

$ sudo dnf config-manager --set-enabled remi
$ sudo dnf config-manager --set-disabled remi-modular

Installieren Sie PHP 7.4 zusammen mit einigen zusätzlichen Paketen.

$ sudo dnf install -y php-cli php-fpm php-mysqlnd

Prüfen Sie, ob PHP korrekt funktioniert.

$ php --version

Sie sollten eine ähnliche Ausgabe sehen.

PHP 7.4.6 (cli) (built: May 12 2020 08:09:15) ( NTS ) 
Copyright (c) The PHP Group 
Zend Engine v3.4.0, Copyright (c) Zend Technologies 

MariaDB installieren

MariaDB ist ein Drop-in-Ersatz für MySQL, d.h. die Befehle zum Ausführen und Betreiben von MariaDB sind die gleichen wie die für MySQL.

Fedora 32 wird standardmäßig mit MariaDB 10.4 ausgeliefert, der neuesten stabilen Version, die ab sofort verfügbar ist, so dass wir diese verwenden werden.

Um MariaDB zu installieren, geben Sie den folgenden Befehl ein.

$ sudo dnf install mariadb-server -y

Überprüfen Sie, ob MariaDB korrekt installiert wurde.

$ mysql --version

Sie sollten die folgende Ausgabe sehen.

mysql  Ver 15.1 Distrib 10.4.12-MariaDB, for Linux (x86_64) using  EditLine wrapper

Aktivieren und starten Sie den MariaDB-Dienst.

$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb

Führen Sie den folgenden Befehl aus, um die Standardkonfiguration durchzuführen, z.B. ein Root-Passwort zu vergeben, anonyme Benutzer zu entfernen, die entfernte Anmeldung bei Root zu verbieten und Testtabellen zu löschen.

$ sudo mysql_secure_installation

Mit MariaDB 10.4 werden Sie nun gefragt, ob Sie das root-Passwort oder das unix_socket-Plugin verwenden möchten. Das unix_socket-Plugin ermöglicht es Ihnen, sich mit Ihren Linux-Benutzerdaten bei MariaDB anzumelden. Es gilt als sicherer, obwohl Sie einen traditionellen Benutzernamen/Passwort benötigen, um Anwendungen von Drittanbietern wie phpMyAdmin zu benutzen. Wir werden für dieses Tutorial bei der Verwendung des unix_socket-Plugins bleiben. Sie können phpMyAdmin weiterhin über jeden Benutzer verwenden, den Sie für Ihre Datenbanken anlegen.

Durch Drücken der Eingabetaste wählen Sie die Standardoption (diejenige, die großgeschrieben wird, in diesem Fall Y).

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
haven't set the root password yet, 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 or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Enabled successfully!
Reloading privilege tables..
 ... Success!

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] [ANSWER n]
... skipping.

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...
 ... 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? [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.

Thanks for using MariaDB!

Das war’s schon. Wenn Sie sich das nächste Mal bei MySQL anmelden wollen, verwenden Sie folgenden Befehl

$ sudo mysql

Geben Sie Ihr Root-Passwort ein, wenn Sie dazu aufgefordert werden.

Redis installieren

Fedora 32 enthält v5.0.8 des Redis-Pakets, aber das Remi-Repository, das wir früher für PHP installiert haben, enthält die neueste Version von Redis (v6.0.1) zum Zeitpunkt der Erstellung dieses Tutorials.

Verwenden Sie den folgenden Befehl, um Redis und die entsprechende PHP-Redis-Erweiterung zu installieren.

$ sudo dnf install redis php-redis

Aktivieren Sie den Redis-Dienst.

$ sudo systemctl enable --now redis

Konfigurieren Sie den Redis-Server

Lassen Sie uns einige grundlegende Konfigurationen auf dem Redis-Server durchführen.

Öffnen Sie die Datei /etc/redis.confmit dem Nano-Editor.

$ sudo nano /etc/redis.conf

Wenn Sie möchten, dass sich Remote-Clients mit Ihrer Redis-Instanz verbinden, dann suchen Sie die Leitung bind 127.0.0.1und ändern Sie sie wie folgt.

bind 0.0.0.0

Sie können auch den Standardport, auf dem Redis lauscht, von 6379 auf einen Wert Ihrer Wahl ändern.

port 3458

Um Redis als Cache-Server zu konfigurieren, stellen Sie die folgenden Werte wie angegeben ein.

maxmemory 256mb
maxmemory-policy allkeys-lru

Dies weist Redis an, jeden Schlüssel mit Hilfe des LRU-Algorithmus zu entfernen, wenn der maximale Speicher von 256 MB erreicht ist. Sie können den Speicherwert entsprechend Ihren Anforderungen und dem von Ihnen verwendeten Server einstellen.

Sie können ein Passwort festlegen, so dass jeder Client, der Redis benötigt, sich zuerst authentifizieren muss. Um dies zu tun, setzen Sie ein Passwort mit der folgenden Direktive.

requirepass  <AuthPassword>

Weitere zu ändernde Direktiven finden Sie in der Konfigurationsdatei. Wenn Sie fertig sind, drücken Sie Strg + X und geben Sie Y ein, wenn Sie aufgefordert werden, die Datei zu speichern.

Starten Sie den Redis-Server neu, um die Änderungen zu übernehmen.

$ sudo systemctl restart redis

Wir werden auch die Regel in unserer Firewall hinzufügen müssen, damit Redis funktionieren können.

$ sudo firewall-cmd --zone=public --permanent --add-port=6379/tcp
$ sudo firewall-cmd --reload

Sie müssen den Wert im obigen Befehl ändern, damit er mit dem Port übereinstimmt, den Sie in der obigen Konfigurationsdatei gewählt haben.

Nginx installieren

Fedora 32 wird standardmäßig mit der neuesten Stable-Version von Nginx ausgeliefert. (1.18.0).

Installieren Sie Nginx.

$ sudo dnf install nginx -y

Prüfen Sie, ob es korrekt funktioniert.

$ nginx -v

Abhängig von der Version von Nginx, die Sie zur Installation ausgewählt haben, sollten Sie die folgende Ausgabe sehen.

nginx version: nginx/1.18.0

Starten und aktivieren Sie Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Öffnen Sie die IP-Adresse Ihres Servers in einem Browser, um die folgende Seite anzuzeigen. Das bedeutet, dass Nginx ordnungsgemäß funktioniert.

Konfigurieren von Nginx

Richten Sie Verzeichnisse ein, in denen die Serverblöcke leben werden.

$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled

Erstellen Sie das Verzeichnis, in dem Ihre Website gespeichert wird.

$ sudo mkdir /var/www/example.com/html -p

Die Verwendung der -p-Direktive erzeugt übergeordnete Verzeichnisse, die vorher nicht existierten.

Führen Sie den folgenden Befehl aus, um eine Konfigurationsdatei für Ihre Site hinzuzufügen.

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

Fügen Sie den folgenden Code in den Editor ein.

server {
  listen          *:80;
  server_name     example.com;
  root            /var/www/example.com/html;
  index           index.php index.html;

  location / {
    try_files   $uri $uri/ =404;
  }
    
  access_log /var/log/nginx/example.com.access.log;
  error_log /var/log/nginx/example.com.error.log;

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass  unix:/run/php-fpm/www.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include  fastcgi_params;
  }
}

Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie zum Speichern der Datei aufgefordert werden.

Diese Datei geht davon aus, dass wir example.comim Verzeichnis /var/www/html. Wenn Sie keine Domäne verwenden und Ihren Server so konfigurieren, dass er nur über die IP-Adresse/Localhost erreichbar ist, müssen Sie die entsprechenden Server-Block-Einstellungen aus der nginx.confDatei entfernen, da sonst der von Ihnen erstellte Server-Block durcheinander gebracht wird.

Aktivieren Sie diese Konfigurationsdatei, indem Sie sie mit dem sites-enabledVerzeichnis verknüpfen.

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

Öffnen Sie die /etc/nginx/nginx.confDatei zur Bearbeitung.

$ sudo nano /etc/nginx/nginx.conf	

Fügen Sie die folgenden Zeilen nach der Zeile ein include /etc/nginx/conf.d/*.conf

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;

Ändern Sie den Wert types_hash_max_sizevon 2048 in 4096.

types_hash_max_size 4096;

Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie zum Speichern der Datei aufgefordert werden. Testen Sie die Nginx-Konfiguration.

$ sudo nginx -t

Sie sollten die folgende Ausgabe sehen, die anzeigt, dass Ihre Konfiguration korrekt ist.

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

Laden Sie den Nginx-Dienst neu.

$ sudo systemctl reload nginx

PHP-FPM konfigurieren

Öffnen Sie die Datei /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Wir müssen den Unix-Benutzer/die Gruppe von PHP-Prozessen auf nginx setzen. Suchen Sie die user=apacheund group=apacheZeilen in der Datei und ändern Sie sie auf nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Starten Sie den PHP-fpm-Prozess neu.

$ sudo systemctl restart php-fpm

Um Ihr PHP-Setup zu testen, erstellen Sie eine Datei test.phpin dem htmlOrdner.

$ sudo nano /var/www/example.com/html/test.php

Fügen Sie den folgenden Inhalt hinzu und speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

<?php phpinfo();

Starten http://<yourserverip>/test.phpSie in Ihrem Webbrowser und Sie sollten folgendes sehen.

phpMyAdmin installieren

Remi Repository enthält die neueste Version von phpMyAdmin, so dass wir es einfach mit dem folgenden Befehl installieren können.

$ sudo dnf install phpmyadmin

Es installiert sich selbst in das /usr/share/phpMyAdminVerzeichnis.

Konfigurieren Sie phpMyAdmin

Damit der Webserver von Nginx phpMyAdmin-Dateien korrekt finden und bereitstellen kann, müssen wir einen symbolischen Link von seinem tatsächlichen Speicherort zum Stammdokumentenverzeichnis von Nginx erstellen.

Führen Sie dazu den folgenden Befehl aus.

$ sudo ln -s /usr/share/phpmyadmin /var/www/example.com/html/phpmyadmin

Ihre phpMyAdmin-Installation ist betriebsbereit. Um auf sie zuzugreifen, öffnen Sie einfach http://example.com/phpmyadmin.

Wenn Sie php-Session-Fehler erhalten, führen Sie den folgenden Befehl aus, um die richtigen Berechtigungen für das PHP-Session-Verzeichnis zu erteilen. Überprüfen Sie Ihren Session-Pfad anhand der test.phpDatei, die wir zuvor erstellt haben. Für uns ist es unter /var/lib/php/session.

$ sudo chown -R nginx:nginx /var/lib/php/session

Standardmäßig sollte dieser Standardort geändert werden, da dies der häufigste Ort ist, an dem jeder Hacker Ihre phpMyAdmin-Installation finden kann. Führen Sie dazu den folgenden Befehl aus.

$ sudo mv phpmyadmin sm123

Im Grunde haben wir unseren phpMyAdmin-Speicherort in einen sm123Ordner verschoben. Um darauf zuzugreifen, müssen Sie nun http://example.com/sm123 in Ihrem Browser öffnen.

Da wir hier unix_authentication mit MySQL verwenden, gibt es keinen root-Benutzer, der sich über phpMyAdmin einloggen muss. Sie müssen zuerst einen MySQL-Benutzer anlegen und ihm Berechtigungen für Datenbanken erteilen, um phpMyAdmin verwenden zu können.

Opcache konfigurieren

Durch die Installation von phpMyAdmin aus dem Repository von Remi wird auch Opcache installiert. Falls Sie phpMyAdmin nicht installiert haben und dies auch nicht wünschen, können Sie Opcache einfach mit dem folgenden Befehl installieren.

$ sudo dnf install php-opcache	

Überprüfen Sie, ob es installiert wurde.

$ php -v
PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies

Um die Opcache-Einstellungen zu ändern, öffnen Sie die Datei /etc/php.d/10-opcache.ini.

$ sudo nano /etc/php.d/10-opcache.ini

Die folgenden Einstellungen sollten Ihnen den Einstieg in die Benutzung von Opcache erleichtern und werden im Allgemeinen als gute Leistung empfohlen. Sie können eine Konfiguration aktivieren, indem Sie sie auskommentieren, indem Sie sie vor der Konfiguration entfernen;.

opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Starten Sie Ihren Server neu, um die Einstellungen zu übernehmen.

$ sudo systemctl reload nginx

Installieren Sie SSL über Let’s Encrypt

SSL ist zu einem wesentlichen Bestandteil jeder Website geworden. Hier werden wir SSL mit dem Dienst Let’s Encrypt installieren.

Installieren Sie dazu zunächst das Werkzeug Certbot.

$ sudo dnf install certbot-nginx

Erzeugen Sie die Zertifikate.

$ sudo certbot --nginx -d example.com -d www.example.com -d phpmyadmin.example.com

Wir erstellen Zertifikate sowohl für unsere Hauptsite als auch für die phpMyAdmin-Domain.

Wenn Sie Certbot zum ersten Mal auf Ihrem System ausführen, werden Sie nach einer E-Mail-Adresse und der Zustimmung zu den Nutzungsbedingungen gefragt. Sie werden auch gefragt, ob Sie damit einverstanden sind, Daten mit der EFF-Stiftung zu teilen, zu denen Sie nein sagen können. Danach wird certbot mit den Servern von Let’s Encrypt kommunizieren und eine Challenge ausführen, um Ihre Domains zu überprüfen.

Wenn das erfolgreich ist, werden Sie gefragt, wie mit HTTPS-Weiterleitungen umgegangen werden soll.

Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Wählen Sie Ihre Wahl und drücken Sie die Eingabetaste. Ihre Zertifikate werden erstellt und Ihre Nginx-Konfiguration wird mit den SSL-Einstellungen aktualisiert.

Ihre Zertifikate sind fertig, und Sie können Ihre Website jetzt öffnen, indem Sie zu https://example.com gehen.

Konfigurieren der automatischen SSL-Verlängerung

Dies ist der letzte Schritt, bevor wir dieses Tutorial beenden. Um das SSL zu erneuern, werden wir cron verwenden.

Wir müssen einen Eintrag zu Cron hinzufügen, indem wir den Crontab-Editor verwenden. Um den Crontab-Editor zu öffnen, führen Sie den folgenden Befehl aus.

$ EDITOR=nano sudo crontab -e

EDITOR=nano vor dem Befehl stellt sicher, dass crontab den Nano-Editor für uns öffnet, da Fedora standardmäßig den VIM-Editor vorzieht.

Fügen Sie die folgende Zeile unten ein.

. . .
25 2 * * * /usr/bin/certbot renew --quiet

Der 25 2 * * *Teil dieser Zeile bedeutet „führe den folgenden Befehl jeden Tag um 2:25 Uhr aus“. Sie können jederzeit wählen.

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Der renewBefehl für Certbot prüft alle auf dem System installierten Zertifikate und aktualisiert alle, die in weniger als dreißig Tagen ablaufen. --quietweist Certbot an, keine Informationen auszugeben oder auf Benutzereingaben zu warten.

Dieser Befehl wird täglich ausgeführt.

Schlussfolgerung

Das ist alles zu diesem Tutorial. Ihr LEMP-Setup ist abgeschlossen, und Sie können mit der Erstellung und dem Hosting Ihrer Websites und Anwendungen beginnen.

Das könnte Dich auch interessieren …