WSL LAMP-Stack der bessere XAMPP

Nach dem Umtieg auf Contao 4.5 hier ein kleines Tutorial für alle Webentwickler, welche unter Windows entwickeln.

WSL, LAMP, XAMPP?

Wer unter Windows auf einem lokalen Webserver entwickeln möchte, greift meist zum XAMPP (Apache + MariaDB + PHP + Perl). Aber es geht auch anders - und zwar mit dem Windows Subsystem für Linux kurz WSL. Seit dem Anniversary Update für Windows 10 64bit kann man sich eine Linux-Distribution unter Windows installieren. Unter diesem Linux ist es möglich einen Apache-Server mit MySql / MariaDB und PHP-Unterstützung zu installieren. Dieser LAMP-Stack ist wesentlich schneller als XAMPP.

WSL mit Ubuntu einrichten

Als erstes müssen wir das WSL-Feature freischalten. Dafür benötigen wie oben erwähnt mindestens Windows 10 64bit mit Anniversary Update.

Wir öffnen also die Windows-Einstellungen...

wsl01

...und aktivieren den Entwicklermodus

wsl14 wsl03 wsl04

Das Paket wurde installiert, wenn wir folgende Meldung sehen:

wsl05

Jetzt können wir geschwind unter der Systemsteuerung:

wsl06

...innerhalb von "Programme und Features" -> "Windows-Features aktivieren oder deaktivieren" ...

wsl07

...aktivieren das Häkchen bei "Windows-Subsystem für Linux":

wsl08

Danach werden wir aufgefordert einen Neustart auszuführen, welchen wir Folge leisten. Jetzt benötigen wir noch eine Linux-Distribution. Diese können wir einfach über den Windows-Store beziehen:

wsl09

Wir entscheiden uns für Ubuntu und suchen nach dieser App:

wsl10

Mit dem Klick auf "Herunterladen", downloaden wir Ubuntu für das Subsystem. Danach nur noch auf "Starten" klicken und Ubuntu wird installiert:

wsl11

Es öffnet sich ein neues Fenster und die Installation beginnt. Dies kann einige Zeit in Anspruch nehmen!

wsl12

Zum Abschluss vergeben wir einen UNIX-Benutzernamen und Passwort und landen schließlich schon in der Bash von Ubuntu.

wsl13

Nach dem Klick-Marathon können wir endlich einen einfachen LAMP-Stack installieren:

# Quellen updaten
sudo apt update
# LAMP-Stack installieren
sudo apt-get install apache2 libapache2-mod-php7.0 php7.0 php7.0-mysql mysql-server 

Im Anschluss starten wir die Services:

sudo service apache2 start && \
sudo service mysql start

Das war es auch schon! Einfach einen Browser öffnen und "localhost" eingeben und der Apache begrüßt uns mit einer netten Seite.

wsl14

Fehlermeldungen abstellen

Während des Starten der Services ist dem Einen oder Anderen, vielleicht zwei Fehlermeldungen aufgefallen:

[core:warn] [pid 9009] (92)Protocol not available: AH00076: Failed to enable APR_TCP_DEFER_ACCEPT

sowie:

No directory, logging in with HOME=/

Diese können wir mit folgenden Befehlen abstellen:

sudo service mysql stop && \
sudo service apache2 stop && \
sudo echo "AcceptFilter http none" | sudo tee --append /etc/apache2/apache2.conf > /dev/null && \
sudo echo "AcceptFilter https none" | sudo tee --append /etc/apache2/apache2.conf > /dev/null && \
sudo usermod -d /var/lib/mysql/ mysql

Jetzt wieder die Services neustarten ^^. Damit wir das nicht immer händisch eingeben müssen, packen wir das Ganze in ein Shell-Script:

touch start_lamp.sh && \
chmod +x start_lamp.sh && \
vi start_lamp.sh

mit folgenden Inhalt (Einfg -> Text einfügen -> ESC -> :x! Eingeben und Enter):

#!/bin/sh
sudo service apache2 start
sudo service mysql start

Nun das Script mit "./start_lamp.sh" starten. Jetzt sollten keine Fehlermeldungen, sondern nur erfolgreiche Meldungen zu sehen sein.

Anwendung entwickeln

Das Entwickeln von tollen Anwendungen kann nun beginnen. Doch huch wo speichern wir unsere Daten ab? Der Apache2-Standard-Pfad ist unter Ubuntu "/var/www/html" zu finden. Doch wie bekommen wir unsere Daten dort hin? Wir verlinken einfach unseren Projekt-Ordner nach html. Wir nehmen mal an unser Projekt-Ordner ist unter "D:\Projekte". Alle Festplatten sind im WSL unter /mnt gemountet. Das Verlinken funktioniert folgendermaßen (inklusive Backup des alten Verzeichnisses):

sudo mv /var/www/html /var/www/html.bak && \
sudo ln -s /mnt/d/Projekte /var/www/html

Damit die Änderungen auch übernommen werden, muss der Apache neugestartet werden:

sudo service apache2 restart

Ob PHP auch wirklich geht, seht wir, wenn ich euch ein Beispielprojekt anlegt (D:\Projekte\tolles-projekt\index.php):

<?php

echo "<h1>ich bin ein tolles projekt</h1>";

Nach Eingabe von der Adresse des Projektes: "http://localhost/tolles-projekt", wird das Ergebnis im Browser angezeigt:

wsl15

Happy developing! ;)