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/rh
installiert. 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 status
eingeben:
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
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.ini
mit 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 Blockserver
folgendermaß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:
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.