Web-Server-Konfiguration¶
Um Django auf einem Webserver wie Apache2 laufen zu lassen, müssen einige Dinge konfiguriert werden. Ich empfehle Apache2 mit mod_wsgi, da dies nicht mit anderen Scriptsprachen interferiert und man sich nicht um Serverprozesse kümmern muss wie bei FastCGI.
Wenn du Lighttpd benutzen willst, solltest du dir die Lighttpd-Sektion am Ende dieser Seite ansehen.
Note
Bevor du anfängst, prüfe bitte ob das Verzeichnis db (in dem die Datenbankdatei
mumble-django.db3 liegt) für den Benutzer des Webservers schreibbar ist! Das
bedeutet im Normalfall dass du den Besitzer der Datei auf www-data
oder
httpd
setzen musst.
Es ist wichtig dass das Verzeichnis schreibbar sein muss, Apache muss darin für sqlite eine weitere Datei zusätzlich zur Datenbank anlegen dürfen.
Apache2¶
Für WSGI muss zuerst mod_wsgi installiert werden (Debian: apt-get install libapache2-mod-wsgi) und eine VHost-Konfiguration erstellt werden, die das WSGI-Script einbindet welches bei Mumble-Django beiliegt.
Das WSGI-Script¶
Das WSGI-Script ist ein einfaches Python-Script, welches bei Mumble-Django als mumble-django.wsgi beiliegt. Normalerweise brauchst du hier gar nichts ändern, weil es alle Pfade die es braucht automatisch erkennt.
Die Apache-VirtualHost-Config¶
Es gibt zwei Möglichkeiten, Mumble-Django in Apache zu integrieren. Du kannst entweder einen kompletten VirtualHost für Mumble-Django erstellen (z.b. als Subdomain), oder du kannst es in einen bereits existierenden VirtualHost integrieren. Die empfohlene Variante ist aber ein eigener VirtualHost.
Eigener VirtualHost¶
Ich benutze folgende Config auf meinem Server (diese Datei liegt Mumble-Django auch bei unter etc/apache2/dedicated_vhost.conf):
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Alias /static/admin/ /usr/share/pyshared/django/contrib/admin/media/
Alias /static/ /srv/mumble-django/htdocs/
Alias /mumble/media/ /srv/mumble-django/pyweb/mumble/media/
WSGIScriptAlias / /srv/mumble-django/mumble-django.wsgi
WSGIDaemonProcess mumble-django threads=25
WSGIProcessGroup mumble-django
WSGIScriptReloading Off
</VirtualHost>
In Debian würde man diese Config in einer Datei unter /etc/apache2/sites-available speichern, beispielsweise /etc/apache2/sites-available/mumble-django.
Du wirst hier die meisten Pfade anpassen müssen. Der Alias “media” muss auf das Verzeichnis zeigen in dem Django die Dateien für die Admin-Konsole speichert. Der voreingestellte Pfad stimmt für Debian Sid, wenn du Django über Apt installiert hast. Wenn du Django über python setup.py install installiert hast, musst du einen der letzten beiden Pfade nehmen, abhängig von der Python-Version.
Der Alias “/static/” muss auf Mumble-Djangos htdocs-Verzeichnis zeigen, der WSGIScriptAlias muss auf das WSGI-Script zeigen.
Hint
Die Slashes am Ende der Pfade werden gebraucht!
Existierenden VHost mitbenutzen¶
Wenn du Mumble-Django in einen existierenden VirtualHost integrieren willst, musst du die obige Config mit der des anderen VHost zusammenführen. Für ein Beispiel wie das aussieht sieh dir die Datei etc/apache2/shared_vhost.conf an, die mit Mumble-Django auch mitgeliefert wird.
Hint
Vergiss nicht die Einstellung MUMBLE_DJANGO_URL
in pyweb/settings.py
anzupassen!
Die Apache-Konfiguration neu laden¶
Nachdem du die Datei erstellt hast, füge sie der Server-Konfiguration hinzu indem du a2ensite mumble-django ausführst, und lade die Serverkonfiguration per /etc/init.d/apache2 reload neu. Dann kannst du Mumble-Django erreichen, indem du example.com oder www.example.com ansurfst.
lighttpd¶
Um Mumble-Django mit Lighttpd zu benutzen, musst du FastCGI aufsetzen und deinen Lighty so konfigurieren dass er darauf verbinden kann. Eine Beispiel-Config für Lighty mit einigen Erklärungen wie das geht liegt bei Mumble-Django bei, unter etc/lighttpd/lighttpd.conf.
Fehlerbehebung¶
Unable to open Database file¶
Dieser Fehler bedeutet dass Apache nicht die Zugriffsrechte hat die er benötigt
um die Datenbankdatei öffnen zu können. Dieses Problem liegt allerdings nicht
an der Datei selbst, sondern die Berechtigungen des Verzeichnisses in dem du
Mumble-Django installiert hat sind falsch und müssen korrigiert werden. Dazu
musst du normalerweise den Besitzer des Verzeichnisses auf www-data
setzen,
oder chmod a+rx setzen.
Trying to write to readonly database¶
Das bedeutet dass Apache die Datenbankdatei zwar zum Lesen öffnen konnte, aber
nicht zum Schreiben. Wie beim Verzeichnis auch kannst du das normalerweise beheben
indem du den Besitzer der Datei mumble-django.db3 auf www-data
setzt, oder
chmod a+w setzt. Letzteres ist allerdings eine ernste Sicherheitslücke, daher
ist der empfohlene Weg den Besitzer richtig zu setzen.
401 Invalid Request¶
Wenn du im Browser einen Fehler ähnlich wie “Your Browser sent a request this server could not understand” bekommst, sieh bitte nach ob dein Webserver das Modul mod_reqtimeout geladen hat und deaktiviere es gegebenenfalls, weil es gelegentlich dieses Problem verursacht. Auf Debian/Ubuntu-Systemen geht dies mit den Befehlen a2dismod reqtimeout und /etc/init.d/apache2 restart.
Python Egg Cache¶
Manche Benutzer hatten Probleme mit dieser Konfiguration, weil der WSGI-Handler nicht startete und im Logfile folgende Nachricht erschien:
The following error occurred while trying to extract file(s) to the Python egg
cache:
[Errno 13] Permission denied: '/root/.python-eggs'
Um das zu beheben, reicht es den Egg-Cache von Python in ein anderes Verzeichnis zu legen. Entferne dazu das Kommentar-Zeichen vor folgender Zeile in mumble-django.wsgi:
os.environ['PYTHON_EGG_CACHE'] = '/tmp/pyeggs'
Damit legt Python seinen Egg-Cache in /tmp an. Lade nun die Server-Konfiguration neu, und es sollte funktionieren.
Debian: mumble-server-web¶
Wenn du in Debian das Paket mumble-server-web installiert hast, wird die Hauptseite von Mumble-Django nicht erscheinen, weil mumble-server-web einen Alias namens “/mumble” in die Apache-Konfiguration einfügt und damit eine URL von Mumble-Django überschreibt. Um das aufzulösen deinstalliere einfach mumble-server-web, Mumble-Django bietet sowieso alle Funktionen dieser Scripts.
mod_python¶
mod_python macht manchmal Probleme, weil es in irgendeiner Weise verhindert dass die Seite lädt. Wenn das der Fall ist kannst du entweder mod_python deinstallieren (oder anstelle von mod_wsgi benutzen), oder auf FastCGI umsteigen.
Unable to connect to WSGI daemon process ‘mumble-django’¶
Dieses Problem tritt auf wenn der WSGI-Prozess sein Socket nicht erstellen kann, weil er sich dann einfach beendet und Apache nicht verbinden kann.
Um das zu beheben, füge die folgende Zeile deiner Apache-Config im Server-Context
hinzu (also außerhalb einer <VirtualHost>
-Direktive):
WSGISocketPrefix /tmp/wsgi