Seit Neuem verwende ich anstelle von XAMPP das Zend Server Community Edition Paket als Entwicklungswebserver.
Hauptgrund war, dass wir nun vermehrt mit dem Zend Framework arbeiten. Generell hat der Webserver dank dem optimierten PHP Stack aber auch eine spürbar bessere Performance. Hinzu kommt, dass der Webserver bereits nahtlos mit dem Zend Studio arbeitet. So wird bspw. der Server automatisch gestartet wenn die IDE läuft.
Zend Server CE verwendet hierbei für die Administrations-Oberfläche den Port 10081. Das htdocs-Verzeichnis liegt bei Mac OS X unter
/usr/local/zend/apache2/htdocs
und ist über den Port 10088 erreichbar. Wer hier gerne normal "http://localhost" ohne den zusätzlichen Port aufruft, kann dies über die httpd.conf ändern. Ebenso können dort zusätzliche VirtualHosts eingerichtet werden, was insbesondere bei der Entwicklung mehrere ZF-Projekten das Leben erleichtert.
Beispiel
Ich arbeite mit drei Projekten, welche ich mit der Standard-Installation wie folgt aufrufen muss:
http://localhost:10088 (Htdocs-Index) http://localhost:10088/webeo/public (Projekt Webeo) http://localhost:10088/shift/public (Projekt Shift) http://localhost:10088/shift/public (Projekt Berta)
Neu soll das Ganze wie folgt aufgerufen werden:
http://localhost (Htdocs Index) http://webeo.local (Projekt Webeo) http://shift.local (Projekt Shift) http://berta.local (Projekt Berta)
Der schöne Nebeneffekt dabei, bei der Entwicklung von Anwendungen mit dem Zend Framework kann ich nun relativ vom Root-Verzeichnis ausgehen und muss nicht zwingend das Basis-Verzeichnis über den Front-Controller auslesen:
// Angabe der Basis-URL
foreach ($stylesheets as $stylesheet) {
$this->view->headLink()->appendStylesheet(Zend_Controller_Front::getInstance() ->getBaseUrl() . '/skins/' . $skin . '/css/' . $stylesheet);
}
// Relativ zum Root-Verzeichnis
foreach ($stylesheets as $stylesheet) {
$this->view->headLink()->appendStylesheet('/skins/' . $skin . '/css/' . $stylesheet);
}
Wobei man hier erwähnen muss, dass erstere Variante prinzipiell schönerer Programmierstil ist. Immerhin funktioniert das Projekt dann auch bei einer lokalen Installation ohne VirtualHosts.
Schritt 1: httpd.conf anpassen
Ich verwende hier das eingebaute Terminal von Mac OS X. Zu finden unter:
Programme -> Dienstprogramme -> Terminal.app
Die httpd.conf liegt im Verzeichnis "/usr/local/zend/apache2/conf". Da diese dem Webbenutzer gehört, muss der Befehl "sudo" vorangestellt werden um daran Änderungen als Superuser vornehmen zu können.
Apfel:~ rofflox$ cd /usr/local/zend/apache2/conf Apfel:conf rofflox$ sudo vi httpd.conf Password:
Anschliessend sucht man nach dem ersten Vorkommen von "Listen" und fügt einen zweiten Eintrag hinzu. Mittels "Listen" gibt man dem Apache-Webserver an, auf welchem Port er laufen soll. Bei Zend Server CE ist dies standardmässig der Port 10088. Da wir den Webserver ebenfalls unter http://localhost ansprechen wollen, fügen wir hier zusätzlich den HTTP-Standardport 80 mittels "Listen 80" hinzu.
Tipp:
Um im vi-Editor nach einem Wort zu suchen, kann im Terminal ein / gefolgt von dem Suchwort eingegeben werden. Um weitere Vorkommen zu finden, drückt man anschliessend lediglich die Taste "n" um weiter zu springen.
Vorher:
// httpd.conf # # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, instead of the default. See also the # directive. # # Change this to Listen on specific IP addresses as shown below to # prevent Apache from glomming onto all bound IP addresses. # #Listen 12.34.56.78:80 Listen 10088
Nachher:
// httpd.conf # # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, instead of the default. See also the # directive. # # Change this to Listen on specific IP addresses as shown below to # prevent Apache from glomming onto all bound IP addresses. # #Listen 12.34.56.78:80 Listen 10088 Listen 80
Die virtuellen Hosts werden bei Zend Server CE in einer separaten Konfigurations-Datei abgelegt. Diese gilt es nun noch zu aktivieren. Hierfür entfernt man das Kommentar-Zeichen in der httpd.conf.
Vorher:
// httpd.conf # Virtual hosts # Include conf/extra/httpd-vhosts.conf
Nachher:
// httpd.conf # Virtual hosts Include conf/extra/httpd-vhosts.conf
Schritt 2: httpd-vhosts.conf anpassen
Kommen wir nun zum eigentlich erfassen unserer virtuellen Hosts. Diese werden in der Datei "httpd-vhosts.conf" hinzugefügt. Zu finden unter:
/usr/local/zend/apache2/conf/extra/
Apfel:conf rofflox$ cd extra/ Apfel:extra rofflox$ sudo vi httpd-vhosts.conf
Die Datei enthält bereits einige vorkonfigurierte virtuelle Hosts. Diese kann man getrost löschen, da ansonsten beim Starten vom Apache unnötige Fehlermeldungen erscheinen. Am besten ersetzt ihr die Datei mit der von mir angehängten.
// httpd-vhosts.conf
#
# Virtual Hosts
#
# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:http://httpd.apache.org/docs/2.2/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
#
# Use name-based virtual hosting.
#
NameVirtualHost *:80
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
<VirtualHost *:80>
DocumentRoot "/usr/local/zend/apache2/htdocs"
</VirtualHost>
# webeo.local VirtualHost
<VirtualHost *:80>
DocumentRoot "/usr/local/zend/apache2/htdocs/zf_webeo/public"
ServerName webeo.local
<Directory "/usr/local/zend/apache2/htdocs/zf_webeo/public">
Options FollowSymLinks
AllowOverride All
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
# shift.local VirtualHost
<VirtualHost *:80>
DocumentRoot "/usr/local/zend/apache2/htdocs/zf_shift/public"
ServerName shift.local
<Directory "/usr/local/zend/apache2/htdocs/zf_shift/public">
Options FollowSymLinks
AllowOverride All
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
# berta.local VirtualHost
<VirtualHost *:80>
DocumentRoot "/usr/local/zend/apache2/htdocs/zf_berta/public"
ServerName berta.local
<Directory "/usr/local/zend/apache2/htdocs/zf_berta/public">
Options FollowSymLinks
AllowOverride All
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
Wichtig hierbei: Der erste VirtualHost muss zwingend auf das eigentliche htdocs-Verzeichnis zeigen. Ansonsten erhält man beim Aufruf über http://localhost nicht die Standard-Indexseite von Zend Server CE angezeigt sondern die des ersten VirtualHosts den man definiert hat.
In den eigenen VirtualHosts müsst ihr anschliessend nur noch den DocumentRoot sowie die Directory-Direktive auf euer gewünschtes Verzeichnis setzen. Als ServerName gibt ihr zudem den Namen ein, über welchen ihr das Verzeichnis anschliessend im Browser ansprechen wollt.
Schritt 3: Hinzufügen der ServerNamen in der hosts Datei
Nun müssen wir die vorher definierten Servernamen noch der lokalen hosts-Datei bekannt machen. Zu finden unter:
/etc/hosts
Beim Aufruf eines Domainnamens im Browser, fragt der Computer normalerweise den DNS-Server eures Providers ab um den Domainnamen in eine IP-Adresse aufzulösen. Bevor dies jedoch geschieht, überprüft er ob in seiner lokale /etc/hosts Datei bereits ein Eintrag vorhanden ist. Dies machen wir uns nun zunutze und fügen dort unsere Servernamen ein:
Apfel:extra rofflox$ vi /etc/hosts
// hosts ## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 127.0.0.1 apfel 127.0.0.1 localhost.local 255.255.255.255 broadcasthost # Apache VHosts 127.0.0.1 webeo.local 127.0.0.1 shift.local 127.0.0.1 berta.local
Schritt 4: Neustarten des Apache-Webservers
Als letzten Schritt müssen wir nur noch den Webserver neustarten. Gebt hierzu folgenden Befehl im Terminal ein:
Apfel:extra rofflox$ sudo /usr/local/zend/apache2/bin/apachectl restart /usr/local/zend/apache2/bin/apachectl restart [OK]
Testen
Wenn ihr nun eine der oben definierten Namen in euren Browser eingebt, müsste dort eure Projektseite geladen werden. Falls nicht, läuft entweder ein anderer Webserver auf Port 80 (Insbesondere wenn ihr Websharing unter Mac OS X aktiviert habt) oder aber ihr habt in einer Datei irgend einen Tippfehler drin. Normalerweise sollte dann jedoch bereits beim Neustart des Apache-Webservers eine entsprechende Meldung ausgegeben werden.
Nun seid ihr dran
Hat bei euch alles auf Anhieb geklappt? Benutzt ihr ebenfalls eigene VirtualHosts für eure Projekte oder habt ihr gar eine andere, einfachere Variante?
Besten Dank für diese Anleitung - im Unterschied zu den Tutorials von Zend kommt man mit ihr nämlich wirklich zum Ziel. Da empfiehlt Zend schon den eigenen Server zu benutzen, aber bleibt im Quickstart-Guide zum Framework doch sehr im Vagen - und ich zumindest hatte bisher Apache-Einstellungen und Vhosts gemieden. Deswegen eignet sich die obige Anleitung sehr gut als Ergänzung hierzu: http://framework.zend.com/manual/de/learning.quickstart.create-project.html
[ ]Hallo unkultur. Besten Dank für dein Feedback. Die Zend Dokumentation ist in der Tat ab und an etwas irreführend oder geht zuwenig ins Detail. Falls du mal noch weitere und spezifischere VHosts einrichten möchtest, kann ich dir die Apache Doku empfehlen:
http://httpd.apache.org/docs/2.2/vhosts/
Auch wenn der Zend Server nicht überall gleich konfiguriert ist wie eine Standardinstallation eines Apache, so werden die einzelnen Teilbereiche dort sehr gut erörtert.
Gruss
[ ]Roman
Hi Roman,
dein Artikel ist zwar schon etwas älter, aber ich klinke mich hier trotzdem mal ein. Ich teste auch gerade den Zend Server CE und das Zend Studio. Momentan benutze ich MAMP Pro und Eclipse (neben anderen Tools/Editoren). Das schöne an MAMP ist, dass man per GUI einfach einen neuen VHost anlegen kann, der dann auch automatisch in die HOSTS Datei eingetragen wird. Naja, aber das kann ich verkraften
Meine Frage ist, ob man dem Zend Server irgendwie abgewöhnen kann alles (Apache, MySQL...) automatisch beim Login zu starten. In der Doku habe ich zumindest nichts gefunden.
Gruß,
[ ]Tobias
Hallo Tobias
Danke für den Hinweis. MAMP ist mir ein Begriff, wusste allerdings nicht das es mittlerweile eine Pro Version gibt.
Nach Rücksprache mit Ralph müsste der Server über das Startup-Item
ZendServer_initgestartet werden. Komischerweise finde ich dieses nicht unter den "Anmeldeobjeten" im Usermanager von Mac OS X. Daher ist ein Eingriff mit der Shell vermutlich unerlässlich:Das Startup-Item findest du unter
/Library/StartupItems/ZendServer_init/. Wenn du den Autostart komplett verhindern möchtest, lösche am besten einfach das kompletteZendServer_initVerzeichnis (Vorher evtl. noch eine Sicherungskopie anlegen).Alternativ kannst du die gleichnamige Datei
ZendServer_initanpassen. In den einzelnen Funktionen wird das Zend-Startup Skriptzendctl.shaufgerufen welches ebenfalls im Verzeichnis zu finden ist. Anstelle vonzendctl.sh startkannst du so bspw. nur den Apache überzendctl.sh start-apachestarten. Eine genaue Auflistung findest du im Skript unter der Funktion usage().Alle weitere Startup-Skripts findest du im Übrigen unter
/usr/local/zend/bin/. Wobeizendctl.sheigentlich ausreichen müsste.Gruss
[ ]Roman
WOW, danke für die schnelle und ausführliche Antwort. Das werde ich sofort mal ausprobieren.
[ ]Danke für das Tutorial!
[ ]Ich habe einfach nicht gesehen das die Zeile "Include conf/extra/httpd-vhosts.conf" auskommentiert war und habe mich die ganze Zeit gewundert, warum er die Datei nicht akzeptiert.
Hallo Toni
Danke für dein Feedback. Freut mich das es dich zum Ziel geführt hat.
Gruss
[ ]Roman