Tutorial

So installieren Sie Linux, Nginx, MySQL, PHP (LEMP) Stapel unter CentOS 8

Published on April 15, 2020

Developer Advocate

Deutsch
So installieren Sie Linux, Nginx, MySQL, PHP (LEMP) Stapel unter CentOS 8

Einführung

Der LEMP-Software-Stack ist eine Gruppe von Software, die zur Bereitstellung von dynamischen Webseiten und Webanwendungen verwendet werden kann, die in PHP geschrieben sind. Der Name „LEMP“ ist ein Akronym, das ein Linux-Betriebssystem mit einem Nginx (ausgesprochen wie „Engine-X“) beschreibt. Die Backend-Daten werden in einer MariaDB-Datenbank gespeichert und die dynamische Verarbeitung wird mit PHP ausgeführt.

Die Datenbankschicht in einem LEMP-Stack ist typischerweise ein MySQL-Datenbankserver, aber vor der Freigabe von CentOS 8 war MySQL in den Standard-CentOS-Repositorys nicht verfügbar. Aus diesem Grund wurde MariaDB, eine Abspaltung von MySQL, zur breit akzeptierten Alternative zu MySQL als Standard-Datenbanksystem für LEMP-Stacks auf CentOS-Rechnern. MariaDB dient als vollwertiger Ersatz für den originalen MySQL-Server, was in der Praxis bedeutet, dass Sie zu MariaDB wechseln können, ohne Änderungen an der Konfiguration oder den Codes Ihrer Anwendung vorzunehmen.

In diesem Leitfaden installieren Sie einen LEMP-Stack auf einem CentPO 8-Server. Obwohl MySQL von den Standard-Repositories in CentOS 8 verfügbar ist, beschreibt dieser Leitfaden den Prozess der Einrichtung eines LEMP-Stapels mit MariaDB als Datenbank-Management-System.

Voraussetzungen

Obwohl MySQL über die Standard-Repositorys in CentOS 8 verfügbar ist, beschreibt dieser Leitfaden den Prozess der Einrichtung eines LEMP-Stacks mit MariaDB als Datenbank-Management-System. Um dies einzurichten, können Sie unserem Leitfaden zur Ersteinrichtung des Servers für CentOS 8 folgen.

Schritt 1 – Installation des Nginx-Webservers

Um den Besuchern unserer Website die Webseiten anzuzeigen, stellen wir den leistungsfähigen Webserver Nginx zur Verfügung. Wir verwenden den Paketmamager dnf, den neuen Standard-Paketmanager unter CentOS 8, um diese Software zu installieren.

Installieren Sie das nginx-Paket mit:

  1. sudo dnf install nginx

Geben Sie bei der entsprechenden Aufforderung y ein, um zu bestätigen, dass Sie nginx installieren möchten.

Wenn die Installation abgeschlossen ist, müssen Sie den folgenden Befehl ausführen, um den Server zu aktivieren und zu starten:

  1. sudo systemctl start nginx

Wenn Sie die Firewall firewalld gemäß unserem Leitfaden zur Ersteinrichtung des Servers aktiviert haben, müssen Sie die Verbindungen zu Nginx erlauben. Der folgende Befehl ermöglicht dauerhaft HTTP-Verbindungen, die auf Port 80 standardmäßig ausgeführt werden:

  1. sudo firewall-cmd --permanent --add-service=http

Um zu verifizieren, dass die Änderung angewendet wurde, können Sie Folgendes ausführen:

  1. sudo firewall-cmd --permanent --list-all

Die Ausgabe sieht dann so aus:

Output
public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client http ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

Laden Sie die Firewall-Konfiguration neu, damit die Änderungen wirksam werden:

  1. sudo firewall-cmd --reload

Nachdem die neue Firewall-Regel hinzugefügt wurde, können Sie testen, ob der Server läuft, indem Sie auf die öffentliche IP-Adresse des Servers oder den Domänennamen von Ihrem Web-Browser aus zugreifen.

Anmerkung: Falls Sie DigitalOcean als DNS-Hosting-Anbieter verwenden, konsultieren Sie unsere Produktdokumente für detaillierte Anweisungen, wie Sie einen neuen Domänenamen einrichten und ihn auf Ihren Server verweisen.

Wenn Sie keinen Domänenamen auf den Server verweisen und Sie die öffentliche IP-Adresse Ihres Servers nicht kennen, können Sie diese mit dem folgenden Befehl finden:

  1. ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Hierdurch erhalten Sie einige IP-Adressen. Sie können sie abwechselnd in Ihrem Webbrowser ausprobieren.

Als Alternative können Sie prüfen, welche IP-Adresse von anderen Stellen im Internet aus erreichbar ist:

  1. curl -4 icanhazip.com

Geben Sie die Adresse ein, die Sie in Ihrem Webbrowser erhalten, und Sie werden zur Standard-Startseite von Nginx weitergeleitet:

Standard Nginx Page CentOS 8

Wenn Sie diese Seite sehen, ist Ihr Webserver korrekt installiert.

Schritt 2 – Installation von MariaDB

Nachdem Sie nun einen funktionierenden Webserver eingerichtet haben, müssen Sie ein Datenbanksystem installieren, um Daten für Ihre Website speichern und verwalten zu können. Wir installieren jetzt MariaDB, eine gemeinschaftlich entwickelte Kopie des Original-MySQL-Servers von Oracle.

Um diese Software zu installieren, führen Sie Folgendes aus:

  1. sudo dnf install mariadb-server

Wenn die Installation abgeschlossen ist, aktivieren und starten Sie den MariaDB-Server mit:

  1. sudo systemctl start mariadb

Um die Sicherheit Ihres Datenbank-Servers zu verbessern, wird empfohlen, ein Sicherheitsskript auszuführen, in das MariaDB bereits vorinstalliert ist. Dieses Skript entfernt einige unsichere Standardeinstellungen und sperrt den Zugriff auf Ihr Datenbanksystem. Starten Sie das interaktive Skript, indem Sie Folgendes ausführen:

  1. sudo mysql_secure_installation

Dieses Skript führt Sie durch eine Reihe von Aufforderungen, mit denen Sie verschiedene Änderungen an Ihrem MariaDB-Setup vornehmen können. Mit der ersten Eingabeaufforderung werden Sie aufgefordert, das aktuelle Datenbank-root-Passwort einzugeben. Verwechseln Sie dies nicht mit dem System-root-Benutzer. Der Datenbank-root-Benutzer ist ein administrativer Benutzer mit vollen Berechtigungen über das Datenbank-System. Und weil Sie MariaDB gerade installiert und noch keine Konfigurationsänderungen vorgenommen haben, wird dieses Passwort leer sein, also drücken Sie bei der Eingabeaufforderung einfach die EINGABETASTE.

Bei der nächsten Eingabeaufforderung werden Sie gefragt, ob Sie ein Datenbank-root-Passwort einrichten möchten. Und weil MariaDB eine spezielle Authentifizierungsmethode für den root-Benutzer verwendet, die typischerweise sicherer ist als ein Passwort, müssen Sie das jetzt nicht einrichten. Geben Sie N ein und drücken Sie dann die EINGABETASTE.

Von dort aus können Sie Y drücken und dann die EINGABETASTE und dann die Standardeinstellungen für alle nachfolgenden Fragen akzeptieren. Damit werden anonyme Benutzer und die Testdatenbank entfernt, ferngesteuerte root-Logins deaktiviert und diese neuen Regeln geladen, sodass der Server die Änderungen, die Sie gerade vorgenommen haben, unverzüglich anwendet.

Wenn Sie fertig sind, melden Sie sich bei MariaDB an, indem Sie Folgendes eingeben:

  1. sudo mysql

Damit wird eine Verbindung zum MariaDB-Server als administrativer Datenbank-Benutzer root hergestellt, was durch die Verwendung von sudo abgeleitet wird, wenn dieser Befehl ausgeführt wird. Sie sollten einen Output wie den Folgenden sehen:

Output
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 10.3.17-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>

Beachten Sie, dass Sie kein Passwort bereitstellen mussten, um sich als root-Benutzer zu verbinden. Das funktioniert, weil die standardmäßige Authentifizierungsmethode für den administrativen MariaDB-Benutzer unix_socket ist und nicht password. Auch wenn dies zunächst wie ein Sicherheitsproblem erscheint, macht es den Datenbankserver sicherer, da sich nur die Systembenutzer mit sudo-Privilegien über die Konsole oder über eine Anwendung, die mit den gleichen Privilegien läuft, als MariaDB-root-Benutzer anmelden dürfen. Praktisch bedeutet dies, dass Sie den administrativer Datenbank-root-Benutzer nicht verwenden können, um sich von Ihrer PHP-Anwendung zu verbinden.

Um die Sicherheit zu erhöhen, richten Sie am besten für jede Datenbank zugeordnete Benutzerkonten mit weniger expansiven Berechtigungen ein, insbesondere wenn Sie mehrere Datenbanken auf Ihrem Server hosten möchten. Um eine solche Einrichtung zu demonstrieren, erstellen wir eine Datenbank namens example_database und einen Benutzer namens example_user. Sie können diese Namen jedoch durch andere Werte ersetzen.

Um eine neue Datenbank zu erstellen, führen Sie den folgenden Befehl von Ihrer MariaDB-Konsole aus:

  1. CREATE DATABASE example_database;

Jetzt können Sie einen neuen Benutzer erstellen und ihm volle Berechtigungen auf der benutzerdefinierten Datenbank gewähren, die Sie gerade erstellt haben: Der folgende Befehl definiert das Passwort dieses Benutzers als password, aber Sie sollten diesen Wert durch ein sicheres Passwort Ihrer eigenen Wahl ersetzen:

  1. GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Damit werden dem Benutzer example_user volle Berechtigungen über die example\_database gewährt, während dieser Benutzer gleichzeitig daran gehindert wird, andere Datenbanken auf Ihrem Server zu erstellen oder zu ändern.

Aktualisieren Sie die Berechtigungen (über „flush privileges“), um sicherzustellen, dass sie in der aktuellen Sitzung gespeichert und verfügbar sind:

  1. FLUSH PRIVILEGES;

Beenden Sie daran anschließend die MariaDB Shell:

  1. exit

Sie können testen, ob der neue Benutzer die richtigen Berechtigungen hat, indem Sie sich erneut in die MariaDB-Konsole einloggen, diesmal mit den benutzerdefinierten Anmeldedaten:

  1. mysql -u example_user -p

Beachten Sie das -p-Flag in diesem Befehl, das Sie nach dem Passwort fragt, das Sie bei der Erstellung des Benutzers example_user wählen. Nachdem Sie sich in die MariaDB-Konsole einloggen, bestätigen Sie, dass Sie Zugriff auf die Datenbank example\_database haben:

  1. SHOW DATABASES;

Damit erhalten Sie die folgende Ausgabe:

Output
+--------------------+ | Database | +--------------------+ | example_database | | information_schema | +--------------------+ 2 rows in set (0.000 sec)

Um die MariaDB-Shell zu beenden, geben Sie Folgendes ein:

  1. exit

Jetzt ist Ihr Datenbanksystem eingerichtet und Sie können PHP installieren, den letzte Komponente des LEMP-Stacks.

Schritt 3 – Installation von PHP-FPM

Sie haben Nginx installiert, um Ihre Inhalte bereitzustellen, und MariaDB, um Ihre Daten zu speichern und zu verwalten. Jetzt können Sie PHP installieren, um Code zu verarbeiten und dynamische Inhalte für den Webserver zu generieren.

Während Apache den PHP-Interpreter in jede Anfrage einbindet, benötigt Nginx ein externes Programm, das die PHP-Verarbeitung durchführt und als Brücke zwischen dem PHP-Interpreter selbst und dem Webserver fungiert. Dies ermöglicht eine bessere Gesamtleistung in den meisten PHP-basierten Websites, erfordert jedoch eine zusätzliche Konfiguration. Sie müssen php-fpm installieren, was für „PHP fastCGI-Prozessmanager“ steht, und Nginx anweisen, PHP-Anfragen zur Verarbeitung an diese Software zu übergeben. Außerdem benötigen Sie php-mysqlnd, ein PHP-Modul, das PHP ermöglicht, mit MySQL-basierten Datenbanken zu kommunizieren. Core-PHP-Pakete werden automatisch als Abhängigkeiten installiert.

Um die php-fpm- und php-mysql-Pakete zu installieren, sollten Sie Folgendes ausführen:

  1. sudo dnf install php-fpm php-mysqlnd

Wenn die Installation abgeschlossen ist, müssen Sie die Datei /etc/php-fpm.d/www.conf bearbeiten, um ein paar Einstellungen anzupassen.

Der in CentOS 8 integrierte Standard-Texteditor vi.vi ist ein extrem leistungsfähiger Texteditor, kann jedoch für Nutzer, die wenig Erfahrung mit ihm haben, etwas komplex sein. Sie können bei Bedarf einen benutzerfreundlicheren Editor wie nano installieren, um die Bearbeitung von Konfigurationsdateien auf Ihrem CentOS 8 Server zu erleichtern:

  1. sudo dnf install nano

Öffnen Sie dann die Konfigurationsdatei /etc/php-fpm.d/www.conf mit nano oder Ihrem bevorzugten Textbearbeitungsprogramm:

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

Suchen Sie nach den Anweisungen user und group. Wenn Sie nano verwenden, können Sie auf STRG+W drücken, um nach diesen Begriffen in der offenen Datei zu suchen.

/etc/php-fpm.d/www.conf
…
; 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 = apache
; RPM: Keep a group allowed to write in log dir.
group = apache

Sie werden bemerken, dass sowohl die user- als auch die group-Variablen auf apache gesetzt sind. Das müssen Sie auf nginx ändern:

/etc/php-fpm.d/www.conf
…
; 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 und schließen Sie die Datei, wenn die Bearbeitung abgeschlossen ist. Wenn Sie nano verwenden, drücken Sie STRG+ X, dann Y und die EINGABETASTE.

Zur Aktivierung und zum Start des php-fpm-Dienstes führen Sie Folgendes aus:

  1. sudo systemctl start php-fpm

Starten Sie schließlich den Nginx-Webserver neu, damit er die Konfigurationsdateien lädt, die durch die php-fpm-Installation erstellt wurden:

  1. sudo systemctl restart nginx

Ihr Webserver ist nun voll eingerichtet. Im nächsten Schritt erstellen Sie ein PHP-Testscript, um sicherzustellen, dass alles wie erwartet funktioniert.

Schritt 4 – Testen von PHP mit Nginx

In CentOS 8 erstellt die Standard php-fpm-Installation automatisch Konfigurationsdateien, die Ihrem Nginx-Webserver erlauben, .php-Dateien im Standard-Dokumentstamm zu bearbeiten, der sich unter /usr/share/nginx/html befindet. Sie müssen keine Änderungen der Nginx-Konfiguration vornehmen, damit PHP korrekt in Ihrem Webserver funktioniert.

Ändern Sie lediglich die Standardeinstellungen für Berechtigungen in Ihrem Nginx-Dokummentenstammordner. Auf diese Weise können Sie Dateien in diesem Verzeichnis mit Ihrem regulären Systembenutzer erstellen und ändern, ohne dass Sie jedem Befehl sudo voranstellen müssen.

Der folgende Befehl ändert das Eigentumsrecht des Standard-Nginx-Dokumentenstammes in einen Benutzer und eine Gruppe namens sammy. Achten Sie darauf, den hervorgehobenen Benutzernamen und die Gruppe in diesem Befehl durch diejenigen Ihres Systems zu ersetzen.

  1. sudo chown -R sammy.sammy /usr/share/nginx/html/

Sie erstellen nun eine PHP-Testseite, um sicherzustellen, dass der Webserver wie erwartet funktioniert.

Erstellen Sie eine neue PHP Datei namens info.php im Verzeichnis /usr/share/nginx/html:

  1. nano /usr/share/nginx/html/info.php

Der folgende PHP-Code zeigt Informationen über die aktuelle PHP-Umgebung, die auf dem Server läuft:

/usr/share/nginx/html/info.php
<?php

phpinfo();

Wenn Sie dies abgeschlossen haben, speichern und schließen Sie die Datei.

Jetzt können wir testen, ob unser Web-Server den Inhalt korrekt anzeigt, der durch ein PHP-Skript erstellt wird. Gehen Sie zu Ihrem Browser und greifen Sie auf Ihren Server-Hostnamen oder die IP-Adresse zu, gefolgt von /info.php:

http://server_host_or_IP/info.php

Sie sehen eine Seite sehen, die so ähnlich wie die Folgende aussieht:

CentOS 8 Standard PHP info

Nachdem Sie die relevanten Informationen über Ihren PHP-Server über diese Seite überprüft haben, ist es am besten, die von Ihnen erstellte Datei zu entfernen, da sie sensible Informationen über Ihre PHP-Umgebung und Ihren CentOS-Server enthält. Sie können rm verwenden, um diese Datei zu entfernen:

  1. rm /usr/share/nginx/html/info.php

Sie können diese Datei jederzeit regenerieren, falls Sie sie später benötigen. Als Nächstes testen wir die Datenbankverbindung von der PHP-Seite.

Schritt 5 – Testen der Datenbankverbindung von PHP (optional)

Wenn Sie testen möchten, ob PHP eine Verbindung mit MariaDB herstellen und Datenbankabfragen ausführen kann, können Sie eine Testtabelle mit Pseudodaten erstellen und die Inhalte mit einem PHP-Skript abfragen.

Verbinden Sie sich zuerst mit der MariaDB-Konsole mit dem Datenbankbenutzer, den Sie in Schritt 2 dieses Leitfadens erstellt haben:

  1. mysql -u example_user -p

Erstellen Sie eine Tabelle namens todo_list. Führen Sie die folgende Anweisung von der MariaDB-Konsole aus:

CREATE TABLE example_database.todo_list (
	item_id INT AUTO_INCREMENT,
	content VARCHAR(255),
	PRIMARY KEY(item_id)
);

Geben Sie nun einige Zeilen an Inhalt in die Testtabelle ein. Sie können den nächsten Befehl ein paar Mal wiederholen, indem Sie verschiedene Werte verwenden:

  1. INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

Um zu bestätigen, dass die Daten erfolgreich in Ihrer Tabelle gespeichert wurden, führen Sie Folgendes aus:

  1. SELECT * FROM example_database.todo_list;

Sie sehen die folgende Ausgabe:

Output
+---------+--------------------------+ | item_id | content | +---------+--------------------------+ | 1 | My first important item | | 2 | My second important item | | 3 | My third important item | | 4 | and this one more thing | +---------+--------------------------+ 4 rows in set (0.000 sec)

Nachdem Sie bestätigt haben, dass Sie gültige Daten in Ihrer Testtabelle haben, können Sie die MariaDB-Konsole verlassen:

  1. exit

Sie können nun das PHP-Skript erstellen, das sich mit MariaDB verbindet und Ihre Inhalte abfragen. Erstellen Sie mit Ihrem bevorzugten Editor eine neue PHP-Datei in Ihrem benutzerdefinierten Web-Stammverzeichnis. Verwenden Sie hierzu nano:

  1. nano /usr/share/nginx/html/todo_list.php

Fügen Sie Ihrem PHP-Skript den folgenden Inhalt hinzu:

/usr/share/nginx/html/todo_list.php
<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";

try {
  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
  echo "<h2>TODO</h2><ol>";
  foreach($db->query("SELECT content FROM $table") as $row) {
    echo "<li>" . $row['content'] . "</li>";
  }
  echo "</ol>";
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

Speichern und schließen Sie die Datei, wenn die Bearbeitung abgeschlossen ist.

Sie können diese Seite jetzt in Ihrem Webbrowser aufrufen, indem Sie den Hostnamen oder die öffentliche IP-Adresse Ihres Servers aufrufen, gefolgt von /todo_list.php:

http://server_host_or_IP/todo_list.php

Sie sollten nun eine Seite ähnlich wie diese sehen, die den Inhalt anzeigt, den Sie in Ihre Testtabelle eingefügt haben:

Beispiel PHP todo list

Das bedeutet, dass Ihre PHP-Umgebung zur Verfügung steht, um mit Ihrem MariaDB-Server zu interagieren.

Zusammenfassung

In diesem Leitfaden haben Sie eine flexible Grundlage für die Bereitstellung von PHP-Websites und -Anwendungen für Ihre Besucher unter Verwendung von Nginx als Webserver erstellt. Sie haben Nginx eingerichtet, um PHP-Anfragen über php-fpm zu bearbeiten, sowie eine MariaDB-Datenbank zur Speicherung Ihrer Website-Daten erstellt.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors
Default avatar

Developer Advocate

Dev/Ops passionate about open source, PHP, and Linux.

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.