Mac - Apache MySql PHP Server mit Homebrew
https://help.macstadium.com/articles/how-to-install-apache-mysql-and-php-using-homebrew-on-macos https://gist.github.com/DragonBe/0faebe58deced34744953e3bf6afbec7
Requirements
Requirements
- Xcode
- Homebrew Paketmanager für Mac OS X
- Homebrew-Cask
- Text Editor (like Sublime Text 2) as you will need to edit some lines of code
- Mac with High Sierra or above
XCode über den App Store installieren Homebrew wie im Wiki beschrieben.
Apache
MacOs System Apache Autostart abschalten
sudo launchctl unload -w/System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null
System Apache stoppen
sudo apachectl stop
Wahrscheinlich läuft aber keiner, es sei denn du hast ihn vorher aktiviert. Daher kann es gut sein dass eine
‘could not find specified service’.
Meldung kommt.
Homebrew Apache installieren
Now we can proceed with the installation of Apache 2.4:
brew install httpd
Achte darauf wie der Apache eingerichtet wird. Bei mir ist das folgendermaßen:
DocumentRoot is /usr/local/var/www. The default ports have been set in /usr/local/etc/httpd/httpd.conf to 8080 and in /usr/local/etc/httpd/extra/httpd-ssl.conf to 8443 so that httpd can run without sudo. To have launchd start httpd now and restart at login: brew services start httpd Or, if you don't want/need a background service you can just run: apachectl start
Check of Apache läuft
Achte auf den Pfad der während der Homebrew-Cask Installation genutzt wurde. Du könntest Ihn verändert haben:
which apachectl
Ausgabe:
/usr/local/bin/apachectl
Du kannst auch
httpd -v
Ausgabe:
Server version: Apache/2.4.39 (Unix) Server built: Apr 19 2019 17:54:07
Nutzen. Das gibt dann die Version und das built ähnlich wie oben aus.
Apache starten
Jetzt können wir den Apache starten
sudo apachectl start
Die Webseite erreichst du im Browser über den localhost (Port 8080 vgl. Ausgabe oben)
http://localhost:8080/
oder die Lokale IP Adresse. Es sollte die typische Apache Seite kommen.
“It Works!”
Apache Autostart (optional)
Wenn du den Apache beim Mac Start automatisch starten willst, kannst du einen Homebrew Service ienrichten
sudo brew services start httpd
Ich mache das nicht, da ich auch noch den XAMPP für kleinere Sachen nutze, da muss nicht der brew apache die ganze Zeit laufen.
Apache Module und Port konfigurieren
Den Port kannst du hier ändern. Standardmäßig richtet brew den 8080 ein. Eigentlich ganz gut bei mir, da der XAMPP auf dem Standardport 80 läuft, so kann ich theoretisch beide auch mal gleichzeitig nutzen.
open -e /usr/local/etc/httpd/httpd.conf
Finde die Zeile mit
Listen 8080
und passe sie z.B. auf 80 an. Ich lasse es auf 8080
Erlaubte Direktiven für .htaccess - AllowOverride
Mit AllowOverride controls regelt der Server wo Apache Zugriff hat. Hier sollte man sorgfältig vorgehen, auf keinen Fall sollte er überall Zugriff haben. Im ersten Block verbietet man erstmal alles um dann in den Web Directories wieder einzeln Zugriff zu geben.
Im httpd.conf File ist das meiste ganz gut beschrieben. Im Zweifel Suchmaschine o.ä. bemühen.
#
# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other
# <Directory> blocks below.
#
<Directory />
AllowOverride none
Require all denied
</Directory>
Oft sinnvoll ist eine Regelung über htaccess Files
- AllowOverride controls what directives may be placed in .htaccess files.
- It can be "All", "None", or any combination of the keywords:
- AllowOverride FileInfoAuthConfig Limit
AllowOverride All
mod_rewrite aktivieren
Suche nach
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
und entferne den Hash vorne
Servername
Ein Domainname benötigt eine DNS hier kann man auch einfach die IP Adresse eingeben unter der der Host Rechner erreichbar ist. Oder man läßt es leer, wenn man es nicht benötigt.
#ServerName www.example.com:8080
Replace it with your IP Address or domain:
ServerName 192.1.2.24
Apache neu starten
sudo apachectl -k restart
TEIL 2 – PHP
Mit Brew kann man verschiedene Versionen installieren. Wir entscheiden uns hier für 7.2. Um das Ganze zu testen legen wir schon mal eine kleine PHP Datei an:
info.php
<?php phpinfo();?>
Rufen wir diese im Browser auf
localhost:8080/info.php
Gibt er uns nur den Code aus. Später sollte er dann alle wichtigen PHP Einstellungen etc. ausgeben.
PHP 7.2 mit brew installieren
brew install php@7.2
Statt 7.2 geht auch eine ander php Version z.B. 5.6, 7.0, 7.1. Ohne @x.y installiert er die neueste (bei mir war das 7.3, die ich wieder deinstalliert habe, da es mit älteren Tools Probleme gibt)
Apache und PHP verbinden
Netterweise gibt Homebrew auch gleich ein paar Hinweise aus, wie ich Apache mit PHP verbinden kann:
To enable PHP in Apache add the following to httpd.conf and restart Apache:
LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Finally, check DirectoryIndex includes index.php
DirectoryIndex index.php index.html
The php.ini and php-fpm.ini file can be found in:
/usr/local/etc/php/7.2/
php@7.2 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.
If you need to have php@7.2 first in your PATH run:
echo 'export PATH="/usr/local/opt/php@7.2/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/php@7.2/sbin:$PATH"' >> ~/.bash_profile
For compilers to find php@7.2 you may need to set:
export LDFLAGS="-L/usr/local/opt/php@7.2/lib"
export CPPFLAGS="-I/usr/local/opt/php@7.2/include"
Was bedeutet das alles ?
In der httpd.conf (s.o.) können wir den Apache mit PHP verbinden, indem wir das passende Apache Modul aktivieren.
Sprich wir editieren wieder die Datei:
open -e /usr/local/etc/httpd/httpd.conf
Modul einbinden
Das PHP Modul für den Apache findet sich in /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so Daher benötigen wir in der httpd.conf (entweder unten oder dort wo auch die anderen Module geladen werde.
LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
FileHandler
Als nächstes sagen wir ihm, dass alle php Dateien inkl. erweitertem Suffix (also auch php7, phpx) den Handler application/x-httpd-php (Mime) bekommen)
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Evtl. funktioniert das auch ohne, aber in manchen Anwendungsfällen benötigt man den passenden Handler.
DirectoryIndex
Jetzt geben wir an wie er nach index.php oder index.html suchen soll, falls nur ein Ordner im Browser aufgerufen wird.
Wir suchen nach
<IfModule dir_module> DirectoryIndex index.html </IfModule>
Und fügen index.php nach der index.html hinzu. So sucht Apache zuerst nach index.html und wenn er keine findet nach index.php. Andersrum geht natürlich auch.
<IfModule dir_module> DirectoryIndex index.html index.htm index.php </IfModule>
Jetzt Apache neu starten. Bei mir hat es mit dem restart nicht funktioniert, erst start stop hat geklappt:
sudo apachectl stop sudo apachectl start
Den Service wie in den Infos angegeben lassen wir weg, da wir auch Apache manuell starten.
Auch den Pfad ändern wir erst mal nicht, es gibt für die Kommandozeile ja das Mac PHP das immer läuft. Wir erinnern uns das zeigt er uns mit
which php
Ausgabe:
/usr/bin/php
PHP Konfigurieren
Wie oben in der Ausgabe schon gezeigt finden wir die Konfiguration in:
/usr/local/etc/php/7.2/php.ini
Dies ist die Default Konfigurationsdatei. Hier findet man die üblichen wichtige Parameter wie memory_limit, upload_max_filesize oder max_execution_time. Auch den safe mode kann ma hier aktivieren. Was im Moment eingestellt ist sieht man auch bequem über unsere info.php Datei.
PHP als CGI statt als Modul
TODO
Wenn man PHP über (Fast)CGI implementiert, kann man z.B. über die htaccess die PHP Version umschalten.
TEIL 3 – MYSQL
Als letztes installieren wir MySql
Auch hier nutzen wir brew (würde auch manuell gehen, aber Homebrew ist effizienter)
brew install mysql
Nach der Installation gibt uns brew wieder ein paar Tips:
We've installed your MySQL database without a root password. To secure it run:
mysql_secure_installation
MySQL is configured to only allow connections from localhost by default
To connect run:
mysql -uroot
To have launchd start mysql now and restart at login:
brew services start mysql
Or, if you don't want/need a background service you can just run:
mysql.server start
Root Passwort ist immer eine gute Idee. Also:
mysql_secure_installation
FEHLER Server nicht erreichbar. Ach ja - erstmal starten
mysyl.server start
und dann.
mysql_secure_installation
Der Sicherheitsassistent startet und fragt nach
- ob wir eine Validierungskomponente installieren wollen die nur starke Passwörter zuläßt. Nein brauchen wir in der Testumgebung nicht
- nach einem Rootpasswort - klar das geben wir ein
- Ob der Anonyme User zugelassen ist - nein
- ob root nur über localhost zugreifen kann - ja das ist sinnvoll
mySql als Service
Das könnten wir über
brew services start mysql
machen. Der Befehl richtet launchd als Service ein, so dass mySql nach dem Login startet. Das lassen wir wie schon beim Apache und bei PHP weg.
phpMyAdmin
Todo
Zusammengefasst
Wir haben also eine komplette AMP Umgebung die wir mit einfachen Befehlen starten und stoppen können. Achtung beim Apache mit sudo davor.
mysql.server start mysql.server stop sudo apachectl start sudo apachectl stop