Apache2 oder Nginx, PHP und MySQL, MariaDB oder PostgreSQL – Der große Praxis-Guide
In der heutigen digitalen Welt ist es für viele Projekte unerlässlich, einen eigenen Webserver zu betreiben. Egal, ob du einen Blog, ein CMS wie WordPress, eine eigene Anwendung oder einen kleinen Shop aufsetzen möchtest: Ein Webserver mit PHP und einer passenden Datenbank ist meist die Basis. In diesem Artikel zeige ich dir, wie du wahlweise Apache2 oder Nginx als Webserver und wahlweise MySQL, MariaDB oder PostgreSQL als Datenbank installierst – und das alles so, dass du als User einfach damit arbeiten kannst.
Diese Anleitung ist nur für eine Test-Umgebung im lokalen Netzwerk gedacht, nicht für eine Installation auf einem produktiven Server!
1. Die Komponenten im Überblick: Was brauchst du eigentlich?
a) Apache2 – Der Allrounder
Apache2 ist der älteste und am weitesten verbreitete Webserver der Welt.
Vorteile:
-
Sehr flexibel, viele Module
-
Riesige Community, viele Anleitungen
-
Fast alle Webanwendungen laufen „out of the box“
Nachteile:
-
Standardmäßig nicht so schnell wie Nginx
-
Etwas komplexere Konfiguration bei sehr hohen Lasten
b) Nginx – Der flinke Neue
Nginx (sprich: „Engine-X“) ist bekannt für seine Geschwindigkeit und Effizienz bei statischen Inhalten, wird aber auch als Reverse-Proxy und Application-Server genutzt.
Vorteile:
-
Sehr schnell, geringer Speicherverbrauch
-
Perfekt als Reverse Proxy
-
Statische Inhalte werden blitzschnell ausgeliefert
Nachteile:
-
Konfiguration für PHP/CGI ein wenig komplizierter (nutzt meist PHP-FPM)
-
Weniger .htaccess-Features (die viele aus Apache kennen)
c) PHP – Die Skriptsprache für Webanwendungen
PHP ist DIE Sprache für klassische dynamische Webseiten (WordPress, Joomla, Drupal etc.).
Es gibt viele Module, die für Datenbankanbindung, Uploads, Mail, uvm. gebraucht werden.
d) MySQL, MariaDB und PostgreSQL – Die Datenbanken
-
MySQL: Klassiker, weit verbreitet, besonders im LAMP-Stack (Linux, Apache, MySQL, PHP)
-
MariaDB: Fork von MySQL, schneller Release-Zyklus, vollständig Open Source, drop-in Replacement
-
PostgreSQL: Besonders leistungsfähig und „enterprise-tauglich“, ACID-konform, bietet Features wie JSON, räumliche Daten, Window-Functions
Vorteile von MySQL/MariaDB:
-
Sehr einfach, zuverlässig, breite Unterstützung
Nachteile: -
Teilweise weniger Features als PostgreSQL (z.B. bei komplexen Abfragen)
Vorteile von PostgreSQL:
-
Extrem leistungsfähig, komplexe Datenmodelle, viele Features
Nachteile: -
Anfangs komplexer, nicht immer von jedem CMS unterstützt
2. Schritt-für-Schritt: Installation und Konfiguration
Die folgenden Befehle funktionieren auf Ubuntu 22.04/24.04 und Debian 12. Für andere Distributionen ggf. leicht anpassen!
a) System vorbereiten
sudo apt update sudo apt upgrade
b) Apache2 oder Nginx installieren
Apache2:
sudo apt install apache2
Starte und aktiviere Apache:
sudo systemctl enable apache2 sudo systemctl start apache2
Test: Öffne http://localhost/
im Browser. Du solltest die Apache-Startseite sehen.
Nginx:
sudo apt install nginx
Starte und aktiviere Nginx:
sudo systemctl enable nginx sudo systemctl start nginx
Test: Öffne http://localhost/
. Es erscheint die Nginx-Default-Page.
c) PHP und wichtige Module installieren
sudo apt install php libapache2-mod-php php-cli php-mysql php-pgsql php-sqlite3 php-xml php-gd php-curl php-zip php-mbstring php-intl php-ldap php-xmlrpc php-soap php-bcmath php-redis php-imagick
Für Nginx (nutzt PHP-FPM):
sudo apt install php-fpm php-cli php-mysql php-pgsql php-sqlite3 php-xml php-gd php-curl php-zip php-mbstring php-intl php-ldap php-xmlrpc php-soap php-bcmath php-redis php-imagick
Erläuterung der wichtigsten PHP-Module:
-
php-mysql, php-pgsql, php-sqlite3: Datenbankanbindung (je nach gewählter DB)
-
php-gd, php-imagick: Bildbearbeitung, Thumbnails
-
php-curl: HTTP-Anfragen aus PHP heraus
-
php-xml, php-xmlrpc: XML-Verarbeitung
-
php-zip: ZIP-Archive
-
php-mbstring, php-intl: Zeichenkodierung, Mehrsprachigkeit
-
php-bcmath: Mathematische Operationen mit großen Zahlen
-
php-soap: SOAP-Webdienste
-
php-redis: Anbindung an Redis-Server (Caching)
-
php-ldap: Anbindung an LDAP-Verzeichnisse
d) Datenbank wählen und installieren
MySQL:
sudo apt install mysql-server
Starte und sichere MySQL:
sudo systemctl enable mysql sudo systemctl start mysql
Mit dem Befeh
sudo mysql_secure_installation
konfigurierst du bei MySQL und MariaDB auf Linux schnell und sicher die wichtigsten Grundeinstellungen deiner Datenbank – speziell in Bezug auf Sicherheit.
Hier ist eine Übersicht, was du mit diesem Tool einstellst:
1. Root-Passwort setzen oder ändern
-
Frage: „Would you like to setup VALIDATE PASSWORD component?“
→ Hier kannst du wählen, ob ein Passwort-Prüfmodul genutzt werden soll (optional). -
Frage: „Please set the password for root here.“
→ Hier setzt du das Passwort für den Datenbank-Benutzerroot
(nicht zu verwechseln mit dem System-root!).
2. Unsichere Benutzer entfernen
-
Remove anonymous users:
→ Löscht alle Datenbank-User ohne Benutzernamen, die standardmäßig angelegt sind.
3. Root-Login beschränken
-
Disallow root login remotely:
→ Verhindert, dass sich der MySQL-root-Benutzer von anderen Rechnern aus anmelden kann (empfohlen für Server!).
4. Test-Datenbank löschen
-
Remove test database and access to it:
→ Löscht die „test“-Datenbank, die für jeden Benutzer offen ist – sie wird selten gebraucht, aber kann ein Sicherheitsrisiko sein.
5. Rechte neu laden
-
Reload privilege tables now?:
→ Aktiviert alle vorgenommenen Änderungen sofort.
Ablauf als Beispiel (interaktive Fragen):
Securing the MySQL server deployment. VALIDATE PASSWORD COMPONENT can be used to test passwords... Press y|Y for Yes, any other key for No: Y Please set the password for root here. New password: ****** Re-enter new password: ****** Remove anonymous users? (Press y|Y for Yes): Y Disallow root login remotely? (Press y|Y for Yes): Y Remove test database and access to it? (Press y|Y for Yes): Y Reload privilege tables now? (Press y|Y for Yes): Y
Mit mysql_secure_installation
konfigurierst du sehr schnell die wichtigsten Sicherheits- und Hygiene-Einstellungen einer MySQL- oder MariaDB-Instanz. Du solltest dieses Tool nach jeder Neuinstallation einmal ausführen!
MariaDB:
sudo apt install mariadb-server
Starte und sichere MariaDB:
sudo systemctl enable mariadb sudo systemctl start mariadb sudo mysql_secure_installation
Hinweis: mysql
-Kommandos funktionieren für MariaDB identisch.
PostgreSQL:
udo apt install postgresql postgresql-contrib
Starte und aktiviere:
sudo systemctl enable postgresql sudo systemctl start postgresql
Mit der Datenbank arbeiten:
sudo -u postgres psql
3. Schreibrechte & SetGID auf /var/www/html setzen
Standardmäßig gehört /var/www/html
dem User root
und der Gruppe www-data
. Damit dein angemeldeter User Schreibrechte hat und Dateien im richtigen Kontext erstellt werden, gehst du so vor (ersetze username
durch deinen Login):
sudo chown -R username:www-data /var/www/html sudo chmod -R 2775 /var/www/html
Wichtig:
-
Das
2
vorne im Modus (2775
) setzt das SetGID-Bit für das Verzeichnis. -
Neue Dateien/Ordner in
/var/www/html
gehören dann automatisch der Gruppewww-data
und sind schreibbar für User & Gruppe.
4. PHP für Apache2 oder Nginx konfigurieren
Apache2: Funktioniert nach Installation und Neustart direkt mit PHP!
sudo systemctl restart apache2
Teste mit einer info.php
:
echo '<?php phpinfo(); ?>' | sudo tee /var/www/html/info.php
Rufe http://localhost/info.php
im Browser auf.
Nginx: Du musst PHP-FPM einbinden. Öffne z.B. die Default-Site:
sudo nano /etc/nginx/sites-available/default
Füge im server
-Block folgendes hinzu (falls noch nicht vorhanden):
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.3-fpm.sock; # Version anpassen! }
Speichern, schließen, dann Nginx neu laden:
sudo systemctl reload nginx
Auch hier mit info.php
testen.
5. Zusatz: Datenbank anlegen und Benutzer vergeben
MySQL/MariaDB:
CREATE DATABASE meine_datenbank; CREATE USER 'meinuser'@'localhost' IDENTIFIED BY 'meinpasswort'; GRANT ALL PRIVILEGES ON meine_datenbank.* TO 'meinuser'@'localhost'; FLUSH PRIVILEGES;
PostgreSQL:
sudo -u postgres psql
Im psql-Promt:
CREATE DATABASE meine_datenbank; CREATE USER meinuser WITH ENCRYPTED PASSWORD 'meinpasswort'; GRANT ALL PRIVILEGES ON DATABASE meine_datenbank TO meinuser; \q
6. Vor- und Nachteile im Überblick
Apache2
+ Maximale Kompatibilität, riesige Community, .htaccess
– Weniger performant für statische Dateien, komplexer bei hoher Last
Nginx
+ Sehr schnell, niedrige RAM-Belastung, super als Proxy
– Keine .htaccess, PHP-Integration komplexer, weniger für .htaccess‑basierte Anwendungen
MySQL
+ Einfache Bedienung, viele Anleitungen
– Weniger Features als PostgreSQL, Teilweise proprietäre Tools
MariaDB
+ 100% Open Source, schneller Release-Zyklus, MySQL-kompatibel
– Manchmal Inkompatibilitäten bei exotischen Features
PostgreSQL
+ „Enterprise“-Features, sehr robust, für komplexe Abfragen und große Projekte
– Anfangs mehr Einarbeitung, komplexer Einstieg
7. Tipps für den Alltag
-
Backups! Lege regelmäßige Datenbank- und Webspace-Backups an.
-
Rechte! Prüfe die Rechte, besonders bei gemeinsam genutzten Servern.
-
Updates! Halte dein System und die Software aktuell (
sudo apt upgrade
). -
Sicherheit! Setze sichere Passwörter und beschränke Datenbank-Zugriffe möglichst auf „localhost“.
8. Zusammenfassung: Der schnellste Weg
Hier nochmal als Kurz-Checkliste für Apache2+PHP+MariaDB:
sudo apt update sudo apt install apache2 php libapache2-mod-php php-mysql mariadb-server sudo systemctl enable apache2 mariadb sudo systemctl start apache2 mariadb sudo chown -R $USER:www-data /var/www/html sudo chmod -R 2775 /var/www/html
Für Nginx + PHP-FPM + PostgreSQL (analog anpassen):
sudo apt update sudo apt install nginx php-fpm php-pgsql postgresql sudo systemctl enable nginx postgresql sudo systemctl start nginx postgresql sudo chown -R $USER:www-data /var/www/html sudo chmod -R 2775 /var/www/html
9. Fazit
Mit diesen Anleitungen und Hintergrundinfos kannst du einen modernen Webserver auf Linux nach deinem Geschmack und deinen Projektanforderungen aufsetzen. Egal ob Apache2 oder Nginx, MySQL, MariaDB oder PostgreSQL: Die Open-Source-Landschaft bietet dir maximale Flexibilität und Kontrolle – du musst nur noch starten!