Installieren und Konfigurieren eines LEMP-Stacks mithilfe von Softwaresammlungen unter CentOS 7

Der Autor hat dieApache Software Foundation ausgewählt, um im Rahmen desWrite for DOnations-Programms eine Spende in Höhe von 100 USD zu erhalten.

Einführung

Ein LEMP-Software-Stack ist eine Gruppe von Open Source-Software, die normalerweise zusammen installiert wird, damit ein Server dynamische Websites und Webanwendungen hosten kann. Dieser Begriff ist eigentlich ein Akronym, das dasLinux-Betriebssystem mit demENginx-Webserver (der die Apache-Komponente eines LAMP-Stacks ersetzt) ​​darstellt. Die Site-Daten werden in einerMySQL-Datenbank (unter Verwendung von MariaDB) gespeichert, und dynamischer Inhalt wird vonPHP verarbeitet.

Die LEMP-Stack-Komponenten werden manchmal mit CentOS 7EPEL repository installiert. Dieses Repository enthält jedoch veraltete Pakete. Beispielsweise können Sie keine Version von PHP höher als 5.4.16 von EPEL installieren, obwohl diese Versionfor a long time nicht unterstützt wurde. Um die neueren Softwareversionen zu erhalten, wird empfohlen, Softwaresammlungen zu verwenden, die auch als SCLs bezeichnet werden. SCLs sind von RedHat bereitgestellte Sammlungen von Entwicklerressourcen, mit denen Sie mehrere Softwareversionen auf demselben System verwenden können, ohne zuvor installierte Pakete zu beeinträchtigen.

In diesem Handbuch installieren Sie einen LEMP-Stack auf einem CentOS 7-Server. Das CentOS-Betriebssystem kümmert sich um die Linux-Komponente. Sie installieren den Rest der Komponenten über das Software Collections-Repository und konfigurieren sie dann für die Bereitstellung einer einfachen Webseite.

Voraussetzungen

Bevor Sie mit diesem Lernprogramm beginnen, sollten Sie den CentOS 7-Server so einrichten, dass Siethe CentOS 7 initial server setup guide folgen, einschließlich eines Sudo-Nicht-Root-Benutzers.

[[Schritt 1 - Aktivieren des Software-Sammlungs-Repository]] == Schritt 1 - Aktivieren des Software-Sammlungs-Repositorys

Um Zugriff auf SCLs für CentOS zu erhalten, installieren Sie die Release-Datei von CentOS Linux Software Collections:

sudo yum install centos-release-scl

Zeigen Sie die Liste der verfügbaren SCL-Pakete mit dem folgenden Befehl an:

yum --disablerepo='*' --enablerepo='centos-sclo-rh' --enablerepo='centos-sclo-sclo' list available

Um systemweite Konflikte zu vermeiden, werden SCL-Pakete im Verzeichnis/opt/rhinstalliert. Auf diese Weise können Sie beispielsweise Python 3.5 auf einem CentOS 7-Computer installieren, ohne Python 2.7 zu entfernen oder zu beeinträchtigen.

Alle Konfigurationsdateien für SCL-Pakete werden im entsprechenden Verzeichnis im Verzeichnis/etc/opt/rh/gespeichert. SCL-Pakete bieten Shell-Skripte, die die Umgebungsvariablen definieren, die für die Verwendung der enthaltenen Anwendungen erforderlich sind, z. B.PATH,LD_LIBRARY_PATH undMANPATH. Diese Skripte werden im Dateisystem als/opt/rh/package-name/enable gespeichert.

Jetzt können Sie mit der Installation der in diesem Handbuch beschriebenen Pakete beginnen.

[[Schritt 2 - Installation des Nginx-Webservers]] == Schritt 2 - Installation des Nginx-Webservers

Um Webseiten für Besucher darzustellen, setzen wir Nginx ein, einen modernen, effizienten Webserver.

Installieren Sie Nginx mit dem folgenden Befehlyum. Stellen Sie sicher, dass Sie den hervorgehobenen Wert durch die Version von Nginx ersetzen, die Sie installieren möchten. Die neueste Version hat die höchste Nummer im Paketnamen (112 zum Zeitpunkt des Schreibens):

sudo yum install rh-nginx112

Starten Sie nach Abschluss der Installation den Nginx-Dienst:

sudo systemctl start rh-nginx112-nginx

Bestätigen Sie, dass Nginx ausgeführt wird, indem Sie den Befehlsystemctl statuseingeben:

sudo systemctl status rh-nginx112-nginx
Output● rh-nginx112-nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/rh-nginx112-nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2018-03-19 15:15:43 UTC; 1min 17s ago
 Main PID: 10556 (nginx)
   CGroup: /system.slice/rh-nginx112-nginx.service
           ├─10556 nginx: master process /opt/rh/rh-nginx112/root/usr/sbin/nginx
           ├─10557 nginx: worker process
           └─10558 nginx: worker process

Mar 19 15:15:43 lemp-centos-222 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: the configuration file /etc/opt/rh/rh-nginx... ok
Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: configuration file /etc/opt/rh/rh-nginx112/...ful
Mar 19 15:15:43 lemp-centos-222 systemd[1]: Started The nginx HTTP and reverse proxy server.
Hint: Some lines were ellipsized, use -l to show in full.

Zu diesem Zeitpunkt ist Ihr Server möglicherweise für nicht autorisierten Zugriff durch nicht autorisierte Benutzer anfällig. Um dies zu beheben, richten Sie eine Firewall mit firewalld ein. Möglicherweise müssen Sie zuerst firewalld installieren. Dies kann mit dem folgenden Befehl erfolgen:

sudo yum install firewalld

Starten Sie dann den Firewall-Dienst:

sudo systemctl start firewalld

Fügen Sie als Nächstes einige Firewall-Regeln hinzu, um SSH-Zugriff auf Ihren Server sowie HTTP- und HTTPS-Verbindungen zu Nginx zuzulassen:

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

Laden Sie firewalld neu, um die neuen Firewall-Regeln zu implementieren:

sudo firewall-cmd --reload

Weitere Informationen zu firewalld inHow To Set Up a Firewall Using FirewallD on CentOS 7.

Mit diesen neuen Firewall-Regeln können Sie testen, ob der Server in Betrieb ist, indem Sie in Ihrem Webbrowser auf den Domänennamen oder die öffentliche IP-Adresse Ihres Servers zugreifen.

Wenn auf Ihrem Server kein Domainname angezeigt wird und Sie die öffentliche IP-Adresse Ihres Servers nicht kennen, geben Sie Folgendes in Ihr Terminal ein:

curl -4 icanhazip.com

Geben Sie die resultierende IP-Adresse in die Adressleiste Ihres Webbrowsers ein und Sie sollten die Standard-Zielseite von Nginx sehen:

http://server_domain_or_IP

Nginx default page

Wenn Sie diese Seite sehen, haben Sie Nginx erfolgreich installiert. Bevor Sie fortfahren, aktivieren Sie Nginx mit dem folgenden Befehl, um beim Booten zu beginnen:

sudo systemctl enable rh-nginx112-nginx

Der Nginx-Server ist jetzt installiert, und Sie können mit der Installation der MariaDB-Datenbanksoftware fortfahren.

[[Schritt 3 - Installieren von Mariadb zum Verwalten von Site-Daten] == Schritt 3 - Installieren von MariaDB zum Verwalten von Site-Daten

Nachdem wir nun einen Webserver haben, ist es an der Zeit, MariaDB, einen Drop-In-Ersatz für MySQL, zu installieren, um die Daten für Ihre Site zu speichern und zu verwalten.

Installieren Sie MariaDB mit dem folgenden Befehl. Ersetzen Sie den hervorgehobenen Wert erneut durch die Versionsnummer, die Sie installieren möchten. Die höchste Nummer ist die neueste verfügbare Version (102 zum Zeitpunkt des Schreibens):

sudo yum install rh-mariadb102

Starten Sie nach Abschluss der Installation den MariaDB-Dienst mit dem folgenden Befehl:

sudo systemctl start rh-mariadb102-mariadb

Damit ist MariaDB installiert und läuft. Die Konfiguration ist jedoch noch nicht abgeschlossen.

Um die Installation zu sichern, wird MariaDB mit einem Sicherheitsskript geliefert, das Sie auffordert, einige unsichere Standardeinstellungen zu ändern. Führen Sie das Skript aus, indem Sie Folgendes eingeben:

source /opt/rh/rh-mariadb102/enable
mysql_secure_installation

In der Eingabeaufforderung werden Sie nach Ihrem aktuellen Root-Passwort gefragt. Da Sie gerade MySQL installiert haben, haben Sie höchstwahrscheinlich keine. Lassen Sie es also leer, indem SieENTER drücken. Anschließend werden Sie gefragt, ob Sie ein Root-Passwort festlegen möchten. Geben SieY ein und befolgen Sie die Anweisungen:

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

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

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

Drücken Sie für den Rest der Fragen die TasteENTER durch jede Eingabeaufforderung, um die Standardwerte zu akzeptieren. Dadurch werden einige anonyme Benutzer und die Testdatenbank entfernt, Remote-Root-Anmeldungen deaktiviert und diese neuen Regeln geladen, sodass MariaDB die vorgenommenen Änderungen sofort umsetzt.

Als letztes muss MariaDB beim Booten gestartet werden. Verwenden Sie dazu den folgenden Befehl:

sudo systemctl enable rh-mariadb102-mariadb

Jetzt ist Ihr Datenbanksystem eingerichtet und Sie können mit der Einrichtung von PHP auf Ihrem Server fortfahren.

[[Schritt 4 - Installieren und Konfigurieren von PHP für die Verarbeitung] == Schritt 4 - Installieren und Konfigurieren von PHP für die Verarbeitung

Sie haben jetzt Nginx installiert, um Ihre Seiten bereitzustellen, und MariaDB, um Ihre Daten zu speichern und zu verwalten. Es ist jedoch noch nichts installiert, das dynamische Inhalte erzeugen könnte. Hier kommt PHP ins Spiel.

Da Nginx keine native PHP-Verarbeitung wie einige andere Webserver enthält, müssen Siephp-fpm installieren, was für "fastCGI process manager" steht. Später werden Sie Nginx so konfigurieren, dass PHP-Anforderungen zur Verarbeitung an diese Software weitergeleitet werden.

Installieren Sie dieses Modul und holen Sie sich ein Hilfspaket, mit dem PHP mit Ihrem Datenbank-Backend kommunizieren kann. Bei der Installation werden die erforderlichen PHP-Kerndateien abgerufen. Tun Sie dies, indem Sie Folgendes eingeben:

sudo yum install rh-php71-php-fpm rh-php71-php-mysqlnd

Ihre PHP-Komponenten sind jetzt installiert, aber es gibt eine kleine Konfigurationsänderung, die Sie vornehmen sollten, um die Sicherheit Ihres Setups zu verbessern.

Öffnen Sie die Hauptkonfigurationsdatei vonphp.inimit den Berechtigungen vonroot:

sudo vi /etc/opt/rh/rh-php71/php.ini

Suchen Sie in dieser Datei nach dem Parameter, dercgi.fix_pathinfo setzt. Dies wird mit einem Semikolon (;) auskommentiert und standardmäßig auf „1“ gesetzt.

Dies ist eine extrem unsichere Einstellung, da PHP aufgefordert wird, die nächstgelegene Datei auszuführen, die es finden kann, wenn die angeforderte PHP-Datei nicht gefunden werden kann. Auf diese Weise können Benutzer PHP-Anforderungen so erstellen, dass sie Skripts ausführen können, die sie nicht ausführen dürfen.

Ändern Sie diese beiden Bedingungen, indem Sie die Zeile auskommentieren und wie folgt auf "0" setzen:

71/php.ini’>/etc/opt/rh/rh-php71/php.ini

cgi.fix_pathinfo=0

Speichern und schließen Sie die Datei, wenn Sie fertig sind (drücken SieESC, geben Sie:wq ein und drücken Sie dannEnter).

Öffnen Sie als Nächstes die Konfigurationsdateiwww.conf von php-fpm:

sudo vi /etc/opt/rh/rh-php71/php-fpm.d/www.conf

Standardmäßig ist diese Datei für die Arbeit mit dem Apache-Server konfiguriert. Da auf Ihrem Server Nginx installiert ist, suchen Sie die Zeilen, in denenuser undgroup festgelegt sind, und ändern Sie ihre Werte von "Apache" in "Nginx":

71/php-fpm.d/www.conf’>/etc/opt/rh/rh-php71/php-fpm.d/www.conf

user = nginx
group = nginx

Speichern und schließen Sie dann die Datei.

Starten Sie als Nächstes Ihren PHP-Prozessor, indem Sie Folgendes eingeben:

sudo systemctl start rh-php71-php-fpm

Dann aktivieren Sie php-fpm, um beim Booten zu starten:

sudo systemctl enable rh-php71-php-fpm

Damit haben Sie PHP erfolgreich auf Ihrem Server installiert. Es muss jedoch für die Verwendung mit der anderen installierten Software konfiguriert sein, damit Ihr Server den Inhalt Ihrer Site korrekt bereitstellen kann.

[[Schritt-5 - Konfigurieren von Nginx zur Verwendung des PHP-Prozessors]] == Schritt 5 - Konfigurieren von Nginx zur Verwendung des PHP-Prozessors

Zu diesem Zeitpunkt sind alle erforderlichen Komponenten eines LEMP-Stacks installiert. Die einzige Konfigurationsänderung, die Sie noch vornehmen müssen, besteht darin, Nginx anzuweisen, Ihren PHP-Prozessor für dynamische Inhalte zu verwenden.

Diese Konfigurationsänderung wird auf Serverblockebene vorgenommen (Serverblöcke ähneln den virtuellen Apache-Hosts). Öffnen Sie die Standardkonfigurationsdatei für den Nginx-Serverblock, indem Sie Folgendes eingeben:

sudo vi /etc/opt/rh/rh-nginx112/nginx/nginx.conf

Kommentieren Sie denlocation ~ \.php$-Block (das Segment der Datei, das PHP-Anforderungen verarbeitet, das sich imserver-Block befindet) und seinen Inhalt aus, indem Sie die Pfund-Symbole (#) am Anfang jeder Zeile entfernen. Sie müssen auch die Optionfastcgi_param aufSCRIPT FILENAME $document_root$fastcgi_script_name aktualisieren. Dadurch wird PHP über den Speicherort des Dokumentstamms informiert, in dem sich zu verarbeitende Dateien befinden.

Nach den erforderlichen Änderungen sieht der Blockserverfolgendermaßen aus:

/etc/nginx/sites-available/default

...
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    root         /opt/rh/rh-nginx112/root/usr/share/nginx/html;

    # Load configuration files for the default server block.
    include      /etc/opt/rh/rh-nginx112/nginx/default.d/*.conf;

    location / {
    }

    error_page 404 /404.html;
    location = /40x.html {
    }

    error_page 500 502 503 504  /50x.html;
    location = /50x.html {
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}
...

Wenn Sie die Änderungen vorgenommen haben, können Sie die Datei speichern und den Editor beenden.

Testen Sie als Nächstes Ihre Konfigurationsdatei auf Syntaxfehler, indem Sie die folgenden Befehle ausführen:

source /opt/rh/rh-nginx112/enable
sudo nginx -t

Wenn Fehler gemeldet werden, überprüfen Sie Ihre Datei erneut, bevor Sie fortfahren.

Sobald Ihre Konfigurationsdatei gültig ist, laden Sie Nginx neu, um die vorgenommenen Änderungen zu implementieren:

sudo systemctl reload rh-nginx112-nginx

Nachdem Nginx, PHP und MariaDB installiert und konfiguriert wurden, müssen Sie nur noch bestätigen, dass die LEMP-Stapelkonfiguration den Besuchern Ihrer Site Inhalte korrekt bereitstellen kann.

[[Schritt-6 - Erstellen einer PHP-Datei zum Testen der Konfiguration]] == Schritt 6 - Erstellen einer PHP-Datei zum Testen der Konfiguration

Ihr LEMP-Stack ist jetzt vollständig eingerichtet und Sie können ihn testen, um zu überprüfen, ob Nginx.php-Dateien korrekt an Ihren PHP-Prozessor übergeben kann. Dazu erstellen Sie eine Test-PHP-Datei in unserem Dokumentenstamm.

Öffnen Sie eine neue Datei mit dem Nameninfo.php im Dokumentstamm:

sudo vi /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

Fügen Sie der neuen Datei die folgende Zeile hinzu. Dies ist ein gültiger PHP-Code, der Informationen zu Ihrem Server zurückgibt:

112/root/usr/share/nginx/html/info.php’>/opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

Wenn Sie fertig sind, speichern und schließen Sie die Datei. Besuchen Sie diese Seite in Ihrem Webbrowser, indem Sie den Domainnamen oder die öffentliche IP-Adresse Ihres Servers gefolgt von/info.php aufrufen:

http://server_domain_or_IP/info.php

Sie sehen eine von PHP generierte Webseite mit Informationen zu Ihrem Server:

PHP page info

Wenn Sie eine Seite sehen, die so aussieht, haben Sie die PHP-Verarbeitung mit Nginx erfolgreich eingerichtet.

Nachdem Sie sichergestellt haben, dass Nginx die Seite korrekt wiedergibt, entfernen Sie am besten die von Ihnen erstellte Datei, da sie nicht autorisierten Benutzern Hinweise zu Ihrer Konfiguration geben kann, die ihnen beim Versuch helfen können, einzudringen. Sie können diese Datei jederzeit neu generieren, wenn Sie sie später benötigen.

Entfernen Sie die Datei, indem Sie Folgendes eingeben:

sudo rm /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

Damit haben Sie bestätigt, dass alle Komponenten des LEMP-Stacks korrekt auf Ihrem Server installiert und konfiguriert sind.

Fazit

Sie haben jetzt einen vollständig konfigurierten LEMP-Stack auf Ihrem CentOS 7-Server. Dies gibt Ihnen eine sehr flexible Grundlage für die Bereitstellung von Webinhalten für Ihre Besucher.

SCLs werden auch verwendet, um verschiedene Softwareversionen zu installieren und zwischen ihnen zu wechseln. Sie können die Liste aller auf dem System installierten Sammlungen anzeigen, indem Sie Folgendes ausführen:

scl --list

Bei Interesse finden Sie weitere Informationen zu Software-Sammlungen unterofficial site.