Apache und PHP unter WSL

Wenn ich PHP Scripts für den Webspace bei mir zu Hause ausprobieren will, dann helfen mir leider der IIS oder Jana wenig. Denn schließlich möchte ich ja die dortige Apache2 Umgebung mit seinen typischen .htaccess Dateien genau nachstellen.

Früher hätte ich jetzt auf einen Linux Rechner oder eine VM ausweichen müssen, doch heute erlaubt mir das Windows Subsystem für Linux das gleiche “Feeling” ohne Zusatzaufwand.


Den für mich größten Vorteil von WSL kann ich immer wieder nur aufs Neue betonen:

Ich kann in EINEM Dateisystem parallel für Windows und Linux entwickeln.

Visual Studio (Code) läuft unter Windows als Editor, Linux-Builds oder Jekyll/Ruby Scripts laufen in der WSL Shell.
Es ist einfach genial.

Das geht natürlich auch mit dem Apache2 HTTP Server und dem PHP Modul.
So sieht meine Installation dafür aus:

WSL Apache Installation unter Ubuntu 20.4

Auf meinem WSL Ubuntu 20.4 sieht die Installation so aus:

  • sudo apt install apache2
    Apache2 Webserver wird installiert.
  • sudo apt install php
    Der PHP Interpreter wird installiert. Dabei sieht man auch die Version, die die Distribution anbietet (in meinem Fall 7.4) was man sich für später merken sollte.
  • sudo apt install libapache2-mod-php
    Das PHP Modul für Apache2 sorgt dafür, dass der Webserver PHP nutzen kann.
  • sudo a2enmod php7.4
    Jetzt muss das PHP Modul aktiviert werden. Im Netz findet man auch nur sudo a2enmod php, was aber wegen der Version nicht immer funktioniert. Im Zweifelsfall listet aber ein kurzes sudo a2enmod alle Module auf und fragt dann, welches man wirklich aktivieren möchte.
  • sudo a2enmod rewrite
    Ich brauche zusätzlich ein aktiviertes rewrite Modul um per .htaccess ein paar Sonderfälle definieren zu können.

Als nächstes werden die Apache Konfigurationsdateien angepasst, damit ich von WSL aus auf meine Dateien im Windows-Laufwerk zugreifen kann. Meine Daten liegen in Windows auf D:\devel\projects\opengate und der Pfad ist dann unter WSL als /mnt/d/devel/projects/opengate eingebunden.

Zuerst erlauben wir .htaccess und die Dateiauflistung des Zielverzeichnisses in der Datei /etc/apache2/apache2.conf. Dort fügt man einfach folgende Zeilen an:

1<Directory /mnt/d/devel/projects/opengate/>
2  Options Indexes FollowSymLinks
3  AllowOverride All
4  Require all granted
5</Directory>

Und dann ändert man das Standard-Root-Verzeichnis des Webservers auf das eigene Verzeichnis um.
Das kann man in der Datei
/etc/apache2/sites-enabled/000-default.conf editieren, in dem man den Eintrag DocumentRoot von seinem Standard /var/www/html abändert.
Bei mir sieht das dann so aus:

1<VirtualHost: *:80>
2  # Andere Einstellungen und Kommentare
3  DocumentRoot /mnt/d/devel/projects/opengate
4  # ... weitere Einstellungen und Kommentare
5</VirtualHost>

Tja und wenn man den Webserver dann startet mit
sudo service apache2 start oder nach einer weiter Änderung mit
sudo service apache2 restart neu gestartet hat, dann sollte man im Browser unter http://127.0.0.1/ auch schon die eigene Seite sehen (falls mit index.html gearbeitet wird), oder zumindest eine Verzeichnisauflistung auftauchen.

Fazit

Das tolle an WSL ist, dass die Dienste nicht automatisch starten und ich beim nächsten PC-Neustart keine Ressourcen verliere. Natürlich muss ich immer per service apache2 start Starthilfe leisten, wenn ich wieder was austesten will, aber das kommt ja nur gelegentlich bis selten vor.

Apache im WSL ist so was von angenehm unkompliziert, vor allem wenn ich es mit der Installation von IIS + PHP vergleiche. Das war nämlich schon immer ein Krampf. Heute gibt es zwar Webinstaller usw. die das vereinfachen, aber Anpassungen von Berechtigungen und Ausführungseinstellungen sind immer noch umständlich hinzubekommen.

Von daher mal ein großes Lob an WSL, was mir den ganzen Zirkus ohne Docker und VMs in wenigen Minuten ermöglicht.