Installation von mod_wsgi unter Mac OS X 10.6

Ich wollte endlich mal mod_wsgi zur Entwicklung von Python Webapplikationen auf meinem Mac Mini ausprobieren. Die Installation von mod_wsgi mit Hilfe von MacPorts erwies sich dabei als sehr einfach. Die anschliessende notwendige Konfiguration von Apache2 ist aber aufwendig genug, so dass ich sie hier mal im Detail beschreiben möchte:

0. Unter Systemeinstellungen/Freigabe die Webfreigabe deaktivieren um den von Apple in Mac OS X mitgelieferten Apache2 Server zu deaktivieren.

1. Installation von mod_wsgi mit MacPorts:
> sudo port install mod_wsgi
Falls noch nicht vorhanden, wird Apache2 dabei mit installiert.

2. Starten und Testen von Apache:
> sudo /opt/local/apache2/bin/apachectl -k start
Nach dem Start von Apache kann man http://localhost mit dem Browser öffnen. Es sollte "It works!" angezeigt werden.

3. Apache beim Systemstart automatisch starten:
> sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist

4. Aktivierung der Benutzerverzeichnisse, so dass Webseiten die unter http://localhost/~username/Sites liegen, angezeigt werden:
Dazu muss die Zeile
Include conf/extra/httpd-userdir.conf
in der Datei
/opt/local/apache2/conf/httpd.conf
einkommentiert werden. Dann in der Datei
/opt/local/apache2/conf/extra/httpd-userdir.conf
die Zeilen
#
# Include user configurations
#
Include /private/etc/apache2/users/*.conf
hinzufügen. Danach muss Apache2 neugestartet werden:
> sudo /opt/local/apache2/bin/apachectl -k restart
(Mehr dazu bei How to get a Apache, PHP, MySQL (MAMP) setup.)

5. Aktivierung des mod_wsgi Moduls für Apache2:
Dazu muss die Zeile
LoadModule wsgi_module modules/mod_wsgi.so
zu der Datei
/opt/local/apache2/conf/httpd.conf
hinzugefügt werden. Danach wieder Apache neustarten.

6. Anlegen einer wsgi-Applikationen:
Zum Testen kann man erstmal folgende einfache wsgi-Applikation anlegen:
> pico hello.wsgi
import sys
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!\n'
output+= str(sys.path)
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)

return [output]

Sie gibt "Hello World!" zurück und zusätzlich die System-Pfade unter denen das wsgi-Modul nach Python-Modulen sucht (Siehe auch mod_wsgi - Quick Configuration Guide).

7. Einrichten eines Virtual Hosts für wsgi-Applikationen:
Dazu muss die Zeile
Include conf/extra/httpd-vhosts.conf
in der Datei
/opt/local/apache2/conf/httpd.conf
einkommentiert werden. In der Datei
die Zeilen
<VirtualHost *:80>
ServerName www.mydomain.org
ServerAlias mydomain.org
ServerAlias my.dyndns.org
ServerAdmin webmaster@mydomain.org

WSGIScriptAlias / /Users/username/Sites/webapp/hello.wsgi
WSGIScriptReloading On

<Directory /Users/username/Sites/webapp>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
einfügen. Dabei steht mydomain.org für den gewünschten Domainnamen, my.dyndns.org für einen eventuell vorhandenen dynamischen DNS - Eintrag. (Wie man Virtual Hosts noch besser mit DynDNS verwenden kann steht bei Virtual-Hosts und DynDNS zusammen einsetzen. Das dort angesprochene Wildcard-Feature kostet jedoch 15 $ im Jahr). WSGIScriptAlias gibt an, dass die Root-Adresse "/" des virtuellen Servers die wsgi-Applikation hello.wsgi
im Verzeichnis /Users/username/Sites/webapp aufruft. Während der Entwicklung macht es auch Sinn WSGIScriptReloading zu aktivieren, damit man nicht bei jeder Änderung an der wsgi-Applikation den Apache-Server neustarten muss. Mehr dazu im mod_wsgi - Quick Configuration Guide. Nach dem Konfigurieren des Virtualhosts muss der Apache-Server wieder neugestartet werden. Jedoch funktionieren die angegeben Domainnamen noch nicht. Dazu müssen erst noch in der Datei
/private/etc/hosts
die Zeilen
127.0.0.1 mydomain.org
127.0.0.1 www.mydomain.org
hinzugefügt werden (Siehe Creating a virtual host in Mac OS X 10.5 ).

8. Aufruf von http://mydomain.org bzw. http://www.mydomain.org mit dem Browser:
Wenn alles geklappt hat sollte man jetzt "Hello World!" im Browser sehen und darunter die Python-Systempfade.
Avatar
Andreas Maier
Data Alchemist

My interests include machine learning, software development, physics and mathematics

Related