Python in Apache2 mit mod_python (Debian Etch) einbetten

Version 1.0
Autor: Falko Timme <ft [at] falkotimme [dot] com>

Die folgende Anleitung zeigt, wie man mod_python auf einem Debian Etch Server mit Apache2 installiert und nutzt. mod_python ist ein Apache Modul, das den Python Interpreter auf dem Server einbettet. Dieses Modul ermöglicht es, webbasierte Applikationen in Python zu schreiben, die wesentlich schneller als das bekannte CGI ablaufen. Dazu kommen fortgeschrittene Features wie beispielsweise persistente Datenbankverbindungen, die Speicherung von Daten zwischen Seitenaufrufen und der Zugriff auf interne Apache-Funktionen.

Wie immer kommt auch diese Anleitung ohne Gewähr.

1 Vorbemerkung

Dieses Howto wurde auf einem Debian Etch Server mit der IP Adresse 192.168.0.100 getestet, auf dem Apache2 bereits installiert ist.

In diesem Beispiel nutze ich ausserdem einen virtuellen Host mit dem Document Root /var/www.

2 Die Installation von mod_python

Um mod_python zu installieren, geben wir folgenden Befehl ein:

apt-get install libapache2-mod-python

3 Apache konfigurieren

Apache muss nun so konfiguriert werden, dass es Python Dateien verarbeiten kann. Dafür gibt es zwei Möglichkeiten. Die erste standardmässige Möglichkeit wäre Publisher Handler zu benutzen. Dieses ermöglicht das Schreiben von reinen Python Skripten mit der Dateiendung .py, das von Apache interpretiert werden kann. Die zweite Möglichkeit wäre die Benutzung von PSP Handler. PSP ist die Abkürzung für Python Server Pages. PSP ermöglicht die Einbettung des Python Codes direkt in den HTML Quelltext, ähnlich wie bei PHP. PSP Dateien haben die Endung .psp.

3.1 Der Publisher Handler

Um den Publisher Handler zu aktivieren, müssen wir auf die Konfiguration des virtuellen Hosts zugreifen. Ich nutze hier den standardmässigen V-Host auf Debian mit dem Document Root /var/www; die Konfiguration für diesen virtuellen Host befindet sich in /etc/apache2/sites-available/default. Ich füge AddHandler mod_python .py hinzu, PythonHandler mod_python.publisher, und PythonDebug On:

vi /etc/apache2/sites-available/default

[...]
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddHandler mod_python .py
                PythonHandler mod_python.publisher
                PythonDebug On
        </Directory>
[...]

Hiernach wird Apache neu gestartet:

/etc/init.d/apache2 restart

Anschliessend erstellen wir einen kleinen Python Test Skript (z. B. /var/www/test.py), der puren Python Quelltext enthält…

vi /var/www/test.py

def index(req):
  return "Test successful";

… und rufen diesen in einem Browser auf, z.B. http://192.168.0.100/test.py. Wenn alles gut geht, sollte nun im Browser Test successful angezeigt werden.

3.2 Der PSP Handler

Um den Publisher Handler zu aktivieren, müssen wir ebenfalls auf die Konfiguration des virtuellen Hosts zugreifen. Ich nutze hier den standardmässigen V-Host auf Debian mit dem Document Root /var/www; die Konfiguration hierfür befindet sich in /etc/apache2/sites-available/default. Ich füge AddHandler mod_python .psp hinzu, PythonHandler mod_python.psp, und PythonDebug On:

vi /etc/apache2/sites-available/default

[...]
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddHandler mod_python .psp
                PythonHandler mod_python.psp
                PythonDebug On
        </Directory>
[...]

Auch hiernach wird Apache neu gestartet:

/etc/init.d/apache2 restart

Für einen Test erstellen wir einen kleinen PSP Skript, z. B. /var/www/test.psp, der sowohl HTML als auch Python Quelltext beinhaltet…

vi /var/www/test.psp

<html>
<body>
<h1><% req.write("Hello!") %></h1>
</body>

</html>

… und rufen diesen in einem Browser auf, z. B. http://192.168.0.100/test.psp. Wenn alles richtig ist, sollte nun Hello! im Browser angezeigt werden.

4 Python Modules

Werden weitere Python Module benötigt, kann man sie folgendermassen heraussuchen:

apt-cache search python

Wähle die benötigten Module aus und installiere sie folgendermassen:

apt-get install python-mysqldb python-xml

Danach bitte Apache neu starten:

/etc/init.d/apache2 restart

5 Links

Das könnte dich auch interessieren …