Apache, PHP und MySQL + phpMyAdmin auf Ubuntu bzw. WSL installieren
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 updatetl;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 neustartenMö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 apache2Firewall 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 startApache stoppen
sudo systemctl stop apache2
# oder
sudo service apache2 stopApache neustarten
sudo systemctl restart apache2
# oder
sudo service apache2 restartApache Konfigurationsdatei testen
sudo apache2ctl configtestKonfiguration 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-apacheAnschließend kannst du dir mit folgendem Befehl ein Zertifikat erstellen lassen:
sudo certbot --apacheDu 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-serverDa 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_installationIm 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.cnfSuche 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