Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung WordPress 16.06.2026 · 9 min Lesezeit

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

WordPress nativ auf Ubuntu mit Apache, MariaDB und PHP-FPM installieren

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

  1. Ubuntu 24.04 LTS Server – frische Installation empfohlen, mindestens 1 GB RAM und 10 GB freier Speicher
  2. Root- oder sudo-Zugang per SSH
  3. Registrierter Domainname (z. B. example.com) – der DNS-A-Record muss bereits auf die Server-IP zeigen, bevor Sie certbot aufrufen
  4. Internetverbindung des Servers (für apt, wordpress.org-Download und Let's Encrypt)
  5. Kein laufender Webserver oder Port-80-Dienst auf dem Server
KomponenteMinimum (offiziell)Empfohlen (wordpress.org)Ubuntu-24.04-Paket
WordPress–aktuelle Version (7.1.2, September 2026)manuell (Tarball)
PHP7.4 (EOL)8.3+php8.3-fpm
MariaDB–10.11 oder neuermariadb-server (10.11)
Apache2.42.4apache2
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 -y

Verifizieren: 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-ModulTypZweck
php8.3-mysqlPflichtDatenbankverbindung
php8.3-xmlPflichtRSS-Feeds, XML-RPC
php8.3-mbstringPflichtMulti-Byte-Strings und Zeichensätze
php8.3-curlPflichtHTTP-Requests und automatische Updates
php8.3-gdEmpfohlenBildverarbeitung und Thumbnails
php8.3-imagickEmpfohlenHochwertige Bildbearbeitung
php8.3-zipEmpfohlenPlugin- und Theme-Upload
php8.3-intlEmpfohlenInternationalisierung
php8.3-bcmathEmpfohlenDezimalberechnungen (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 mariadb

Hä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_installation

Die 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;
SQL

Verifizieren: 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-fpm

Verifizieren: 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.php

Passen 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 Systemcrontab

Ersetzen 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.conf

Inhalt 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 apache2

Verifizieren: 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-fpm

Verifizieren: 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-fpm

Verifizieren: 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 status

Verifizieren: 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.com

Das 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-run

Verifizieren: 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 -e

Fügen Sie diese Zeile ein (alle 5 Minuten):

*/5 * * * * /usr/bin/php /var/www/wordpress/wp-cron.php > /dev/null 2>&1

Verifizieren: 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.

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

  1. WordPress Cron Job einrichten: WP-Cron durch echten System-Cron ersetzen
  2. WordPress Debug-Modus aktivieren: Error-Logs analysieren und Fehler beheben
  3. Let's Encrypt mit certbot – TLS-Zertifikate ohne Reverse-Proxy
  4. Nextcloud nativ auf Ubuntu installieren (LEMP ohne Docker)
  5. MySQL & PostgreSQL Backup automatisieren mit cron: mysqldump, rclone und Cloud-Sync
  6. WordPress.org – Official Installation Guide: developer.wordpress.org
  7. WordPress.org – Server Requirements: wordpress.org/about/requirements
  8. Ubuntu.com – Install and Configure WordPress Tutorial: ubuntu.com