Installieren von Django auf IIS: Eine Schritt-für-Schritt-Anleitung
Veröffentlicht: 2022-03-11Auch wenn viele Django-Entwickler es für blasphemisch halten, ist es manchmal tatsächlich notwendig, Django-Anwendungen auf Windows/IIS bereitzustellen, insbesondere wenn Sie mit einem Kunden arbeiten, dessen Infrastruktur auf dem Windows-Ökosystem basiert. Der „Blasphemie“-Teil kommt von Django, das wirklich auf die Unix-Umgebung ausgerichtet war und sich stark auf Funktionen wie WSGI, FastCGI und Befehlszeilen-Tools stützte, die alle Windows fremd sind. Glücklicherweise verbessert sich die Django/IIS-Kompatibilität dank der Hinzufügung von Funktionen (die sonst ein Klacks wären) sowohl auf der Windows- als auch auf der Python+Django-Seite der Gleichung, wodurch dazu beigetragen wird, Kompatibilitätsprobleme zwischen diesen beiden unterschiedlichen technischen Welten zu lösen.
Dieses kurze, fokussierte Tutorial führt Sie durch die grundlegende Einrichtung eines Django-Projekts unter Windows. Es behandelt die Installation von Python, Django und verwandten Tools, einschließlich der Ausführung des Django-Projekts sowohl eigenständig als auch als FastCGI-Server. Letzteres wird übrigens immer wichtiger, seit IIS nun offiziell FastCGI unterstützt (bei IIS 7+ einfach CGI-Feature installieren).
Hinweis: Dieses Lernprogramm richtet sich an Personen, die Windows bereits kennen und mit der IIS-Verwaltungskonsole vertraut sind. Die in diesem Tutorial verwendete Version von IIS ist 8.5, aber die Beschreibungen und Techniken sind in früheren Versionen ähnlich. Das Tutorial basiert auf Python 2.7 und Django 1.7, da ich diese Versionen für meine Projekte verwende. Ein weiteres Django-Tutorial finden Sie hier.
Profi-Tipp: Wenn Sie mehrere Django-Projekte (oder sogar einfache Python-Projekte) bereitstellen oder Entwickler sind, sollten Sie sich virtualenv ansehen, ein Tool zum Erstellen isolierter Python-Umgebungen.
Python unter Windows installieren
Laden Sie zunächst Python herunter. Sowohl 32-Bit- als auch 64-Bit-MSI-Installationsprogramme werden bereitgestellt, und Sie sollten dasjenige auswählen, das für den Computer geeignet ist, auf dem Sie installieren.
PIP ist das Tool, das Python-Bibliotheken installiert und verwaltet (von denen Django nur ein Beispiel ist). Es wird durch Ausführen des Pip -Befehls an der Eingabeaufforderung aufgerufen. Es implementiert mehrere Unterbefehle, und zwei der nützlichsten sind install und freeze . PIP installiert auch Projektabhängigkeiten (zusätzliche Bibliotheken), falls das Projekt welche hat.
Durch Ausführen von pip install <package_name> wird das Paket und alle seine Abhängigkeiten (die verschachtelt und ziemlich komplex sein können) heruntergeladen und installiert. Durch Ausführen von pip install --upgrade <package_name> wird ein vorhandenes Paket ebenfalls auf die neueste Version aktualisiert. PIP unterstützt eine spezielle Syntax zum Installieren präziser Versionen eines Pakets statt nur "der neuesten". Dies geschieht durch Anhängen eines Operators und einer Versionsnummer an den Paketnamen; zB "Jinja2==2.7.3" (um eine genaue Version zu installieren) oder "six>=1.8" (um eine Version gleich oder größer als die angegebene Versionsnummer zu installieren).
Das Ausführen von pip freeze zeigt einfach die Liste der aktuell installierten Pakete in einem Format, das direkt von pip install verwendet werden kann.
Beachten Sie, dass einige Python / PIP-Pakete mit in C geschriebenen Bibliotheken geliefert werden, die kompiliert werden müssen, damit das Paket funktioniert. Wenn Sie Ihr System nicht so einrichten, dass es einen funktionierenden C-Compiler hat, der auch mit den ausführbaren Python-Dateien kompatibel ist, können Sie solche Pakete nicht installieren. Django ist eine reine Python-Bibliothek, sodass für die Installation kein C-Compiler erforderlich ist.
Es ist wichtig, dass Sie Python 2.7.9 oder höher installieren, da Python-Versionen, die mit 2.7.9 beginnen, PIP enthalten, den Python-Bibliotheks-/Paket-/Software-Manager, der verwendet wird, um alles andere in diesem Tutorial zu installieren.
Der Installationsprozess ist sehr unkompliziert und einfach. Es wird angeboten, Python im Verzeichnis C:\Python27
zu installieren, was Sie akzeptieren sollten, da es das Leben danach einfacher macht. Versuchen Sie, nicht der Windows-Gewohnheit nachzugeben, Dinge in Verzeichnissen mit Leerzeichen im Namen zu installieren.
Das Basisverzeichnis nach der Installation enthält etwa 8 Unterverzeichnisse, einige verschiedene Dateien und zwei ausführbare Dateien mit den Namen Python.exe
und PythonW.exe
. Ersteres ist der standardmäßige Befehlszeileninterpreter und die Python-Shell, während letzteres nur der Interpreter ist, der beim Aufrufen kein Konsolenfenster verwendet (oder erzeugt) und daher zum Ausführen von GUI-Python-Anwendungen geeignet ist.
Als nächstes sollte Python zur Umgebungsvariablen PATH des Systems hinzugefügt werden. Dies geschieht in den erweiterten Systemeinstellungen (oder Systemeigenschaften ) auf der Registerkarte Erweitert , indem Sie auf die Schaltfläche Umgebungsvariablen klicken. Es müssen zwei Verzeichnisse hinzugefügt werden: C:\Python27
und C:\Python27\Scripts
. Diese sollten durch Semikolons ( ;
) getrennt an die PATH-Liste angehängt werden. Das Ende Ihrer PATH-Variablen sollte wie folgt aussehen ;C:\Python27;C:\Python27\Scripts
.
Profi-Tipp: Vielleicht möchten Sie auch GOW installieren, eine leichte Sammlung von Unix-Befehlszeilendienstprogrammen ähnlich wie Cygwin. Es wird Ihnen Tools wie
ls
, aber auch interessantere wiemake
,wget
,curl
,ssh
,scp
,gzip
undtar
zur Verfügung stellen .
Django unter Windows installieren
Django kann mit PIP mit einem Befehl wie pip install django
. Der Prozess kann einige zusätzliche Abhängigkeiten einbeziehen, wenn sie nicht bereits auf Ihrem System vorhanden sind. Andernfalls wird einfach nur Django installiert, mit einer Ausgabe ähnlich der folgenden:
Downloading/unpacking django Installing collected packages: django Successfully installed django Cleaning up...
Sie können überprüfen, ob sowohl Python als auch Django für Windows funktionieren, indem Sie eine neue Windows-Eingabeaufforderung starten, den Befehl python
ausführen und an der Eingabeaufforderung von Python den Befehl import django
. Wenn es richtig funktioniert, sollte es nach dem Befehl import django
keine Ausgabe oder Meldungen geben; dh:
Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import django >>>
Installieren eines Django-Projekts unter Windows
Ein Django-„Projekt“ besteht aus einer oder mehreren „Apps“. Das Verzeichnis der obersten Ebene eines Projekts enthält normalerweise ein spezielles Projektunterverzeichnis, das Einstellungen und einige allgemeine Informationen auf Projektebene enthält, ein Unterverzeichnis pro App und ein Befehlszeilenskript namens manage.py
. Zum Beispiel:
C:\Devel\djangoproject\src>dir Volume in drive C is OS Volume Serial Number is 6A3D-C1B8 Directory of C:\Devel\djangoproject\src 22/12/2014 04:25 <DIR> . 22/12/2014 04:25 <DIR> .. 22/12/2014 04:19 <DIR> project 22/12/2014 04:58 <DIR> djangoapp 16/12/2014 03:30 <DIR> templates 16/12/2014 00:50 250 manage.py 1 File(s) 250 bytes 5 Dir(s) 23,552,929,792 bytes free
Django-Projekte können einfach verteilt werden, indem das gesamte Projektverzeichnis archiviert und auf einem anderen Computer dekomprimiert wird. Im obigen Beispiel enthält das project
das Unterverzeichnis project, das Anwendungsverzeichnis mit dem Namen djangoapp
und ein zusätzliches Unterverzeichnis templates
.
Das Skript manage.py
ist das „Schweizer Taschenmesser“ unter den Django-Anwendungen. Es erledigt alles, von der Erstellung neuer Apps über Datenbankmigrationen bis hin zum Ausführen eines (eingebetteten) HTTP-Testservers oder sogar eines FastCGI-Servers.
Ausführen eines Test-HTTP-Servers
Wenn das Projekt und seine Apps funktionieren, sollten Sie in der Lage sein, den standardmäßigen Django-HTTP-Server nur für die Entwicklung zu starten, indem Sie den Befehl manage.py runserver
, was zu einer Ausgabe ähnlich der folgenden führen sollte:
C:\Devel\djangoproject\src>manage.py runserver Performing system checks... System check identified no issues (0 silenced). December 23, 2014 - 01:19:02 Django version 1.7.1, using settings 'project.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.
Wie Sie den Meldungen entnehmen können, startet dies einen Server auf localhost, Port 8000. Sie können sofort mit Ihrem Webbrowser darauf zugreifen.
Konfigurieren und Ausführen eines FastCGI-Servers
Eine interessantere Option ist die Aktivierung eines FastCGI-Servers. Mit FastCGI können Sie IIS, Apache oder einen beliebigen anderen Webserver verwenden, um die Anwendung in einer Produktionsumgebung bereitzustellen. Damit dies funktioniert, müssen Sie fcgi.py (den Django-Verwaltungsbefehl zum Ausführen von Django unter Windows mit IIS über FastCGI) herunterladen und in das Unterverzeichnis management/commands
des Unterverzeichnisses der Django-App (nicht des Projekts!) legen. Sowohl die management
als auch die Befehlsunterverzeichnisse müssen eine leere Datei namens commands
enthalten (die diese Verzeichnisse in Python-Module __init__.py
).

fcgi.py
ist ein sehr einfacher und minimalistischer WSGI-zu-FastCGI-Adapter, der das Abhören eines TCP-Sockets oder einer Pipe nicht unterstützt und seine gesamte Verarbeitung unter Verwendung von stdin
und stdout durchführt. Daher ist es mit modernen Webservern wie nginx nicht verwendbar , funktioniert aber mit IIS.
Konfigurieren von IIS zum Ausführen einer FastCGI-Anwendung
Wenn das FastCGI-Modul in IIS geladen ist (oder einfach das CGI-Modul in IIS 7+), ist in der IIS-Verwaltungskonsole das Symbol „FastCGI-Einstellungen“ verfügbar. Django ist ein Framework, das über ein eigenes URL-Routing verfügt, sodass Django-Apps als „Handler“ in IIS für bestimmte Pfade installiert werden müssen. Um eine Django-App auf der Standardwebsite von IIS zu installieren, wählen Sie sie in der Verwaltungskonsole aus und öffnen Sie die Konfigurationsfunktion für Handler-Zuordnungen . Klicken Sie darin auf die Aktion Add Module Mapping… und geben Sie die folgenden Informationen ein:
- Anfragepfad : Legen Sie ihn auf
\*
fest, um alle Anfragen mit internem Django-Routing zu verarbeiten - Module : Stellen Sie es auf
FastCgiModule
ein, um das FastCGI-Modul von IIS zu verwenden - Ausführbare Datei : Hier müssen sowohl der
python.exe
-Pfad als auch seine Befehlszeilenargumente festgelegt werden, wobei das Pipe-Zeichen (|
) als Trennzeichen verwendet wird. Ein Beispielwert für diese Einstellung ist:C:\Python27\python.exe|C:\app\src\manage.py fcgi --pythonpath C:\app\src --settings project.settings
. Beachten Sie, dass Sie den Befehlfcgi
für das Skriptmanage.py
angeben und den Suchpfad des Python-Interpreters für das Projekt sowie den Namen des Python-Moduls für das Einstellungsmodul des Projekts manuell festlegen müssen. - Name : Sie können dies beliebig einstellen.
Ihr Konfigurationsdialog sollte in etwa so aussehen:
Klicken Sie als Nächstes auf die Schaltfläche Einschränkungen anfordern und bearbeiten Sie die Registerkarte Zuordnung . Deaktivieren Sie das Kontrollkästchen „Invoke handler only if the request is mapped to…“ (andernfalls hat IIS Probleme bei der Zuordnung dessen, was es für Unterverzeichnisse in der URL-Anforderung hält):
Klicken Sie im Handler-Informationsdialogfeld auf OK. IIS fordert Sie dann auf, die Erstellung eines übereinstimmenden FastCGI-Anwendungseintrags zu bestätigen, den Sie bestätigen müssen. Dieser Eintrag wird in der Funktion „ FastCGI-Einstellungen “ angezeigt, auf die im Stammbildschirm der IIS-Verwaltungskonsole zugegriffen werden kann. Der von IIS selbst erstellte Standardeintrag ist ausreichend, aber es stehen einige optionale Einstellungen zur Verfügung, die Sie möglicherweise nutzen möchten:
- Maximale Anzahl von Instanzen : Der Ansatz, den wir zum Ausführen von FastCGI-Anwendungen verwenden, ist Single-Process, Single-Threaded, was bedeutet, dass für jede gleichzeitige Anfrage ein separater Python-Interpreter-Prozess gestartet wird. Diese Einstellung begrenzt die Anzahl gleichzeitiger Django-App-Instanzen.
- Überwachen Sie Änderungen an der Datei : Standardmäßig sind die App-Prozesse nach dem Start aktiv, bis sie entweder manuell heruntergefahren werden oder bis sie Instance MaxRequest- Anforderungen verarbeiten. Durch die Verwendung dieser Einstellung überwacht IIS einen Zeitstempel einer beliebigen Datei, und wenn er sich ändert, werden App-Instanzen angehalten und neu geladen. Dies ist sowohl für Entwickler als auch für Produktionsumgebungen praktisch, da Apps bei Änderungen neu geladen werden können. Das „Überwachen des Zeitstempels einer Datei auf einen Reload-Indikator“ ist ein ziemlich seltsames Konzept unter Windows, aber es ist normal in Unix-ähnlichen Umgebungen, und so wurde es hier mit FastCGI übernommen.
Konfigurieren der statischen Ressourcen- und Medienverzeichnisse
Moderne Webanwendungen verwenden mehrere Ressourcendateien wie CSS, JavaScript und andere, und Django-Apps sind da keine Ausnahme. Django bietet eine sehr praktische Funktion, die es Entwicklern ermöglicht, die benötigten Ressourcen in den Anwendungsverzeichnisbaum zu integrieren, die jedoch von Django extrahiert und in ein geeignetes, statisches Verzeichnis kopiert werden können. Dies ist im Grunde eine vom Entwickler gesteuerte Funktion, und die Speicherorte, an denen Django die statischen Dateien speichert, werden in der settings.py
des Projekts gesteuert. Wohlerzogene Projekte werden dafür einen einigermaßen vernünftigen Pfad verwenden, der jedoch nicht standardisiert ist.
Apps, die hochgeladene Dateien verarbeiten, speichern diese in einem ähnlich verwalteten Verzeichnis, das in Django traditionell media
heißt. Die static
und media
müssen der IIS-Konfiguration als virtuelle Verzeichnisse hinzugefügt werden:
Der wichtige Schritt hier besteht darin, die Handlerzuordnungsfunktion für jedes der Verzeichnisse neu zu konfigurieren und den Django-App-Handler zu entfernen, wobei der StaticFile
Handler der wichtigste bleibt.
Beachten Sie, dass das static
Verzeichnis von IIS gelesen werden muss (sowie alle anderen Dateien und Verzeichnisse im Django-Projekt), das media
jedoch auch von IIS beschreibbar sein muss. Die endgültige Standortkonfiguration sollte wie folgt aussehen:
Eine Anmerkung zu Datenbanken
SQLite funktioniert standardmäßig unter Windows, ebenso wie auf Unix-ähnlichen Systemen. Die meisten anderen Open-Source-Datenbanken funktionieren jetzt unter Windows, sogar PostgreSQL, das ich empfehle. Bei bestehenden Windows-Installationen kann es jedoch erforderlich sein, Django mit dem MS SQL Server bereitzustellen. Dies ist entweder durch die Verwendung eines ODBC-Bridge-Treibers oder durch die Verwendung eines nativen MS SQL-Treibers möglich. Theoretisch funktionieren beide, aber ich habe sie nicht getestet. Zumindest die Datenbankverbindungsparameter (in der Datei settings.py
des Projekts) müssen geändert werden, um zu einer neuen Datenbank zu wechseln. Die Datenmigration muss manuell durchgeführt werden.
Beachten Sie, dass bei Verwendung der SQLite-Datenbank sowohl die Datenbankdatei als auch das Verzeichnis, in dem sie sich befindet, von IIS beschreibbar sein müssen.
Fehlerbehebung
Die beschriebene Konfiguration wurde getestet und funktioniert nachweislich, aber wenn etwas schief geht, finden Sie hier einige grundlegende Schritte zur Fehlerbehebung bei Ihrer Django für Windows-Installation:
- Versuchen Sie, die FastCGI-Befehlszeile selbst zu starten. Dies ist der Befehl, der in den FastCGI-Einstellungen konfiguriert ist und mit dem Befehl übereinstimmen muss, der in den Handler-Zuordnungen für die Site konfiguriert ist.
- Installieren Sie die Ablaufverfolgungsfunktion für IIS und konfigurieren Sie sie dann für die Django-Site in Ablaufverfolgungsregeln für fehlgeschlagene Anforderungen , um den gesamten Inhalt ( ), den Statuscode „500“ und den Ereignisschweregrad „Fehler“ zu verfolgen. Die Ablaufverfolgungen sind als XML-Dateien (mit angehängtem XSLT) im IIS-
C:\inetpub\logs\FailedReqLogFiles
(oder einem ähnlichen, abhängig von Ihrer Konfiguration) verfügbar. Anschließend müssen Sie die Ablaufverfolgung für die jeweilige Website (oder ein virtuelles Verzeichnis) in der Aktion *Configure->Failed request tracing… aktivieren .
Fazit
Natürlich ist Django auf eine Unix-ähnliche Umgebung zugeschnitten, und die am weitesten verbreitete und unterstützte Art, Django auszuführen, ist auf einem Linux-System (z. B. mit uwsgi und nginx).
Es ist jedoch nicht viel Arbeit erforderlich, um Django unter Windows zum Laufen zu bringen, wie in diesem Tutorial gezeigt wird. Einige der beschriebenen Schritte mögen aus reiner Windows-Perspektive kontraintuitiv erscheinen, sind aber notwendig und glücklicherweise ist der Aufwand für die Konfiguration nur einmalig. Nach der Konfiguration sollte sich die Django-Anwendung dann ähnlich verhalten wie auf einer Linux-Plattform.