macOS: nginx, MySQL und PHP via brew installieren

Da ich auf Dauer mit der Performance von MAMP PRO unzufrieden war und meine lokale Entwicklungsumgebung sowieso fast ausschließlich unter localhost und nicht unter weiteren Hosts läuft, habe ich mich entschieden, eine Kombination von nginx, MySQL und PHP manuell via brew zu installieren.

brew ist dabei ein Paketmanager, womit man relativ unkompliziert eine Vielzahl an Paketen installieren kann.

Nachfolgend erkläre ich die schnelle Installation der einzelnen Pakete sowie deren Konfiguration unter macOS.

nginx

Die Installation kann über folgenden Befehl im Terminal gestartet werden:

brew install nginxCode-Sprache: Bash (bash)

Die initiale Konfiguration findet man unter /usr/local/etc/nginx (bei Macs mit Apple Silicon dagegen unter /opt/homebrew/etc/nginx). Angepasst werden muss hier einmal die Datei nginx.conf beispielsweise über diesen Befehl:

pico /usr/local/etc/nginx/nginx.confCode-Sprache: Bash (bash)

Unter anderem um das später installierte PHP verwenden zu können, muss dieser Block angepasst werden:

        location / {
            root   html;
            index  index.html index.htm;
        }Code-Sprache: Nginx (nginx)

Zu folgendem:

		root /path/to/webroot;
		index  index.html index.htm index.php;

		location / {
			autoindex on;
			try_files $uri $uri/ /index.php?$args;

			proxy_buffer_size 128k;
			proxy_buffers 4 256k;
			proxy_busy_buffers_size 256k;
		}Code-Sprache: Nginx (nginx)

In der ersten Zeile muss der Pfad zum Webroot angegeben werden, der beim Aufruf von http://localhost angezeigt wird. Die nachfolgende Zeile mit index legt fest, welche Dateien von nginx direkt aufgerufen werden. Hier wurde praktisch die index.php hinzugefügt.

autoindex on; erlaubt die Anzeige von Verzeichnissen, wenn es keine der unter index genannten Dateien im aktuellen Verzeichnis gibt. Das ist für die Entwicklung hilfreich. Bitte aktiviere diese Funktion nie in einem Produktivsystem.

Die try_files-Direktive gibt an, wie nginx versucht, Inhalte aufzurufen. Die angegebene Variante sollte für die meisten Anwendungen korrekt sein. Abweichende Einstellungen dürften in der Dokumentation der jeweiligen Anwendung stehen.

Die verschiedenen Einstellungen bezüglich Proxy-Buffern beheben einige Probleme mit größeren Websites.

Für PHP muss außerdem folgender Block unter dem oben genannten Block eingefügt werden:

	location ~ \.php$ {
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
	}Code-Sprache: Nginx (nginx)

Standardmäßig läuft nginx auf Port 8080, da die Ports 80 und 443, die eigentlich für HTTP bzw. HTTPS verwendet werden, unter macOS nur mit Administrator-Rechten verwendet werden können. Will man Port 80 verwenden, muss die folgende Zeile auch noch angepasst werden:

listen       8080;

Zu:

listen       80;

Danach kann nginx mit folgendem Befehl gestartet werden:

brew services run nginxCode-Sprache: Bash (bash)

Bzw. also Administrator über sudo:

sudo brew services run nginxCode-Sprache: Bash (bash)

Wenn man den nginx-Server immer direkt beim Systemstart starten möchte, kann man stattdessen folgenden Befehl verwenden:

brew services start nginxCode-Sprache: Bash (bash)

Hinweis: Wenn du nginx mit Administrator-Rechten ausführst, um Port 80 zu verwenden, ist ein automatischer Start beim Systemstart nicht möglich.

Zum Stoppen des Servers kann folgender Befehl verwendet werden:

brew services stop nginxCode-Sprache: Bash (bash)

Und zum Neustart entsprechend der restart-Befehl:

brew services restart nginxCode-Sprache: Bash (bash)

Diese Befehlskette gilt übrigens für alle Dienste via brew, also nachfolgend auch für MySQL bzw. PHP (wobei dann das nginx im Befehl jeweils ausgetauscht werden muss).

MySQL

Zur Installation von MySQL genügt folgender Befehl im Terminal:

brew install mysqlCode-Sprache: Bash (bash)

Die Konfigurationsdatei befindet sich dann unter /usr/local/etc/my.cnf (bzw. unter /opt/homebrew/etc/my.cnf für Macs mit Apple Silicon) und kann wie die nginx-Konfiguration mit folgendem Befehl geöffnet werden:

pico /usr/local/etc/my.cnfCode-Sprache: Bash (bash)

Als Basis sollte die Datei mindestens folgenden Inhalt aufweisen:

# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address            = 127.0.0.1
mysqlx-bind-address     = 127.0.0.1
socket                  = /tmp/mysql.sock

character-set-server    = utf8mb4
collation-server        = utf8mb4_unicode_ci
character-set-client-handshake = falseCode-Sprache: PHP (php)

Falls der Dienst bereits nach der Installation gestartet wurde, sollte man ihn nun neu starten:

brew services restart mysqlCode-Sprache: Bash (bash)

Zum Testen, ob der MySQL-Server erfolgreich läuft, kannst du folgenden Befehl angeben:

mysql -u root -p

Das Standardpasswort für den Benutzer root lautet ebenfalls root. In meiner lokalen Testumgebung belasse ich es auch dabei.

Wenn alles funktioniert, sollte die Ausgabe folgendermaßen aussehen:

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 8.0.25 Homebrew

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>Code-Sprache: JavaScript (javascript)

PHP

Auch PHP lässt sich über einen einzigen Befehl im Terminal installieren:

brew install phpCode-Sprache: Bash (bash)

Damit wird zum gegenwärtigen Zeitpunkt PHP 8.0 installiert. Will man eine andere PHP-Version installieren, kann das folgendermaßen gemacht werden:

Installiere zuerst eine neue Quelle – eine sogenannte Tap – um andere PHP-Versionen zu verwenden:

brew tap shivammathur/phpCode-Sprache: Bash (bash)

Installiere dann die gewünschte Version:

brew install php@7.4Code-Sprache: Bash (bash)

Dann wird PHP 7.4 zusätzlich installiert, wenn der erste Befehl bereits ausgeführt wurde.

Ähnlich wie unter Linux hat man dann für jede PHP-Version ein eigenes Konfigurationsverzeichnis unter /usr/local/etc/php (bzw. unter (/opt/homebrew/etc/php) für Macs mit Apple Silicon):

ls -l /usr/local/etc/php
total 0
drwxr-xr-x  10 matze  admin  320 Jul  3 15:55 7.4
drwxr-xr-x  10 matze  admin  320 Jul  1 18:23 8.0

Die php.ini liegt dann jeweils im Verzeichnis der entsprechenden Version, also beispielsweise unter /usr/local/etc/php/8.0/php.ini.

Wechsel zwischen PHP-Versionen

Um zwischen den PHP-Versionen zu wechseln, muss man den unlink– bzw. link-Befehl in Brew verwenden.

Um zu PHP 7.4 zu wechseln, benötigt man folgende Befehle:

brew unlink php
brew link php@7.4 --force --overwriteCode-Sprache: Bash (bash)

Um wieder zurückzuwechseln, geht es genau anders herum:

brew unlink php@7.4
brew link php --force --overwriteCode-Sprache: Bash (bash)

Davor sollte PHP aber immer erst einmal gestoppt werden, entweder via brew services stop php oder brew services stop php@7.4.

Starte danach deine Terminal-Sitzung neu, damit die Änderungen wirksam werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert