====== 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.