LAMP-Stack auf Ubuntu 20.04 installieren und konfigurieren

Der LAMP-Stack – bestehend aus Linux, Apache, MySQL und PHP – ist ein Paket aus Open-Source-Tools zur Entwicklung und Bereitstellung dynamischer Webanwendungen. In dieser Umgebung gilt:

  • Linux dient als Betriebssystem
  • Apache liefert Webinhalte aus
  • MySQL verwaltet Datenbanken
  • PHP verarbeitet dynamische Inhalte

Diese Anleitung erklärt, wie Sie den LAMP-Stack auf Ubuntu 20.04 installieren und konfigurieren, um Webanwendungen auf Ihrem Server zu hosten.

Voraussetzungen

Vor dem Start stellen Sie sicher, dass Folgendes vorhanden ist:

  • Ein Server mit Ubuntu 20.04
  • SSH-Zugriff als Nicht-Root-Benutzer mit sudo-Rechten
  • Ein neuer A-Record für Ihre Domain, der auf die Server-IP zeigt
  • Ein aktualisiertes System

Apache installieren

Die Standard-APT-Repositories von Ubuntu 20.04 enthalten die aktuelle Apache-Version. Führen Sie folgende Schritte aus, um den Paketindex zu aktualisieren und Apache zu installieren.

Paketindex aktualisieren

Apache installieren

$ sudo apt install apache2 -y

Apache starten

$ sudo systemctl start apache2

Apache für Autostart aktivieren

$ sudo systemctl enable apache2

Status des Apache-Dienstes prüfen

$ sudo systemctl status apache2

Beispielausgabe:

● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2025-04-06 10:56:28 UTC; 20s ago
       Docs: https://httpd.apache.org/docs/2.4/
   Main PID: 2622 (apache2)
      Tasks: 55 (limit: 9415)
     Memory: 6.9M
     CGroup: /system.slice/apache2.service
             ├─2622 /usr/sbin/apache2 -k start
             ├─2623 /usr/sbin/apache2 -k start
             └─2624 /usr/sbin/apache2 -k start

HTTP-Zugriff in der Firewall erlauben

Öffnen Sie einen Browser und rufen Sie Ihre Domain oder die Server-IP (z. B. http://SERVER-IP) auf, um zu prüfen, ob die Apache-Standardseite angezeigt wird.

MySQL installieren

MySQL fungiert als Datenbank-Backend für den LAMP-Stack. Alternativ können Sie auch MariaDB nutzen. In den Standard-Repositories von Ubuntu 20.04 ist das aktuelle MySQL-Paket verfügbar. Verwenden Sie folgende Befehle, um MySQL über APT zu installieren.

MySQL-Server-Paket installieren

$ sudo apt install -y mysql-server

MySQL für Autostart aktivieren

$ sudo systemctl enable mysql

MySQL starten

$ sudo systemctl start mysql

Status des MySQL-Dienstes prüfen

$ sudo systemctl status mysql

Beispielausgabe:

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2025-04-06 10:58:51 UTC; 41s ago
   Main PID: 17189 (mysqld)
     Status: "Server is operational"
     Tasks: 38 (limit: 9415)
     Memory: 364.8M
     CGroup: /system.slice/mysql.service
             └─17189 /usr/sbin/mysqld

Wenn der Status active (running) anzeigt, läuft der MySQL-Server erfolgreich.

MySQL-Installation absichern

Führen Sie das MySQL-Sicherheits-Skript aus, um unsichere Standardeinstellungen zu entfernen und die Authentifizierung zu aktivieren.

$ sudo mysql_secure_installation

Beantworten Sie die Abfragen wie folgt:

  • Passwortvalidierung aktivieren: y
  • Passwortrichtlinie wählen: 2 für starke Passwörter
  • Anonyme Benutzer entfernen: y
  • Root-Login per Remote deaktivieren: y
  • Testdatenbank löschen: y
  • Berechtigungstabellen neu laden: y

Nach erfolgreicher Konfiguration erscheint eine Meldung ähnlich „Success. All done!“.

Als Root in die MySQL-Konsole einloggen

Starkes Passwort für den Root-Benutzer setzen

Ersetzen Sie Strong@@password123 durch ein eigenes sicheres Passwort.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Strong@@password123';

Berechtigungsänderungen anwenden

MySQL-Konsole verlassen

Erneut mit neuem Passwort einloggen

Beispieldatenbank anlegen

mysql> CREATE database content_database;

Datenbanken auflisten, um zu bestätigen

Erwartete Ausgabe:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| content_database   |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

Neuen MySQL-Benutzer erstellen

Legen Sie beispielsweise den Benutzer dbadmin mit einem starken Passwort an (ersetzen Sie das Beispielpasswort durch ein eigenes):

mysql> CREATE USER 'dbadmin'@'localhost' IDENTIFIED BY 'Strong@@password123';

Berechtigungen für die Datenbank vergeben

mysql> GRANT ALL PRIVILEGES ON content_database.* TO 'dbadmin'@'localhost';

Berechtigungsänderungen übernehmen

MySQL-Shell verlassen

PHP installieren und PHP-FPM konfigurieren

PHP ist ein zentrales Element des LAMP-Stacks, das dynamische Inhalte verarbeitet und mit der MySQL-Datenbank kommuniziert. PHP-FPM (FastCGI Process Manager) verbessert die Leistung, indem es PHP-Anfragen über einen Pool von Worker-Prozessen steuert.

PHP und PHP-FPM installieren

$ sudo apt install -y php php-fpm

Gängige PHP-Erweiterungen installieren

$ sudo apt install -y php-mysql php-opcache php-cli libapache2-mod-php

Dieser Befehl installiert:

  • php-mysql: Ermöglicht PHP die Verbindung zu MySQL
  • libapache2-mod-php: Erlaubt Apache, PHP-Skripte auszuführen
  • php-opcache: Zwischenspeicherung vorkompilierter PHP-Skripte für bessere Performance
  • php-cli: Bietet Zugriff auf PHP über die Kommandozeile

PHP-Version prüfen

Beispielausgabe:

PHP 7.4.3-4ubuntu2.29 (cli) (built: Mar 25 2025 18:57:03) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3-4ubuntu2.29, Copyright (c), by Zend Technologies

PHP-FPM starten und aktivieren

Starten Sie den PHP-FPM-Dienst entsprechend Ihrer installierten Version (z. B. PHP 7.4):


$ sudo systemctl start php7.4-fpm


$ sudo systemctl enable php7.4-fpm

Status von PHP-FPM prüfen

$ sudo systemctl status php7.4-fpm

Beispielausgabe:

● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2025-04-06 11:11:45 UTC; 10min ago
       Docs: man:php-fpm7.4(8)
    Process: 27868 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.4/fpm/pool.d/www.conf 74 (code=exited, status=0/SUCCESS)
   Main PID: 27851 (php-fpm7.4)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
      Tasks: 3 (limit: 9415)
     Memory: 7.3M
     CGroup: /system.slice/php7.4-fpm.service
             ├─27851 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
             ├─27866 php-fpm: pool www
             └─27867 php-fpm: pool www

PHP-FPM konfigurieren

PHP-FPM steigert die Leistung von PHP-Anwendungen, indem es Pools von Worker-Prozessen verwaltet. Passen Sie die Standardeinstellungen an den verfügbaren Arbeitsspeicher Ihres Servers an. Befolgen Sie diese Schritte, um PHP-FPM mit Apache zu integrieren und den Pool zu optimieren.

Für PHP-FPM erforderliche Apache-Module aktivieren

$ sudo a2enmod proxy_fcgi setenvif

Dieser Befehl aktiviert:

  • proxy_fcgi: Ermöglicht Apache den Proxy-Betrieb mit PHP-FPM
  • setenvif: Setzt notwendige Umgebungsvariablen für die Verbindung zwischen Apache und PHP-FPM

Standardkonfiguration für PHP-FPM aktivieren

$ sudo a2enconf php7.4-fpm

Apache neu starten, um Änderungen zu übernehmen

$ sudo systemctl restart apache2

PHP-FPM-Pool-Konfiguration bearbeiten


$ cd /etc/php/7.4/fpm/pool.d/


$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf

Überprüfen Sie den Standard-Poolnamen:

Stellen Sie sicher, dass die folgenden Direktiven auf www-data gesetzt sind:

user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data

Passen Sie bei Bedarf folgende Parameter an:

  • pm: Auf dynamic setzen, um PHP-Prozesse je nach Last automatisch anzupassen.
  • pm.start_servers: Anzahl der beim Start zu erstellenden PHP-Prozesse (Standard: 2).
  • pm.max_children: Maximale gleichzeitige PHP-Prozesse (Standard: 5).
  • pm.min_spare_servers: Minimale Anzahl inaktiver PHP-Prozesse (Standard: 1).
  • pm.max_spare_servers: Maximale Anzahl inaktiver PHP-Prozesse (Standard: 3).
  • pm.max_requests: Anzahl der Anfragen pro PHP-Prozess, bevor dieser neu gestartet wird.

Speichern und schließen Sie die Datei.

PHP-FPM neu starten, um Änderungen zu übernehmen

$ sudo systemctl restart php7.4-fpm

Apache mit PHP-FPM konfigurieren

Apache kommuniziert mit PHP-FPM über das Modul mod_proxy_fcgi, entweder über einen UNIX-Socket oder den Standard-TCP-Port 9000. Gehen Sie wie folgt vor, um einen neuen Apache Virtual Host zu erstellen, der PHP-FPM über den UNIX-Socket anbindet.

Standard-Virtual-Host-Konfiguration von Apache entfernen

$ sudo rm -rf /etc/apache2/sites-enabled/000-default.conf && sudo rm -rf /etc/apache2/sites-available/000-default.conf

Neue Apache-Virtual-Host-Konfigurationsdatei erstellen

Erstellen Sie beispielsweise app.example.com.conf:

$ sudo nano /etc/apache2/sites-available/app.example.com.conf

Fügen Sie den folgenden Inhalt ein (ersetzen Sie app.example.com durch Ihre tatsächliche Domain):

ServerAdmin webmaster@app.example.com
ServerName app.example.com
DocumentRoot /var/www/html/app.example.com


    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted



   SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost/"


ErrorLog ${APACHE_LOG_DIR}/app.example.com_error.log
CustomLog ${APACHE_LOG_DIR}/app.example.com_access.log combined

Diese Konfiguration:

  • Lauscht auf Port 80 für die Domain app.example.com.
  • Setzt das Web-Root auf /var/www/html/app.example.com.
  • Leitet PHP-Dateianfragen über FastCGI an den PHP-FPM-Socket weiter.
  • Definiert eigene Pfade für Error- und Access-Logs.

Neuen Apache Virtual Host aktivieren

$ sudo a2ensite app.example.com.conf

Apache-Konfiguration testen

$ sudo apache2ctl configtest

Beispielausgabe:

Webroot-Verzeichnis für den Virtual Host erstellen

$ sudo mkdir -p /var/www/html/app.example.com

Beispiel-PHP-Datei erstellen

$ sudo nano /var/www/html/app.example.com/info.php

Fügen Sie folgenden PHP-Code ein:

Dieses Skript zeigt in Ihrem Browser die PHP-Version und aktivierten Module an.

Apache neu starten, um Änderungen zu übernehmen

$ sudo systemctl restart apache2

Öffnen Sie anschließend Ihre Domain (z. B. http://app.example.com/info.php), um die PHP-Informationsseite anzuzeigen.

Server absichern

Auf Ubuntu 20.04 kann standardmäßig die Uncomplicated Firewall (UFW) aktiviert sein. Apache liefert dynamische Webinhalte über HTTP-Port 80, während MySQL (3306) und PHP-FPM (9000) interne TCP-Ports verwenden. Folgen Sie diesen Schritten, um den Datenverkehr auf Port 80 zuzulassen und vertrauenswürdige SSL-Zertifikate für HTTPS auf Port 443 zu konfigurieren.

Firewall konfigurieren

Prüfen Sie, ob die Firewall aktiv ist:

Beispielausgabe:

Verfügbare UFW-Anwendungsprofile auflisten:

Beispielausgabe:

Apache
Apache Full
Apache Secure
OpenSSH

Erlauben Sie das Profil „Apache Full“, um HTTP- und HTTPS-Verbindungen zu aktivieren:

$ sudo ufw allow "Apache Full"

Firewall-Regeln neu laden:

UFW-Status erneut prüfen, um sicherzustellen, dass die Apache-Regeln aktiv sind:

Beispielausgabe:

To                         Action      From
--                         ------      ----
1022/tcp                   ALLOW       Anywhere
Apache Full                ALLOW       Anywhere
1022/tcp (v6)              ALLOW       Anywhere (v6)
Apache Full (v6)           ALLOW       Anywhere (v6)

Vertrauenswürdige Let’s Encrypt SSL-Zertifikate erstellen

Installieren Sie den Certbot-Client mit Snap:

$ sudo snap install certbot --classic

Fordern Sie ein neues SSL-Zertifikat an (ersetzen Sie app.example.com und admin@example.com durch Ihre Domain und E-Mail):

$ sudo certbot --apache -d app.example.com -m admin@example.com --agree-tos

Beispielausgabe:

Requesting a certificate for app.example.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/app.example.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/app.example.com/privkey.pem
This certificate expires on 2025-07-05.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for app.example.com to /etc/apache2/sites-available/000-default-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https://app.example.com

Automatische SSL-Erneuerung testen:

$ sudo certbot renew --dry-run

Apache neu starten, um die SSL-Konfiguration zu übernehmen:

$ sudo systemctl restart apache2

LAMP-Stack-Installation testen

Legen Sie eine Beispieltabelle in der bestehenden Datenbank content_database an, um „Hello World! Greetings from centron“ über eine PHP-Anwendung auszugeben.

Als dbadmin in MySQL einloggen

Geben Sie das Passwort des Benutzers dbadmin ein, wenn Sie dazu aufgefordert werden.

Zur Beispieldatenbank wechseln

mysql> USE content_database;

Tabelle messages erstellen

mysql> CREATE TABLE IF NOT EXISTS messages (
       content_id INT AUTO_INCREMENT PRIMARY KEY,
       content VARCHAR(255) NOT NULL
      );

Diese Tabelle enthält:

  • content_id: Auto-inkrementierender Primärschlüssel
  • content: Textspalte für bis zu 255 Zeichen

Beispieldatensatz einfügen

mysql> INSERT INTO messages (content) VALUES ('Hello World! Greetings from centron');

Tabellendaten anzeigen

mysql> SELECT * from messages;

Beispielausgabe:

+----+------------------------------------------+
| content_id | content                           |
+------------+-----------------------------------+
|  1         | Hello World! Greetings from centron|
+------------+-----------------------------------+
1 row in set (0.00 sec)

MySQL-Konsole verlassen

Beispiel-PHP-Anwendung erstellen

Erstellen Sie die Datei setup.php im Webroot-Verzeichnis:

$ sudo nano /var/www/html/app.example.com/setup.php

Fügen Sie folgenden Code ein:

Dieses Skript verbindet sich mit der Datenbank content_database und ruft Daten aus der Tabelle messages ab. Wenn keine Datensätze gefunden werden, erscheint „No records found“. Bei Verbindungsproblemen wird eine Fehlermeldung ausgegeben.

Verzeichnisrechte setzen

$ sudo chown -R www-data:www-data /var/www/html/app.example.com/

Öffnen Sie Ihre Domain (z. B. https://app.example.com/setup.php), um zu prüfen, ob die PHP-Anwendung „Hello World! Greetings from centron“ aus der MySQL-Datenbank anzeigt.

Fazit

Sie haben erfolgreich Apache, MySQL und PHP (LAMP-Stack) auf Ubuntu 20.04 installiert und konfiguriert. Außerdem haben Sie Beispielanwendungen erstellt, um das Zusammenspiel aller Komponenten zu testen und den Server sicher zu betreiben.

Quelle: vultr.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren:

Moderne Hosting Services mit Cloud Server, Managed Server und skalierbarem Cloud Hosting für professionelle IT-Infrastrukturen

Passbolt auf Linux installieren & sicher konfigurieren

Security, Tutorial
Passbolt auf Linux-Distributionen installieren und einrichten Passbolt ist ein Open-Source-Passwortmanager, der die sichere Speicherung und Verwaltung von Passwörtern sowie sensiblen Daten mit Ende-zu-Ende-Verschlüsselung ermöglicht. Er funktioniert hauptsächlich als Browser-Erweiterung für…