Apache, PHP und MySQL + phpMyAdmin auf Ubuntu bzw. WSL installieren

5 Minuten
  Kommentare Kaffe spendieren
15.09.2023 von Johannes Benkert

Eine der meisten genutzten und beliebtesten Webentwicklungsumgebungen ist der LAMP-Stack. LAMP steht für Linux, Apache, MySQL und PHP. In diesem Tutorial zeige ich dir, wie du den LAMP-Stack auf Ubuntu bzw. WSL einrichten kannst.

Bevor du neue Pakete installierst, solltest du die Paketdatenbank deines Systems aktualisieren. Öffne dazu das Terminal und führe folgenden Befehl aus:

sudo apt update

tl;dr

Für jeden, der keine Lust hat, den ganzen Beitrag zu lesen, hier eine kurze Zusammenfassung, wie du den LAMP-Stack auf Ubuntu bzw. WSL einrichten kannst:

sudo apt install apache2 # Apache installieren
sudo ufw allow 'Apache Full' # Firewall konfigurieren
sudo apt install mysql-server # MySQL installieren
sudo mysql_secure_installation # MySQL Sicherheitsskript ausführen
# Es werden ein paar Fragen gestellt, die du beantworten musst.
# Ich empfehle alle mit Y (= Yes) zu beantworten. Lediglich bei der Frage nach dem VALIDATE PASSWORD PLUGIN kannst du mit N (= No) antworten, das erleichtert die einrichtung.
sudo apt install software-properties-common # Software-Properties-Common installieren
sudo add-apt-repository ppa:ondrej/php # PHP-Repository hinzufügen
sudo apt update # Paketdatenbank aktualisieren
sudo apt install php8.2 php8.2-fpm libapache2-mod-php8.2 -y # PHP installieren
sudo apt install unzip php8.2-common php8.2-mysql php8.2-xml php8.2-curl php8.2-gd php8.2-imagick php8.2-cli php8.2-dev php8.2-imap php8.2-mbstring php8.2-opcache php8.2-soap php8.2-zip -y # PHP-Erweiterungen installieren
sudo a2dismod php8.2 # PHP-Modul deaktivieren
sudo a2dismod mpm_prefork # mpm_prefork deaktivieren
sudo a2enmod mpm_event # mpm_event aktivieren
sudo a2enconf php8.2-fpm # PHP-FPM aktivieren
sudo a2enmod proxy # Proxy aktivieren
sudo a2enmod proxy_fcgi # Proxy_FCGI aktivieren
sudo a2enmod ssl # SSL aktivieren
sudo a2enmod http2 # HTTP2 aktivieren
sudo a2enmod headers # Headers aktivieren
sudo apt install phpmyadmin # phpMyAdmin installieren
sudo systemctl restart apache2 # Apache neustarten

Möchtest du genauer wissen, was du wie installierst, dann lies weiter oder navigiere direkt zu dem Thema, das dich interessiert.

Apache installieren

Apache2 ist ein weit verbreiteter Open-Source-Webserver, der es ermöglicht, Websites im Internet zu hosten und zu verwalten. Mit einer Vielzahl an verfügbaren Modulen und Tools kann es für eine breite Palette von Webanwendungen und Diensten konfiguriert werden.

Du benötigst Apache, um PHP-Scripte serverseitig auszuführen und dynamische Webinhalte zu generieren, die dann an die Browser der Benutzer gesendet werden können.

Apache über das Terminal installieren

Öffne das Terminal und führe folgenden Befehl aus, um Apache zu installieren:

sudo apt install apache2

Firewall konfigurieren

Ich empfehle dir zwingend die Firewall mit ufw (https://wiki.ubuntuusers.de/ufw/) zu konfigurieren, um deinen Server vor unerwünschten Zugriffen zu schützen.

Um den Zugriff auf den Apache-Server über die Firewall zu erlauben, führe folgenden Befehl aus:

sudo ufw allow 'Apache Full'

Das öffnet Port 80 (für Verbindungen ohne SSL) und Port 443 (für Verbindungen mit SSL). Mit dem Befehl sudo ufw status kannst du dir die aktuelle Firewall-Konfiguration anzeigen lassen.

Apache wo liegen welche Dateien?

Für die Konfiguration von Apache musst du auf verschiedene Dateien und Verzeichnisse zugreifen. Hier ist eine Übersicht über die meist genutzten Dateien und Verzeichnisse:

Konfigurationsdatei

  • /etc/apache2/apache2.conf - Die Hauptkonfigurationsdatei von Apache2

Verzeichnisse

  • /var/www/html/ - Das Verzeichnis, in dem die Dateien der einzelnen Websites gespeichert werden
  • /etc/apache2/sites-enabled/ - Das Verzeichnis, in dem die Konfigurationsdateien für die einzelnen Websites gespeichert werden, die aktiviert sind
  • /etc/apache2/mods-enabled/ - Das Verzeichnis, in dem die Konfigurationsdateien für die einzelnen Module gespeichert werden, die aktiviert sind
  • /etc/apache2/sites-available/ - Das Verzeichnis, in dem die Konfigurationsdateien für die einzelnen Websites gespeichert werden
  • /etc/apache2/mods-available/ - Das Verzeichnis, in dem die Konfigurationsdateien für die einzelnen Module gespeichert werden

Cheat-Sheet wichtige Apache-Befehle

Du kannst Apache über das Terminal starten, stoppen und neustarten oder auch die Konfigurationsdatei testen. Führe dazu folgende Befehle aus:

Apache starten

sudo systemctl start apache2
# oder
sudo service apache2 start

Apache stoppen

sudo systemctl stop apache2
# oder
sudo service apache2 stop

Apache neustarten

sudo systemctl restart apache2
# oder
sudo service apache2 restart

Apache Konfigurationsdatei testen

sudo apache2ctl configtest

Konfiguration einer Seite im Web

Um eine Seite zu konfigurieren, musst du eine Konfigurationsdatei im Verzeichnis /etc/apache2/sites-available/ erstellen.

Erstelle dazu eine neue Datei mit .conf als Dateiendung. Ich empfehle dir den Namen der Domain als Dateinamen zu verwenden. In meinem Fall wäre das jb-dev.io.conf.

<VirtualHost *:80>
		Protocols h2 http/1.1

		ServerName www.jb-dev.io
		ServerAlias jb-dev.io
		DocumentRoot /var/www/html/jb-dev-io

		ErrorLog ${APACHE_LOG_DIR}/jb-dev-io.error.log
		CustomLog ${APACHE_LOG_DIR}/jb-dev-io.log combined
</VirtualHost>

Starte den Apache-Service neu, damit die Änderungen übernommen werden (s. oben). Damit deine Seite aber auch über die URL erreichbar ist, musst du noch in den DNS-Einstellungen deines Hosters die A und AAAA Records auf die IP-Adresse deines Servers zeigen lassen. Änderungen können bis zu 24h dauern. Danach ist deine Seite über die URL erreichbar.

Konfiguration einer lokalen Seite (localhost)

Für die lokale Entwicklung auf einem Windowsrechner (s. WSL2 auf Windows einrichten) könnte deine Konfigurationsdatei so aussehen:

<VirtualHost *:80>
		Protocols h2 http/1.1

		ServerName projekt1.localhost
		DocumentRoot /var/www/html/projekt1

		ErrorLog ${APACHE_LOG_DIR}/localhost.error.log
		CustomLog ${APACHE_LOG_DIR}/localhost.log combined
</VirtualHost>

In dem Falle kannst du die Seite über die URL http://projekt1.localhost aufrufen.

Apache vs. Nginx

Apache2 und Nginx sind beide leistungsfähige Webserver, wobei Apache2 durch seine modulare Struktur und .htaccess-Unterstützung eine höhere Flexibilität bei der Konfiguration bietet, während Nginx für seine geringere Ressourcenbelastung und höhere Geschwindigkeit bei der Auslieferung statischer Inhalte bekannt ist.

Certbot installieren: Kostenlose SSL-Zertifikate

Damit deine Seite aber auch über HTTPS erreichbar ist, benötigst du ein SSL-Zertifikat. Das ist mittlerweile Standard und solltest du unbedingt machen. Das kannst du dir bei Let’s Encrypt kostenlos erstellen lassen. Dazu musst du das Paket certbot installieren. Führe dazu folgenden Befehl aus:

sudo apt install certbot python3-certbot-apache

Anschließend kannst du dir mit folgendem Befehl ein Zertifikat erstellen lassen:

sudo certbot --apache

Du wirst hier ein paar Sachen gefragt, die du ausfüllen solltest. Falls deine Seite sowohl mit www. als auch ohne erreichbar sein soll, empfehle ich beim erstenne des Zertifikats beide Domains auszuwählen (z.B.: 1,2 eingeben). Es wird auch automatisch eine Weiterleitung auf die HTTPS-Version eingerichtet.

MySQL installieren

MySQL ist eine relationale Datenbank. Sie wird häufig in Verbindung mit PHP und Apache verwendet, um dynamische Webseiten zu erstellen.

MySQL über das Terminal installieren

Öffne das Terminal und führe folgenden Befehl aus, um MySQL zu installieren:

sudo apt install mysql-server

Da in der Datenbank sehr sensible Daten gespeichert werden, empfiehlt es sich das Sicherheitsskript auszuführen.

MySQL Sicherheitsskript ausführen

Führe folgenden Befehl aus, um das MySQL Sicherheitsskript auszuführen:

sudo mysql_secure_installation

Im Verlauf der Installation werden dir ein paar Fragen gestellt. Beantworte alle Fragen mit Y, also Ja. Lediglich bei der Frage nach dem VALIDATE PASSWORD PLUGIN kannst du mit N, also Nein, antworten. Das erleichtert die Einrichtung. Achte daher darauf, dass du immer nur sehr sichere Passwörter verwendest.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

MySQL-Zugriff von fremden Server erlauben

Ich lagere gerne die Datenbank auf einem anderen Server aus, um eine höhere Performance und Sicherheit zu gewährleisten. Dazu musst du den Zugriff von fremden Servern erlauben. Öffne dazu die Konfigurationsdatei von MySQL:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Suche nach der Zeile bind-address und kommentiere sie aus, indem du ein # voranstellst, füge darunter eine neue Zeile mit dem Inhalt bind-adress 0.0.0.0 ein. Speichere die Datei und starte MySQL neu:

#bind-address           = 127.0.0.1
bind-address            = 0.0.0.0