WordPress nativ auf Ubuntu installieren: LAMP-Stack mit Apache, MariaDB und PHP-FPM (ohne Docker)
WordPress nativ auf Ubuntu 24.04 LTS installieren: Apache 2.4, PHP 8.3-FPM mit korrekter Modulliste, MariaDB 10.11, wp-config.php mit frischen Salts, Let's Encrypt, UFW und System-Cron, ohne Docker und mit Prüfschritten.
Geprüft am 30.09.2026 · für wordpress 7.1.2
WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Ein klassischer LAMP-Stack direkt auf dem Host bietet für WordPress weniger Abstraktionsschichten, einfacheres Debugging und volle Kontrolle über die PHP-Konfiguration. Diese Anleitung zeigt, wie Sie WordPress (Stand September 2026: Version 7.1.2) auf Ubuntu 24.04 LTS mit Apache 2.4, MariaDB 10.11 LTS und PHP 8.3-FPM installieren, ohne Docker, mit TLS über Let's Encrypt und UFW-Firewall.
Voraussetzungen
- Ubuntu 24.04 LTS Server – frische Installation empfohlen, mindestens 1 GB RAM und 10 GB freier Speicher
- Root- oder
sudo-Zugang per SSH - Registrierter Domainname (z. B.
example.com) – der DNS-A-Record muss bereits auf die Server-IP zeigen, bevor Siecertbotaufrufen - Internetverbindung des Servers (für
apt, wordpress.org-Download und Let's Encrypt) - Kein laufender Webserver oder Port-80-Dienst auf dem Server
| Komponente | Minimum (offiziell) | Empfohlen (wordpress.org) | Ubuntu-24.04-Paket |
|---|---|---|---|
| WordPress | – | aktuelle Version (7.1.2, September 2026) | manuell (Tarball) |
| PHP | 7.4 (EOL) | 8.3+ | php8.3-fpm |
| MariaDB | – | 10.11 oder neuer | mariadb-server (10.11) |
| Apache | 2.4 | 2.4 | apache2 |
| Ubuntu | – | 24.04 LTS (diese Anleitung) | – |
Schritt 1: System aktualisieren
Bringen Sie das System vor der Installation auf den aktuellen Stand:
sudo apt update && sudo apt upgrade -yVerifizieren: Der Befehl endet ohne Fehler. lsb_release -a zeigt Ubuntu 24.04.
Schritt 2: Apache, PHP 8.3-FPM und alle PHP-Module installieren
Pflichtmodule wie php8.3-mysql, php8.3-xml und php8.3-mbstring sind für den Betrieb zwingend; php8.3-imagick und php8.3-zip brauchen Sie für Medienverarbeitung und Plugin-Uploads. Installieren Sie alles auf einmal:
sudo apt install -y apache2 \
php8.3-fpm php8.3-mysql php8.3-xml php8.3-gd \
php8.3-curl php8.3-mbstring php8.3-zip php8.3-intl \
php8.3-bcmath php8.3-imagick php8.3-cli unzip curl| PHP-Modul | Typ | Zweck |
|---|---|---|
| php8.3-mysql | Pflicht | Datenbankverbindung |
| php8.3-xml | Pflicht | RSS-Feeds, XML-RPC |
| php8.3-mbstring | Pflicht | Multi-Byte-Strings und Zeichensätze |
| php8.3-curl | Pflicht | HTTP-Requests und automatische Updates |
| php8.3-gd | Empfohlen | Bildverarbeitung und Thumbnails |
| php8.3-imagick | Empfohlen | Hochwertige Bildbearbeitung |
| php8.3-zip | Empfohlen | Plugin- und Theme-Upload |
| php8.3-intl | Empfohlen | Internationalisierung |
| php8.3-bcmath | Empfohlen | Dezimalberechnungen (WooCommerce) |
Die Erweiterungen exif, sodium, fileinfo und ctype stecken unter Ubuntu 24.04 im Paket php8.3-common, das automatisch mitinstalliert wird. Pakete wie php8.3-exif oder php8.3-sodium gibt es dort nicht; apt bricht bei ihnen mit „Unable to locate package“ ab.
Verifizieren: php8.3 --version gibt die PHP-Version aus; php8.3 -m | grep -E 'mysqli|exif|sodium|imagick' listet alle vier Erweiterungen.
Schritt 3: MariaDB installieren und härten
Das Paket mariadb-server aus Ubuntu 24.04 liefert MariaDB 10.11 LTS (Support bis Februar 2028):
sudo apt install -y mariadb-server
sudo systemctl enable --now mariadbHärten Sie MariaDB danach mit dem interaktiven Skript. Es entfernt anonyme Benutzer, deaktiviert den Remote-Root-Login und löscht die Test-Datenbank:
sudo mysql_secure_installationDie Frage nach unix_socket authentication können Sie mit „n“ beantworten, da root unter Ubuntu bereits per Socket angemeldet wird; alle übrigen Fragen mit „Y“.
Verifizieren: sudo systemctl status mariadb zeigt active (running).
Schritt 4: WordPress-Datenbank und Benutzer anlegen
Legen Sie die Datenbank mit utf8mb4 an; das ältere utf8 speichert keine Emojis und andere Vier-Byte-Zeichen:
sudo mariadb <<'SQL'
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'AENDERE_ZU_STARKEM_PASSWORT';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
SQLVerifizieren: mariadb -u wpuser -p -e "SHOW DATABASES;" listet wordpress auf.
Schritt 5: Apache-Module für PHP-FPM aktivieren
Apache kommuniziert mit PHP-FPM über das FastCGI-Protokoll, dafür werden drei Module benötigt: proxy_fcgi für die FPM-Verbindung, setenvif für bedingte Umgebungsvariablen und rewrite für WordPress-Permalinks. Die Konfiguration php8.3-fpm leitet PHP-Dateien global an den FPM-Socket:
sudo a2enmod proxy_fcgi setenvif rewrite
sudo a2enconf php8.3-fpmVerifizieren: apache2ctl -M | grep proxy_fcgi zeigt das Modul als geladen.
Schritt 6: WordPress herunterladen und entpacken
Laden Sie WordPress als offiziellen Tarball von wordpress.org:
cd /tmp
wget https://wordpress.org/latest.tar.gz
sudo tar -xzf latest.tar.gz -C /var/www/
sudo chown -R www-data:www-data /var/www/wordpress
sudo find /var/www/wordpress/ -type d -exec chmod 755 {} \;
sudo find /var/www/wordpress/ -type f -exec chmod 644 {} \;Gehören die Dateien root, schlagen Plugin-Installationen und Medien-Uploads fehl. Verzeichnisse erhalten 755, Dateien 644.
Verifizieren: ls -la /var/www/wordpress/ zeigt www-data www-data als Eigentümer aller Dateien.
Schritt 7: wp-config.php erstellen und absichern
Kopieren Sie die Beispieldatei und tragen Sie die Datenbankzugangsdaten ein:
sudo -u www-data cp /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php
sudo nano /var/www/wordpress/wp-config.phpPassen Sie in der Datei folgende Werte an:
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', 'AENDERE_ZU_STARKEM_PASSWORT' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DISABLE_WP_CRON', true ); // Cron laeuft spaeter per SystemcrontabErsetzen Sie den Platzhalter-Block der Schlüssel und Salts (acht define()-Zeilen) durch frisch erzeugte Werte:
curl -s https://api.wordpress.org/secret-key/1.1/salt/Kopieren Sie die Ausgabe in wp-config.php und ersetzen Sie damit den gesamten Block. Schränken Sie danach die Leserechte ein:
sudo chmod 640 /var/www/wordpress/wp-config.php
Verifizieren: sudo -u www-data php -l /var/www/wordpress/wp-config.php meldet No syntax errors detected; grep -c 'put your unique phrase here' /var/www/wordpress/wp-config.php gibt 0 aus.
Schritt 8: Apache-VirtualHost mit PHP-FPM-Socket konfigurieren
PHP-FPM wird nicht über mod_php, sondern über einen Unix-Socket mit dem proxy:unix-Handler eingebunden. Erstellen Sie die VirtualHost-Datei:
sudo nano /etc/apache2/sites-available/wordpress.confInhalt der Datei:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/wordpress
<Directory /var/www/wordpress>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/wordpress_error.log
CustomLog ${APACHE_LOG_DIR}/wordpress_access.log combined
</VirtualHost>Ersetzen Sie example.com durch Ihre Domain. Aktivieren Sie die Site, deaktivieren Sie den Standard-VirtualHost und testen Sie die Konfiguration:
sudo a2ensite wordpress.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2Verifizieren: apache2ctl configtest gibt Syntax OK aus; curl -sI -H 'Host: example.com' http://127.0.0.1/ | head -1 liefert 302 (Weiterleitung zum Installer).
Schritt 9: PHP-FPM Upload-Limits anpassen
Die Standardlimits (2 MB Upload, 30 Sekunden Laufzeit) reichen für Theme- und Plugin-Uploads nicht. Ändern Sie die FPM-php.ini, nicht /etc/php/8.3/cli/php.ini:
sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 64M/' /etc/php/8.3/fpm/php.ini
sudo sed -i 's/post_max_size = 8M/post_max_size = 64M/' /etc/php/8.3/fpm/php.ini
sudo sed -i 's/max_execution_time = 30/max_execution_time = 120/' /etc/php/8.3/fpm/php.ini
sudo systemctl restart php8.3-fpmVerifizieren: grep -E '^(upload_max_filesize|post_max_size|max_execution_time)' /etc/php/8.3/fpm/php.ini zeigt 64M, 64M und 120. Nach der Installation zeigt Medien → Datei hinzufügen die maximale Upload-Größe 64 MB.
Schritt 10: Alle systemd-Services aktivieren und starten
Die Ubuntu-Pakete aktivieren die drei Dienste bereits bei der Installation. Stellen Sie es sicher und prüfen Sie den Status:
sudo systemctl enable apache2 mariadb php8.3-fpm
sudo systemctl start apache2 mariadb php8.3-fpm
sudo systemctl status apache2 mariadb php8.3-fpmVerifizieren: Alle drei Dienste zeigen active (running); systemctl is-enabled apache2 mariadb php8.3-fpm gibt dreimal enabled aus.
Schritt 11: UFW-Firewall konfigurieren
Geben Sie nur SSH und HTTP/HTTPS frei. Legen Sie die SSH-Regel vor ufw enable an, sonst sperren Sie sich aus:
sudo ufw allow OpenSSH
sudo ufw allow 'Apache Full'
sudo ufw enable
sudo ufw statusVerifizieren: sudo ufw status zeigt Status: active und Regeln für OpenSSH (22/tcp) sowie Apache Full (80,443/tcp).
Schritt 12: TLS/HTTPS mit Let's Encrypt einrichten
Ohne HTTPS werden Anmeldedaten und Admin-Cookies im Klartext übertragen; wordpress.org nennt HTTPS als Voraussetzung. certbot --apache holt ein Let's-Encrypt-Zertifikat und richtet VirtualHost und Weiterleitung ein. Führen Sie den Schritt vor dem Browser-Installer aus, damit WordPress die Adresse gleich mit https:// speichert:
sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache -d example.com -d www.example.comDas Paket richtet einen systemd-Timer ein, der zweimal täglich fällige Zertifikate erneuert. Testen Sie die Erneuerung:
sudo systemctl status certbot.timer
sudo certbot renew --dry-runVerifizieren: sudo certbot renew --dry-run endet mit „Congratulations, all simulated renewals succeeded“, und http://example.com leitet auf https:// um.
Schritt 13: WordPress-Cron per Systemcrontab ersetzen
WP-Cron läuft sonst nur bei Seitenaufrufen und damit unzuverlässig. Da DISABLE_WP_CRON in wp-config.php gesetzt ist, richten Sie jetzt den System-Cron ein:
sudo crontab -u www-data -eFügen Sie diese Zeile ein (alle 5 Minuten):
*/5 * * * * /usr/bin/php /var/www/wordpress/wp-cron.php > /dev/null 2>&1Verifizieren: sudo crontab -u www-data -l zeigt die Zeile; sudo -u www-data /usr/bin/php /var/www/wordpress/wp-cron.php; echo $? gibt 0 aus.
Mehr dazu in den Anleitungen Cron und crontab richtig nutzen – die Grundlagen sowie im Detail zu WordPress unter WordPress Cron Job einrichten: WP-Cron durch echten System-Cron ersetzen.
Schritt 14: WordPress-Installation im Browser abschließen
Rufen Sie Ihre Domain im Browser auf. WordPress leitet zum Installationsassistenten https://example.com/wp-admin/install.php weiter. Schließen Sie ihn zügig ab: Bis dahin kann jeder, der die Domain aufruft, die Installation übernehmen.
Tragen Sie Titel der Website, einen Admin-Benutzernamen (nicht admin), ein starkes Passwort und die E-Mail-Adresse ein und klicken Sie auf „WordPress installieren“.
Verifizieren: Das WordPress-Dashboard unter https://example.com/wp-admin/ öffnet sich ohne Fehler. Unter Werkzeuge → Website-Zustand werden keine kritischen Probleme gemeldet.
Troubleshooting / Typische Fehler
500 Internal Server Error nach der VirtualHost-Aktivierung
Häufig enthält .htaccess Rewrite-Regeln, während mod_rewrite nicht aktiv ist. Ein Fehler 503 deutet dagegen auf einen gestoppten PHP-FPM oder falschen Socket-Pfad hin (ls /run/php/). Prüfen Sie mit sudo apache2ctl -M | grep -E 'rewrite|proxy_fcgi' und sudo tail -20 /var/log/apache2/wordpress_error.log.
403 Forbidden beim Aufruf der Domain
Ursachen: Require all granted fehlt im <Directory>-Block, der DocumentRoot zeigt auf ein falsches Verzeichnis, oder www-data darf /var/www/wordpress nicht lesen (namei -l /var/www/wordpress/index.php). Erscheint statt WordPress die Apache-Standardseite, ist 000-default.conf noch aktiv.
Plugins und Theme-Uploads schlagen fehl
Zwei mögliche Ursachen: Falsche Dateiberechtigungen (Eigentümer nicht www-data) oder zu niedrige Upload-Limits in /etc/php/8.3/fpm/php.ini. Nach Änderung der Limits sudo systemctl restart php8.3-fpm ausführen.
Permalinks funktionieren nicht (404 auf Posts)
Das rewrite-Modul ist nicht aktiv, oder AllowOverride All fehlt im VirtualHost. Aktivieren Sie das Modul mit sudo a2enmod rewrite und laden Sie Apache neu: sudo systemctl reload apache2.
Certbot schlägt fehl mit „Could not bind to IPv4“
Apache läuft noch auf Port 80 und blockiert certbot im Standalone-Modus. Mit certbot --apache (statt --standalone) nutzt certbot die Apache-Integration und benötigt keinen freien Port.
Datenbank-Verbindungsfehler nach der Installation
Prüfen Sie Datenbankname, Benutzername und Passwort in wp-config.php gegen die Werte aus Schritt 4; mariadb -u wpuser -p wordpress muss sich damit anmelden können. root verwendet unter Ubuntu Socket-Authentifizierung und eignet sich nicht für WordPress.
Häufige Fragen
Warum PHP-FPM statt mod_php?
PHP-FPM läuft als eigenständiger Prozess-Pool außerhalb des Apache-Prozesses. Das erlaubt eigene Benutzer je Site, Neustarts ohne Apache und den Event-MPM von Apache. mod_php lädt PHP in jeden Apache-Prozess und erzwingt den Prefork-MPM.
Kann ich MariaDB durch MySQL ersetzen?
Ja, WordPress unterstützt MySQL ab 8.0 ebenso (Paket mysql-server). Die SQL-Befehle sind identisch; statt sudo mariadb nutzen Sie sudo mysql.
Muss ich wp-config.php manuell erstellen?
Nein, der Web-Installer kann die Datei auch selbst anlegen – dazu muss der Webserver aber Schreibrechte im DocumentRoot haben. Mit Shell-Zugang ist der manuelle Weg über wp-config-sample.php sauberer.
Wie erneuert sich das Let's Encrypt-Zertifikat automatisch?
Über den systemd-Timer certbot.timer aus Schritt 12; sudo certbot renew --dry-run testet die Erneuerung.
Wo liegen die wichtigsten Konfigurationsdateien?
Apache-VirtualHost: /etc/apache2/sites-available/wordpress.conf; PHP-FPM: /etc/php/8.3/fpm/php.ini und Pool: /etc/php/8.3/fpm/pool.d/www.conf; WordPress-Config: /var/www/wordpress/wp-config.php; MariaDB: /etc/mysql/mariadb.conf.d/; Apache-Logs: /var/log/apache2/wordpress_error.log.
Wie sichere ich WordPress regelmäßig?
Eine vollständige WordPress-Sicherung besteht aus zwei Teilen: Datenbankdump mit mysqldump und Dateiarchiv mit tar. Beide lassen sich per Cron automatisieren, siehe MySQL & PostgreSQL Backup automatisieren mit cron: mysqldump, pg_dump und rclone-Cloud-Sync.
Fazit
Mit Apache 2.4, MariaDB 10.11 LTS und PHP 8.3-FPM auf Ubuntu 24.04 LTS haben Sie eine produktionsreife Basis mit automatisch erneuerten TLS-Zertifikaten. Halten Sie WordPress, Plugins und Themes aktuell und richten Sie Sicherungen ein. Die weitere Härtung des Servers mit SSH-Schlüsseln, automatischen Sicherheitsupdates und Fail2ban beschreibt die Anleitung VPS absichern und härten: UFW, SSH-Keys und Fail2Ban.
Weiterführende Anleitungen und Quellen
- WordPress Cron Job einrichten: WP-Cron durch echten System-Cron ersetzen
- WordPress Debug-Modus aktivieren: Error-Logs analysieren und Fehler beheben
- Let's Encrypt mit certbot – TLS-Zertifikate ohne Reverse-Proxy
- Nextcloud nativ auf Ubuntu installieren (LEMP ohne Docker)
- MySQL & PostgreSQL Backup automatisieren mit cron: mysqldump, rclone und Cloud-Sync
- WordPress.org – Official Installation Guide: developer.wordpress.org
- WordPress.org – Server Requirements: wordpress.org/about/requirements
- Ubuntu.com – Install and Configure WordPress Tutorial: ubuntu.com


