Diese Anleitung beschreibt die Einrichtung einer lokalen Web-Entwicklungsumgebung auf dem eigenen Mac. Sie beinhaltet auch die Installation von Komponenten, die für TYPO3 benötigt werden (z.B. GraphicsMagick).
Am Ende dieser Seite habe ich die verschiedenen Quellen für diese Sammlung notiert.
Im Ergebnis erhalten wir:
Viele Programme waren mit dem neuen Apple M1 Chip anfangs nicht kompatibel. Sie mussten dann mit Rosetta installiert werden: ein Framework von Apple, mit dem sich Programme ausführen lassen, die für Intel-x64-Prozessoren kompiliert wurden.
Die meisten Programme unterstützen die neuen Apple Chips jetzt nativ.
Das Programm selbst benötigt man möglicherweise nicht, aber es bringt einige nützliche Bibliotheken und Tools mit.
Xcode kann kostenlos im App Store heruntergeladen werden. Nach der Installation muss noch die Lizenz akzeptiert werden, wahlweise bei einem Programmstart oder über die Kommandozeile (xcodebuild -license
).
Homebrew ist eine praktische Paketverwaltung, mit der viele Programme einfach auf dem Mac installiert und aktualisiert werden können.
Homebrew selbst und die meisten Pakete sind inzwischen mit dem M1 Chip kompatibel, so dass wir auf Rosetta verzichten können.
Installation über das Terminal:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Mit diesem Domain Name System (DNS) können unsere localhost-Websites mit praktischen Domains aufgerufen werden, z.B. http://kunde1.test/.
Die folgenden Befehle installieren das Programm, erstellen benötigte Ordner und verweisen alle Anfragen zur .test Top Level Domain zu unserem localhost.
Terminal:
brew install dnsmasq cd $(brew --prefix) mkdir etc echo 'address=/.test/127.0.0.1' > etc/dnsmasq.conf sudo cp -v $(brew --prefix dnsmasq)/homebrew.mxcl.dnsmasq.plist /Library/LaunchDaemons sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist sudo mkdir /etc/resolver sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/test'
Wo die Websites lokal gespeichert werden, bleibt jedem selbst überlassen. Ich gehe hier von einem Ordner /www
innerhalb meines User-Verzeichnisses aus. Die Verzeichnisstruktur sieht folgendermaßen aus:
/Users/sebkln/www/ sites/ kunde1/ assets/ *für Quelldateien und andere Dokumente* wwwroot/ *beinhaltet die eigentliche Website* kunde2/ assets/ wwwroot/ index.php typo3/ typo3_src/ [etc] phpmyadmin/ *wird weiter unten eingerichtet*
Der Name wwwroot
ist frei gewählt. Das Verzeichnis könnte auch htdocs
, html
oder public
genannt werden.
Du kannst Verzeichnisnamen oder Strukturen abweichend anlegen, musst dies dann nur konsequent in allen Code-Beispielen dieser Anleitung durchziehen (z.B. in der httpd-vhosts.conf
).
Mit macOS Monterey liefert Apple erstmals keine PHP-Version mehr mit. Es war aber schon vorher ratsam, PHP über Homebrew zu installieren.
Ich installiere gleich mehrere PHP-Versionen, zwischen denen man später bei Bedarf wechseln kann.
Terminal:
brew install php brew install php@7.4 brew install php@7.2
Das PHP-Paket ohne Suffix beinhaltet jeweils die aktuelle PHP-Version (derzeit PHP 8.0).
Speicherort: /opt/homebrew/etc/php/7.4/php.ini
(bzw. entsprechende Versionsnummer)
Zentrale Konfigurationsdatei für PHP. Folgende Anpassungen sind empfohlen, besonders in Hinblick auf die Verwendung von TYPO3:
max_execution_time = 240 always_populate_raw_post_data = -1 max_input_vars = 1500 upload_max_filesize = 10M post_max_size = 10M
Um bei der täglichen Arbeit später die PHP-Versionen zu wechseln, sind zwei Dinge notwendig:
brew unlink php && brew link –force –overwrite php@7.4
httpd.conf
mit LoadModule
laden (siehe den folgenden Abschnitt) und den Webserver neustarten.macOS Monterey beinhaltet immer noch einen Apache. Da es hiermit aber Probleme geben kann, ist eine Installation per Homebrew dringend empfohlen.
Terminal:
brew install httpd brew services start httpd
Speicherort: /opt/homebrew/etc/httpd/httpd.conf
Die Apache-Konfigurationsdatei. Folgende Zeilen müssen mit #
auskommentiert werden:
<Directory /> AllowOverride none Require all denied </Directory>
Diese Zeilen müssen aktiviert oder ergänzt werden:
LoadModule vhost_alias_module lib/httpd/modules/mod_vhost_alias.so Include /opt/homebrew/etc/httpd/extra/httpd-vhosts.conf
Mit den folgenden Zeilen ergänzen wir die verschiedenen PHP-Versionen. Nur die aktive PHP-Version sollte aktiv sein, der Rest wird auskommentiert (bis er benötigt wird).
Beachte auch die abweichende Schreibweise bei PHP 8.0.
#LoadModule php7_module /opt/homebrew/opt/php@7.2/lib/httpd/modules/libphp7.so LoadModule php7_module /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so #LoadModule php_module /opt/homebrew/opt/php@8.0/lib/httpd/modules/libphp.so
Die LoadModule-Einträge für PHP können nicht an das Ende der Datei geschrieben werden, sondern muss zu den anderen LoadModule-Einträgen. Sonst wird PHP nicht geladen!
Für das URL-Routing von TYPO3 aktivieren wir gleich noch das Modul für die Rewrite-Regeln:
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
Default-User und -Gruppe des Apache ist _www
. Um keine Probleme mit Zugriffsrechten zu bekommen, setzen wir uns stattdessen einfach selbst ein:
# User _www # Group _www User myusername Group staff
Der Homebrew-Apache nutzt den Port 8080
. Ich ändere ihn auf den bei Webservern üblichen Port 80
:
Listen 80
Speicherort: /opt/homebrew/etc/httpd/extra/httpd-vhosts.conf
Ergänzende Konfigurationsdatei. Der Inhalt der bereits vorhandenen Datei kann komplett auskommentiert oder gelöscht werden. Hinein gehört dies:
<Directory "/Users/sebkln/www"> Options Indexes MultiViews FollowSymLinks AllowOverride All Require all granted </Directory> <Virtualhost *:80> VirtualDocumentRoot "/Users/sebkln/www/sites/%1/wwwroot" ServerName sites.test ServerAlias *.test UseCanonicalName Off </Virtualhost>
Im Zusammenspiel mit dem weiter oben installierten dnsmasq sorgt diese Konfiguration dafür, dass jede Website, die im Ordner /Users/sebkln/www/sites/
liegt und die Struktur /kundenname/wwwroot
besitzt, mit der URL http://kundenname.test/ aufgerufen werden kann. Wenn du neue Webprojekte anlegst, benötigst du so keine Anpassung von Konfigurationen – du müsst einfach nur die Konvention dieser Struktur beachten.
Anschließend muss der Apache im Terminal neu gestartet werden:
sudo /opt/homebrew/bin/apachectl restart
Das access_log und error_log des Apache liegen in folgendem Ordner:
/opt/homebrew/var/log/httpd/
Das Paket mysql
installiert derzeit Version 8.x. Um MySQL 5.7 zu nutzen, wird mysql@5.7
benötigt.
Terminal:
brew install mysql@5.7
MySQL unter M1 Macs bzw. macOS Monterey zu installieren, kann einige Probleme bereiten. Falls du vorher bereits eine andere MySQL-Version installiert hattest, solltest du alle dazugehörigen Dateien und Verzeichnis komplett entfernen, bevor du MySQL erneut installierst.
Bevor wir MySQL starten, müssen wir noch einige Zugriffsrechte korrigieren. Sonst erhalten wir den folgenden Fehler: „Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)“.
Terminal:
sudo chown -R _mysql:admin /opt/homebrew/var/mysql sudo chmod -R u+rwX,g+rwX,o-rwx /opt/homebrew/var/mysql
Anschließend starten wir den MySQL-Server sowie den einmaligen Installationsvorgang, bei dem wir u.a. ein Passwort vergeben.
Terminal:
mysql.server start mysql_secure_installation
MySQL kann über die my.cnf-Datei konfiguriert werden. Dabei wird MySQL in verschiedenen Verzeichnissen nach dieser Datei suchen.
Die Optionen (Konfigurationen) aus den verschiedenen my.cnf-Dateien werden addiert. Bestehende Optionen können durch später ausgelesene Dateien überschrieben werden.
Mit dem folgenden Befehl wird eine umfangreiche Übersicht ausgegeben. Ganz zu Beginn stehen die berücksichtigten Pfade.
Terminal:
mysqld --verbose --help Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /opt/homebrew/etc/my.cnf ~/.my.cnf
Ich kopiere mir die Default-Datei von Homebrew in mein User-Verzeichnis.
Terminal:
cp -v /opt/homebrew/etc/my.cnf ~/my.cnf
Speicherort: ~/my.cnf
Die folgenden Einstellungen in der my.cnf sind z.B. für TYPO3 wichtig. Es darf kein sql_mode
gesetzt sein!
innodb_buffer_pool_size = 128M sql_mode=
phpMyAdmin kann von der offiziellen Website heruntergeladen werden; das englische ZIP-Archiv ist voll ausreichend. Das ZIP entpacken und die Inhalte in folgenden Ordner verschieben: /Users/sebkln/www/sites/phpmyadmin/wwwroot/
Anschließend wird ein Ordner für die Konfiguration erstellt und die nötigen Rechte zugewiesen.
Terminal:
mkdir /Users/sebkln/www/sites/phpmyadmin/wwwroot/config chmod o+w /Users/sebkln/www/sites/phpmyadmin/wwwroot/config
Im Browser nun http://phpmyadmin.test/setup/ öffnen.
root
eintragen, falls nicht schon vorhanden
Dies erstellt eine config.inc.php im config
-Ordner von phpMyAdmin. Diese Datei wird direkt in den Ordner wwwroot
von phpMyAdmin verschoben. Danach kann der config
-Ordner gelöscht werden.
Das wars schon. Nun ist phpMyAdmin unter http://phpmyadmin.test/ erreichbar; mit den hinterlegten Zugangsdaten kann man sich einloggen und seine Datenbanken anlegen und verwalten.
TYPO3 benötigt noch ein Programm zur Bildbearbeitung. Damit werden Thumbnails und optimierte Bilder fürs Frontend generiert.
Ich nutze hierfür GraphicsMagick (was laut offizieller TYPO3-Dokumentation auch das empfohlene Programm ist). ImageMagick wird grundsätzlich ebenfalls unterstützt, allerdings hatte ich hier teilweise Probleme mit ImageMagick 7.x.
brew install graphicsmagick --build-from-source
Der Pfad zur Binary lautet:
/opt/homebrew/bin/
Mit den folgenden Einstellungen im TYPO3 Install Tool (LocalConfiguration.php
) erhalte ich saubere Ergebnisse in allen „Image Processing“-Tests:
'GFX' => [ 'gdlib_png' => true, 'jpg_quality' => 60, 'processor' => 'GraphicsMagick', 'processor_allowTemporaryMasksAsPng' => 0, 'processor_colorspace' => 'RGB', 'processor_effects' => true, 'processor_enabled' => '1', 'processor_path' => '/opt/homebrew/bin/', 'processor_path_lzw' => '/opt/homebrew/bin/', 'processor_stripColorProfileCommand' => '+profile \'*\' -interlace plane -strip', ],
Mailhog ist ein praktisches Tool, um Webformulare und E-Mail-Templates zu testen. Gesendete E-Mails werden von Mailhog lokal abgefangen und in einer Weboberfläche dargestellt.
brew install mailhog brew services restart mailhog
Mailhog ist unter http://127.0.0.1:8025/# erreichbar.