Archiv der Kategorie: Linux

Lokale PHP-Entwicklungsumgebung mit Laravel Valet

Valet ist eine Umgebung, die PHP-Projekte aus einem lokalen Verzeichnis automatisch im Browser verfügbar macht. Es ist eine leichtgewichtige Alternative zu Vagrant oder Docker. Um es gleich vorweg zu nehmen: Die hier vorgestellte Lösung ist nicht an Laravel gebunden sondern eignet sich für die Entwicklung von PHP-Projekten aller Art (z.B. Symfony, Zend, Drupal, WordPress, Magento, usw.).

Valet funktioniert knapp gesagt so: Man gibt in einem Ordner in dem Projekte liegen valet park ein. Ab da kann man die Projekte in dem Ordner über verzeichnis.dev im Browser aufrufen. Gibt man noch valet secure verzeichnis ein, kann man die Seite sogar über https://verzeichnis.dev aufrufen (ohne Zertifikats-Fehler).

Verbindung mit ngrok beobachten

Will man jemandem von Extern Zugriff auf die lokale Entwicklungsumgebung gewähren ist dies mit valet share möglich. Diese Funktion nutzt ngrok, um einen Tunnel aufzubauen und generiert einen Link, den man teilen kann. In einem lokalen Webinterface kann man noch jeden externen Request beobachten und inspizieren.

Bevor wir zur Einrichtung kommen, hier noch mal schnell ein lustiges Fake-Marketing-Video zu Valet:

Installation

Ab Ubuntu 17.04 funktioniert Valet „dank“ systemd leider nicht mehr out-of-the-box. Wie man die Probleme behebt habe ich im vorheringen Artikel beschrieben (Update: Im aktuellen Valet funktioniert es auch ohne eigene Änderungen an 17.04). Im Folgenden gehe ich davon aus, dass composer bereits installiert ist und $HOME/.composer/vendor/bin im Pfad liegt. Wir benutzen nicht die offizielle Version von Valet, sondern einen Fork, der auch unter Linux funktioniert (neben Ubuntu sind auch Fedora und Arch getestet).

sudo apt install libnss3-tools jq xsel php7.0-cli php7.0-curl php7.0-mbstring php7.0-mcrypt php7.0-xml php7.0-zip php7.0-sqlite3 php7.0-mysql
composer global require cpriego/valet-linux
valet install
mkdir ~/Sites
cd ~/Sites && valet park

Alle Projekte, die nun in ~/Sites liegen, sind über verzeichnis.dev aufrufbar. Über Treiber erkennt Valet, um was für eine Art von Projekt es sich handelt und serviert es entsprechend dem Browser. Auf Github gibt es eine Liste der Treiber, man kann aber auch leicht eigene schreiben.

Viel Spaß beim Coden. ;-)

Ubuntu 17.04: DNS mit dnsmasq statt systemd

Ab Ubuntu 17.04 übernimmt systemd-resolved die Auflösung von DNS-Anfragen. Manchmal möchte man ein bißchen mehr vom lokalen DNS-Server. Vielleicht möchte man zum Beispiel alle auf .dev endenden Domains auf lokale Verzeichnisse umleiten (siehe dazu hier). Hier kommt man mit systemd-resolved nicht mehr weiter.

In Vorgänger-Versionen von Ubuntu konnte man noch dnsmasq nutzen, meist im Zusammenspiel mit dem NetworkManager. Dies wird nun verhindert, bzw. die Konfiguration ist so komplex, dass ich die systemd-Komponente lieber deaktiviere. Dazu muss man sowohl systemd-resolved, wie auch dnsmasq stoppen und deaktivieren. Die dnsmasq-Funktionalität wird danach vom NetworkManager angeboten. Damit das klappt muss der auch wieder die /etc/resolv.conf stellen. Hier ein bißchen Copy-Pasta:

sudo systemctl stop systemd-resolved.service
sudo systemctl disable systemd-resolved.service
sudo systemctl stop dnsmasq.service
sudo systemctl disable dnsmasq.service
sudo mv /etc/resolv.conf{,.bak}
sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
echo -e "[main]\ndns=dnsmasq\n" | sudo tee /etc/NetworkManager/conf.d/enable-dnsmasq.conf
sudo systemctl restart NetworkManager.service

Jetzt sollte man kurz prüfen, ob Domains weiterhin aufgelöst werden. Wenn ja, ist man wieder mit dem guten alten dnsmasq unterwegs. Nur der Vollständigkeit halber hier die Befehle, um das ganze wieder rückgängig zu machen.

sudo rm /etc/NetworkManager/conf.d/enable-dnsmasq.conf
sudo rm /etc/resolv.conf
sudo mv /etc/resolv.conf{.bak,}
sudo systemctl enable systemd-resolved.service
sudo systemctl start systemd-resolved.service
sudo systemctl enable dnsmasq.service
sudo systemctl start dnsmasq.service
sudo systemctl restart NetworkManager.service

Jetzt kann man sich für lokale Entwicklung von PHP-Projekten (Symfony, Drupal, WordPress, Laravel, Magento, u.v.m) sehr einfach Laravel Valet installieren. Wie dies geht habe ich im folgenden Artikel beschrieben.