Ein LEMP-Software-Stack ist eine Gruppe von Open-Source-Software, die zusammen installiert wird, damit ein Server Websites und Apps hosten kann. Es ist ein Akronym für L inux, E Nginx-Server, M ySQL (mit MariaDB) und P PS.
In diesem Handbuch installieren Sie einen LEMP-Stack auf einem Fedora 32-basierten Server. Wir werden auch phpMyAdmin, Redis, Opcache und Let's Encrypt SSL installieren.
Voraussetzungen
Ein Server mit Fedora 32.
Ein Nicht-Root-Sudo-Benutzer.
Stellen Sie sicher, dass alles aktualisiert ist.
$ sudo dnf upgrade
Einige Pakete, die Ihr System benötigt.
$ sudo dnf install wget curl nano -y
Einige dieser Pakete sind möglicherweise bereits auf Ihrem System installiert.
SELinux deaktivieren.
$ sudo setenforce 0
Firewall konfigurieren
Der erste Schritt besteht darin, die Firewall zu konfigurieren. Der Fedora-Server wird mit vorinstallierter Firewalld-Firewall geliefert.
Überprüfen Sie, ob die Firewall ausgeführt wird.
$ sudo firewall-cmd --state
Sie sollten die folgende Ausgabe erhalten.
running
Stellen Sie die Standardzone der Firewall auf öffentlich ein.
$ 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
HTTP- und HTTPS-Ports zulassen.
$ 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
Installieren Sie PHP
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 zum Installieren von PHP-Paketen ist.
$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm
Aktivieren Sie remi
-Repository und deaktivieren Sie remi-modular
Repository. Dadurch wird das Repository aktiviert, das zum Installieren von PHP 7.4-Paketen erforderlich ist.
$ 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
Überprü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
Installieren Sie MariaDB
MariaDB ist ein Drop-in-Ersatz für MySQL, was bedeutet, dass die Befehle zum Ausführen und Betreiben von MariaDB die gleichen sind wie die für MySQL.
Fedora 32 wird standardmäßig mit MariaDB 10.4 ausgeliefert, der aktuell verfügbaren stabilen Version, also werden wir diese verwenden.
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 eine Standardkonfiguration durchzuführen, z. B. das Vergeben eines Root-Passworts, das Entfernen anonymer Benutzer, das Verbieten der Root-Anmeldung aus der Ferne und das Löschen von Testtabellen.
$ sudo mysql_secure_installation
Mit MariaDB 10.4 werden Sie nun gefragt, ob Sie das Root-Passwort oder unix_socket verwenden möchten Plugin. Der unix_socket Plugin können Sie sich mit Ihren Linux-Benutzerdaten bei MariaDB anmelden. Es gilt als sicherer, obwohl Sie einen herkömmlichen Benutzernamen/ein herkömmliches Passwort benötigen, um Apps von Drittanbietern wie phpMyAdmin zu verwenden. Wir werden uns für dieses Tutorial an die Verwendung des unix_socket-Plugins halten. Sie können phpMyAdmin weiterhin über jeden Benutzer verwenden, den Sie für Ihre Datenbanken erstellen.
Durch Drücken der Eingabetaste wird die Standardoption ausgewählt (in diesem Fall die großgeschriebene Option 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 ist es. Wenn Sie sich das nächste Mal bei MySQL anmelden möchten, verwenden Sie den folgenden Befehl
$ sudo mysql
Geben Sie Ihr Root-Passwort ein, wenn Sie dazu aufgefordert werden.
Installieren Sie Redis
Fedora 32 enthält v5.0.8 des Redis-Pakets, aber das Remi-Repository, das wir zuvor für PHP installiert haben, enthält die neueste Version von Redis (v6.0.1) zum Zeitpunkt des Schreibens 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
Redis-Server konfigurieren
Lassen Sie uns einige grundlegende Konfigurationen auf dem Redis-Server durchführen.
Öffnen Sie die Datei /etc/redis.conf
mit Nano-Editor.
$ sudo nano /etc/redis.conf
Wenn Sie möchten, dass sich Remote-Clients mit Ihrer Redis-Instanz verbinden, suchen Sie die Zeile bind 127.0.0.1
und ändern Sie es 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, legen Sie die folgenden Werte wie angegeben fest.
maxmemory 256mb
maxmemory-policy allkeys-lru
Dies weist Redis an, alle Schlüssel mit dem LRU-Algorithmus zu entfernen, wenn der maximale Speicher von 256 MB erreicht ist. Sie können den Speicherwert gemäß Ihren Anforderungen und dem von Ihnen verwendeten Server festlegen.
Sie können ein Passwort festlegen, sodass sich jeder Client, der Redis benötigt, zuerst authentifizieren muss. Legen Sie dazu mit der folgenden Direktive ein Passwort fest.
requirepass <AuthPassword>
Weitere Anweisungen zum Ändern 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 müssen die Regel auch in unserer Firewall hinzufügen, damit Redis funktioniert.
$ 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 ausgewählt haben.
Nginx installieren
Fedora 32 wird standardmäßig mit der neuesten stabilen Version von Nginx ausgeliefert. (1.18.0).
Nginx installieren.
$ sudo dnf install nginx -y
Überprüfen Sie, ob es richtig 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
Nginx starten und aktivieren.
$ 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.
Nginx konfigurieren
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
Mit dem -p Direktive erstellt übergeordnete Verzeichnisse, die vorher nicht existierten.
Führen Sie den folgenden Befehl aus, um eine Konfigurationsdatei für Ihre Website 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 aufgefordert werden, die Datei zu speichern.
Diese Datei geht davon aus, dass wir example.com
hosten werden im Verzeichnis /var/www/html
. Wenn Sie keine Domain verwenden und Ihren Server so konfigurieren, dass er nur über die IP-Adresse/localhost erreichbar ist, müssen Sie die entsprechenden Serverblockeinstellungen aus der nginx.conf
entfernen andernfalls wird es mit dem Serverblock, den Sie erstellen werden, durcheinander gebracht.
Aktivieren Sie diese Konfigurationsdatei, indem Sie sie mit sites-enabled
verknüpfen Verzeichnis.
$ sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Öffnen Sie die /etc/nginx/nginx.conf
Datei zum Bearbeiten.
$ sudo nano /etc/nginx/nginx.conf
Fügen Sie die folgenden Zeilen nach der Zeile include /etc/nginx/conf.d/*.conf
ein
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
Ändern Sie den Wert von types_hash_max_size
von 2048 bis 4096.
types_hash_max_size 4096;
Drücken Sie Strg + X um den Editor zu schließen und drücken Sie Y wenn Sie aufgefordert werden, die Datei zu speichern. 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 user=apache
und group=apache
Zeilen in der Datei und ändern Sie sie in 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 geben Sie Y ein 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.php
im html
Ordner.
$ 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 geben Sie Y ein wenn Sie dazu aufgefordert werden.
<?php phpinfo();
Starten Sie http://<yourserverip>/test.php
in Ihrem Webbrowser und Sie sollten Folgendes sehen.
Installieren Sie phpMyAdmin
Das Remi-Repository enthält das neueste phpMyAdmin, sodass wir es einfach mit dem folgenden Befehl installieren können.
$ sudo dnf install phpmyadmin
Es installiert sich selbst in /usr/share/phpMyAdmin
Verzeichnis.
phpMyAdmin konfigurieren
Damit der Nginx-Webserver phpMyAdmin-Dateien korrekt finden und bereitstellen kann, müssen wir einen symbolischen Link von seinem tatsächlichen Speicherort zum Stammdokumentverzeichnis 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 darauf zuzugreifen, öffnen Sie einfach http://example.com/phpmyadmin .
Wenn Sie PHP-Sitzungsfehler erhalten, führen Sie den folgenden Befehl aus, um dem PHP-Sitzungsverzeichnis die richtigen Berechtigungen zu erteilen. Überprüfen Sie Ihren Sitzungspfad aus der test.php
Datei, die wir zuvor erstellt haben. Bei uns ist es unter /var/lib/php/session
.
$ sudo chown -R nginx:nginx /var/lib/php/session
Standardmäßig sollte dieser Standardspeicherort geändert werden, da es der häufigste Speicherort ist, an dem Hacker Ihre phpMyAdmin-Installation finden können. Führen Sie dazu den folgenden Befehl aus.
$ sudo mv phpmyadmin sm123
Grundsätzlich haben wir unseren phpMyAdmin-Standort nach sm123
verschoben Mappe. Um darauf zuzugreifen, müssen Sie nun http://example.com/sm123 öffnen in Ihrem Browser.
Da wir hier unix_authentication mit MySQL verwenden, gibt es keinen Root-Benutzer, um sich über phpMyAdmin anzumelden. Sie müssen zuerst einen MySQL-Benutzer erstellen und ihm Berechtigungen für Datenbanken geben, 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 möchten, können Sie Opcache einfach mit dem folgenden Befehl installieren.
$ sudo dnf install php-opcache
Vergewissern Sie sich, dass 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 Verwendung von Opcache erleichtern und werden im Allgemeinen als gute Leistung empfohlen. Sie können eine Konfiguration aktivieren, indem Sie sie auskommentieren, indem Sie ;
entfernen davor.
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 geben Sie Y ein 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 zuerst das Certbot-Tool.
$ sudo dnf install certbot-nginx
Generieren Sie die Zertifikate.
$ sudo certbot --nginx -d example.com -d www.example.com -d phpmyadmin.example.com
Wir erstellen Zertifikate für beide – unsere Hauptseite und die phpMyAdmin-Domain.
Wenn Sie certbot zum ersten Mal auf Ihrem System ausführen, werden Sie nach einer E-Mail-Adresse gefragt und müssen den Nutzungsbedingungen zustimmen. Sie werden auch gefragt, ob Sie damit einverstanden sind, Daten mit der EFF-Stiftung zu teilen, wozu Sie nein sagen können. Danach kommuniziert certbot mit Let's Encrypt-Servern und führt eine Herausforderung aus, um Ihre Domains zu verifizieren.
Wenn dies erfolgreich ist, werden Sie gefragt, wie mit HTTPS-Umleitungen 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):
Treffen Sie Ihre Auswahl 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, verwenden wir cron.
Wir müssen Cron einen Eintrag hinzufügen, indem wir den Crontab-Editor verwenden. Führen Sie den folgenden Befehl aus, um den Crontab-Editor zu öffnen.
$ 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 bevorzugt.
Fügen Sie unten die folgende Zeile ein.
. . .
25 2 * * * /usr/bin/certbot renew --quiet
Der 25 2 * * *
Ein Teil dieser Zeile bedeutet „den folgenden Befehl jeden Tag um 2:25 Uhr ausführen“. Sie können jederzeit wählen.
Speichern Sie die Datei, indem Sie Strg + X drücken und geben Sie Y ein wenn Sie dazu aufgefordert werden.
Die renew
Der Befehl für Certbot überprüft alle auf dem System installierten Zertifikate und aktualisiert alle Zertifikate, die in weniger als 30 Tagen ablaufen. --quiet
weist 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 dem Erstellen und Hosten Ihrer Websites und Anwendungen beginnen.