Ein LAMP-Stack (Linux, Apache, MariaDB, PHP) ist die klassische Grundlage für WordPress, Laravel und die meisten PHP-Anwendungen. In dieser Anleitung bauen Sie ihn Schritt für Schritt auf einem frischen VPS Linux Infrawire mit Ubuntu 24.04 auf, mit eigenem Virtual Host und einer Firewall, die nur das Nötige freigibt.
📋 Voraussetzungen
- Ein KVM-VPS mit Ubuntu 24.04 (IP und Root-Passwort finden Sie in Ihrem Kundenbereich)
- SSH-Zugang als root oder als Benutzer mit
sudo-Rechten - Eine Domain
example.com, deren A- (und AAAA-)Einträge aufVPS_IPzeigen
Die folgenden Befehle gehen davon aus, dass Sie root sind. Andernfalls setzen Sie sudo davor.
1. System aktualisieren
Bashapt update && apt upgrade -y
2. Apache installieren
Bashapt install -y apache2 systemctl enable --now apache2 apache2 -v
Der Dienst startet sofort und wird beim Booten automatisch gestartet.
3. MariaDB installieren
MariaDB steckt in den Ubuntu-Repositories und ersetzt MySQL ohne Anpassungen. Wenn Sie Oracle MySQL bevorzugen, installieren Sie stattdessen mysql-server, aber niemals beide auf demselben Server.
Bashapt install -y mariadb-server systemctl enable --now mariadb mysql_secure_installation
Behalten Sie im Assistenten die unix_socket-Authentifizierung für root bei, vergeben Sie bei Nachfrage ein starkes Passwort, entfernen Sie anonyme Benutzer, verbieten Sie den Remote-Root-Login und löschen Sie die Testdatenbank. Legen Sie anschließend eine Datenbank und einen eigenen Benutzer für Ihre Anwendung an:
Bashmariadb
SQL1CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 2CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; 3GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost'; 4FLUSH PRIVILEGES; 5EXIT;
4. PHP 8.3 installieren
Ubuntu 24.04 liefert PHP 8.3 in den Standard-Repositories mit, ein zusätzliches PPA ist nicht nötig.
Bashapt install -y php libapache2-mod-php php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip php-intl php -v
Das Paket libapache2-mod-php stellt Apache automatisch auf das MPM prefork um und lädt das PHP-Modul.
5. Virtual Host anlegen und mod_rewrite aktivieren
Bashmkdir -p /var/www/example.com/public_html chown -R www-data:www-data /var/www/example.com nano /etc/apache2/sites-available/example.com.conf
Apache1<VirtualHost *:80> 2 ServerName example.com 3 ServerAlias www.example.com 4 DocumentRoot /var/www/example.com/public_html 5 6 <Directory /var/www/example.com/public_html> 7 AllowOverride All 8 Require all granted 9 </Directory> 10 11 ErrorLog ${APACHE_LOG_DIR}/example.com-error.log 12 CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined 13</VirtualHost>
AllowOverride All aktiviert .htaccess-Dateien, auf die die schönen URLs von WordPress oder Laravel angewiesen sind. Aktivieren Sie nun Modul und Site und deaktivieren Sie die Standardseite:
Basha2enmod rewrite a2ensite example.com.conf a2dissite 000-default.conf apache2ctl configtest systemctl reload apache2
configtest muss Syntax OK melden, bevor Sie neu laden.
6. Firewall konfigurieren
Erlauben Sie zuerst SSH, sonst sperren Sie sich beim Aktivieren der Firewall selbst aus.
Bashufw allow OpenSSH ufw allow 'Apache Full' ufw enable ufw status
Das Profil Apache Full öffnet die Ports 80 und 443. Öffnen Sie Port 3306 nicht: MariaDB muss nur lokal lauschen.
7. PHP testen und die Testdatei löschen
Bashecho '<?php phpinfo();' > /var/www/example.com/public_html/info.php curl -sI http://example.com/info.php | head -n 1
Sie sollten HTTP/1.1 200 OK erhalten. Öffnen Sie http://example.com/info.php im Browser, um die PHP-Konfigurationsseite zu sehen. Eine phpinfo()-Seite verrät Versionen, Pfade und Module, löschen Sie sie daher sofort:
Bashrm /var/www/example.com/public_html/info.php
Prüfen Sie auch die übrigen Komponenten:
Bashapache2ctl -M | grep -E 'rewrite|php' php -m | grep -E 'mysqli|pdo_mysql' systemctl is-active apache2 mariadb
🛠️ Fehlerbehebung
Die Apache-Standardseite erscheint weiterhin. Die Standard-Site ist noch aktiv oder der DNS-Eintrag ist noch nicht propagiert. Führen Sie a2dissite 000-default.conf aus, laden Sie Apache neu und testen Sie mit curl -I -H 'Host: example.com' http://VPS_IP/.
403 Forbidden. Prüfen Sie, ob das Verzeichnis Require all granted enthält, ob www-data die Dateien lesen kann (ls -ld /var/www/example.com/public_html) und werfen Sie einen Blick in /var/log/apache2/example.com-error.log.
Der Browser lädt die PHP-Datei herunter, statt sie auszuführen. Das PHP-Modul ist nicht geladen. Führen Sie apache2ctl -M | grep php und danach systemctl restart apache2 aus. Erscheint nichts, installieren Sie libapache2-mod-php neu.
Rewrite-Regeln werden ignoriert (404 bei schönen URLs). Stellen Sie sicher, dass a2enmod rewrite ausgeführt wurde und Ihr <Directory>-Block AllowOverride All enthält.
🎉 Ihr LAMP-Stack läuft: Apache, MariaDB und PHP 8.3 sind bereit für Ihre erste Website.