====== Lokale Entwicklungsumgebung unter Mac OS X Yosemite (10.10) ======
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 [[tools:local-dev-yosemite#quellen|Quellen]] für diese Sammlung notiert.
===== 1. Xcode =====
Das Programm selbst benötigt man möglicherweise nicht, aber es bringt einige nützliche Bibliotheken und Tools mit, z.B. //git//.
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'').
----
===== 2. Homebrew =====
Homebrew ist eine praktische Paketverwaltung, mit der viele Programme einfach installiert und aktualisiert werden können.
**Installation über das Terminal:**
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
----
===== 3. dnsmasq =====
Mit diesem **Domain Name System** (DNS) können unsere localhost-Websites mit praktischen Domains aufgerufen werden, z.B. [[http://kunde1.test/|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'
Früher habe ich hier noch die **.dev** Domain verwendet. [[https://ma.ttias.be/chrome-force-dev-domains-https-via-preloaded-hsts/|Google erzwingt aber in Chrome seit kurzem HSTS für diese Domain]], daher bin ich jetzt auf **.test** umgestiegen.
----
===== 4. Root-Verzeichnis =====
Wo die Websites lokal gespeichert werden, bleibt jedem selbst überlassen. Ich gehe hier von einem Ordner ''/www'' direkt auf der //Macintosh HD// aus. Die Ordnerstruktur darin sieht folgendermaßen aus:
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*
Wer es anders einrichtet muss daran denken, einige Pfade aus dieser Anleitung anzupassen, z.B. in der ''httpd-vhosts.conf''!
----
===== 5. PHP =====
OS X beinhaltet bereits eine PHP-Version. Ich verwende aber lieber eine eigene Version, die ich über Homebrew installiere.
**Terminal:**
brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php
brew install php56
==== GraphicsMagick ====
Im Anschluss installiere ich direkt GraphicsMagick, was von TYPO3 zur Bildbearbeitung benötigt wird:
brew install php56-gmagick
==== PHP.ini ====
Speicherort: ''/usr/local/etc/php/5.6/php.ini''
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
----
===== 6. Apache HTTP Server =====
OS X bringt auch schon einen Apache mit – dieser muss für unsere Zwecke nur noch etwas angepasst werden.
**Apache starten (Terminal):**
sudo apachectl start
==== httpd.conf ====
Speicherort: ''/private/etc/apache2/httpd.conf''
Die Apache-Konfigurationsdatei. Folgende Zeilen müssen mit ''#'' auskommentiert werden:
AllowOverride none
Require all denied
Diese Zeilen müssen aktiviert bzw. hinzugefügt werden:
LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so
Include /private/etc/apache2/extra/httpd-vhosts.conf
Zudem wird mit dieser Zeile das eben installierte PHP-Modul geladen:
LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so
Der //LoadModule//-Eintrag für PHP kann **nicht an das Ende der Datei** geschrieben werden, sondern muss zu den anderen //LoadModule//-Einträgen. Sonst wird PHP nicht geladen!
Für die TYPO3-Extension ''realurl'' aktivieren wir gleich noch das Modul für die Rewrite-Regeln:
LoadModule rewrite_module libexec/apache2/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
==== httpd-vhosts.conf ====
Speicherort: ''/private/etc/apache2/extra/httpd-vhosts.conf''
Ergänzende Konfigurationsdatei. Der Inhalt der bereits vorhandenen Datei kann komplett auskommentiert oder gelöscht werden. Hinein gehört dies:
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Require all granted
VirtualDocumentRoot "/www/sites/%1/wwwroot"
ServerName sites.test
ServerAlias *.test
UseCanonicalName Off
Im Zusammenspiel mit dem weiter oben installierten //dnsmasq// sorgt diese Konfiguration dafür, dass jede Website, die im Ordner ''/www/sites/'' liegt und die Struktur ''/kundenname/wwwroot'' besitzt, mit der URL [[http://kundenname.test/|http://kundenname.test/]] aufgerufen werden kann. Ergänzungen für neue Websites sind so unnötig.
**Anschließend muss der Apache im Terminal neu gestartet werden:**
sudo apachectl restart
==== Logfiles ====
Das **access_log** und **error_log** des Apache liegen in folgendem Ordner:\\
''/private/var/log/apache2/''
----
===== 7. MySQL =====
Zuerst wird MySQL per Homebrew installiert, danach der //"MySQL 2002 (HY000) Socket Error"// behoben.
**Terminal:**
brew install mysql
sudo mkdir /var/mysql
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
Nun werden mit diesem Befehl Sicherheitseinstellungen vorgenommen, z.B. indem ein Passwort für den Root-Account von MySQL vergeben wird.
**Terminal:**
mysql_secure_installation
Danach sorgen wir noch dafür, dass MySQL nach einem Neustart automatisch gestartet wird:
**Terminal:**
ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
==== my.cnf ====
Anschließend wird die Default-Konfiguration von MySQL an neue Stelle kopiert und umbenannt.
**Terminal:**
sudo mkdir /etc/mysql
sudo cp -v $(brew --prefix mysql)/support-files/my-default.cnf /etc/mysql/my.cnf
Speicherort: ''/etc/mysql/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=
----
===== 8. phpMyAdmin =====
phpMyAdmin kann von der [[https://www.phpmyadmin.net/downloads/|offiziellen Website]] heruntergeladen werden; das englische ZIP-Archiv ist voll ausreichend. Das ZIP entpacken und die Inhalte in folgenden Ordner verschieben: ''/www/sites/phpmyadmin/wwwroot/''
Anschließend wird ein Ordner für die Konfiguration erstellt und die nötigen Rechte zugewiesen.
**Terminal:**
mkdir /www/sites/phpmyadmin/wwwroot/config
chmod o+w /www/sites/phpmyadmin/wwwroot/config
Im Browser nun [[http://phpmyadmin.test/setup/|http://phpmyadmin.test/setup/]] öffnen.
* Den Button "New server" anklicken
* Direkt in den Reiter "Authentication" wechseln
* dort als //User for config auth// ''root'' eintragen, falls nicht schon vorhanden
* als //Password for config auth// das Passwort eingeben, welches bei der Installation von MySQL vergeben wurde
* Unten auf "Apply" klicken
* Zurück im //Overview//, muss auch hier noch einmal der Button "Save" betätigt werden.
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/|http://phpmyadmin.test/]] erreichbar; mit den hinterlegten Zugangsdaten kann man sich einloggen und seine Datenbanken anlegen und verwalten.
----
===== 9. E-Mail-Versand =====
Mit Hilfe von **Postfix** wird es möglich, lokal E-Mails z.B. von Kontaktformularen versenden zu lassen. (eine Internetverbindung ist weiterhin erforderlich!). Postfix ist unter OS X bereits installiert und muss nur konfiguriert werden.
Die folgenden Einstellungen gelten für die Nutzung eines GMX-Accounts und können für andere Mail-Anbieter angepasst werden.
==== main.cf ====
Speicherort: ''/etc/postfix/main.cf''
Prüfe zuerst, ob die folgenden Zeilen so enthalten sind:
mail_owner = _postfix
setgid_group = _postdrop
Anschließend müssen die folgenden Zeilen am Ende der Datei hinzugefügt werden:
# GMX SMTP:
relayhost=mail.gmx.net:587
# SASL-Authentifizierung im Postfix SMTP-Client aktivieren:
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options=noanonymous
smtp_sasl_mechanism_filter=plain
# TLS/SSL-Verschlüsselung aktivieren:
smtp_use_tls=yes
smtp_tls_security_level=encrypt
tls_random_source=dev:/dev/urandom
# Umschreiben der lokalen E-Mail-Adresse, damit der Provider sie akzeptiert:
sender_canonical_maps = hash:/etc/postfix/sender_canonical
# TLS-Verschlüsselung für den GMX-SMTP aktivieren:
smtp_tls_policy_maps = hash:/etc/postfix/tls_policy
Nun müssen die zuvor angegebenen Dateien natürlich auch erstellt werden.
==== sasl_passwd ====
mail.gmx.net:587 deineAdresse@gmx.de:DeinPasswort
==== sender_canonical ====
myusername deineAdresse@gmx.net
root deineAdresse@gmx.net
staff deineAdresse@gmx.net
==== tls_policy ====
mail.gmx.net:587 encrypt
Diese neuen Dateien müssen nun noch in das Postfix-Datenbankformat gebracht werden.
**Terminal:**
sudo postmap /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sender_canonical
sudo postmap /etc/postfix/tls_policy
Zuletzt wird Postfix neu gestartet, damit die neuen Einstellungen übernommen werden.
**Terminal:**
sudo postfix reload
// oder das erste Mal gestartet:
sudo postfix start
=== Testversand ===
Ob die Einstellungen erfolgreich waren, kann man mit diesem Befehl testen. Er versendet eine E-Mail an eine beliebige E-Mail-Adresse mit dem Betreff "Testversand" und dem aktuellen Zeitstempel als Text.
**Terminal:**
date | mail -s Testversand beliebigeAdresse@example.org
==== TYPO3 ====
Damit TYPO3 E-Mails versenden kann, muss im Install Tool unter ''[MAIL][defaultMailFromAddress]'' die in Postfix eingerichtete Adresse hinterlegt werden.
----
===== 10. Cronjobs =====
Zuerst: Cron aktivieren. Ggf. muss anschließend der Rechner neugestartet werden.
**Terminal:**
sudo touch /etc/crontab
Um Cronjobs hinzuzufügen, wird die Datei ''.crontab'' editiert. Wer auf den Standard-Editor //vim// verzichten mag, stellt vorher auf einen anderen Editor, z.B. //nano//, um.
**Terminal:**
export EDITOR=nano
crontab -e
Der folgende Befehl führt z.B. den **Scheduler** von TYPO3 alle 5 Minuten aus:
*/5 * * * * /www/sites/kunde1/wwwroot/typo3/cli_dispatch.phpsh scheduler
Man kann Cronjobs deaktivieren, in dem man am Anfang der entsprechenden Zeile ein ''#'' notiert.
----
===== Quellen =====
Dies basiert zuallererst auf der [[https://mallinson.ca/osx-web-development/|Anleitung von Chris Mallinson]], mit Ergänzungen von [[http://coolestguidesontheplanet.com/get-apache-mysql-php-phpmyadmin-working-osx-10-10-yosemite/|coolestguidesontheplanet.com]].
Dazu kommt die [[http://www.developerfiles.com/how-to-send-emails-from-localhost-mac-os-x-el-capitan/|Postfix-Anleitung von Ander Ustarroz]] sowie der [[http://wakatara.com/2015/03/17/enabling-cron-in-osx-10-10-yosemite/|Cronjob-Beitrag von wakatara.com]].
Der Rest entstammt den Manuals der installierten Programme und diversen Stack Overflow-Topics.