Mac - Apache MySql PHP Server mit Homebrew

Aus Wikizone
Wechseln zu: Navigation, Suche
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 ü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

  1. AllowOverride controls what directives may be placed in .htaccess files.
  2. It can be "All", "None", or any combination of the keywords:
  3. 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