Installazione di Django su IIS: un tutorial passo-passo
Pubblicato: 2022-03-11Sebbene molti sviluppatori Django possano considerarlo blasfemo, a volte è effettivamente necessario distribuire applicazioni Django su Windows/IIS, specialmente quando si lavora con un client che ha basato la propria infrastruttura sull'ecosistema Windows. La parte della "blasfemia" deriva dal fatto che Django è stato davvero preso di mira dall'ambiente Unix, facendo molto affidamento su funzionalità come WSGI, FastCGI e strumenti da riga di comando, tutti estranei a Windows. Fortunatamente, la compatibilità Django/IIS sta migliorando, grazie all'aggiunta di funzionalità (che altrimenti sarebbero un pasticcio) su entrambi i lati dell'equazione Windows e Python+Django, aiutando così a risolvere i problemi di compatibilità tra questi due mondi tecnici disparati.
Questo breve tutorial mirato ti guida attraverso la configurazione di base di un progetto Django su Windows. Copre l'installazione di Python, Django e strumenti correlati, inclusa l'esecuzione del progetto Django sia standalone che come server FastCGI. Quest'ultimo è sempre più importante, per inciso, dal momento che IIS ora supporta ufficialmente FastCGI (su IIS 7+, installa semplicemente la funzione CGI).
Nota: questo tutorial è destinato a coloro che hanno una conoscenza pratica di Windows e che hanno familiarità con la console di gestione di IIS. La versione di IIS utilizzata in questo tutorial è 8.5, ma le descrizioni e le tecniche sono simili nelle versioni precedenti. Il tutorial è basato su Python 2.7 e Django 1.7, poiché queste sono le versioni che uso per i miei progetti. Puoi trovare un altro tutorial di Django qui.
Suggerimento per professionisti: se hai intenzione di distribuire più progetti Django (o anche un semplice Python), o se sei uno sviluppatore, dovresti guardare virtualenv, uno strumento per creare ambienti Python isolati.
Installazione di Python su Windows
Innanzitutto, scarica Python. Vengono forniti entrambi i programmi di installazione MSI a 32 bit e 64 bit e dovresti scegliere quello appropriato per il computer su cui stai installando.
PIP è lo strumento che installa e mantiene le librerie Python (di cui Django è solo un esempio). Viene richiamato eseguendo il comando pip al prompt dei comandi. Implementa diversi sottocomandi e due dei più utili sono install e freeze . PIP installerà anche le dipendenze del progetto (librerie aggiuntive), se il progetto ne ha.
L'esecuzione di pip install <nome_pacchetto> scaricherà e installerà il pacchetto e tutte le sue dipendenze (che possono essere annidate e piuttosto complesse). L'esecuzione di pip install --upgrade <nome_pacchetto> aggiornerà allo stesso modo un pacchetto esistente alla sua versione più recente. PIP supporta una sintassi speciale per l'installazione di versioni precise di un pacchetto anziché solo "quella più recente". Viene fatto aggiungendo un operatore e un numero di versione al nome del pacchetto; es. "Jinja2==2.7.3" (per installare una versione precisa) o "six>=1.8" (per installare qualsiasi versione uguale o maggiore del numero di versione specificato).
L'esecuzione di pip freeze mostra semplicemente l'elenco dei pacchetti attualmente installati in un formato utilizzabile direttamente da pip install .
Nota che alcuni pacchetti Python/PIP sono dotati di librerie scritte in C, che devono essere compilate affinché il pacchetto funzioni. A meno che tu non configuri il tuo sistema per avere un compilatore C funzionante che sia anche compatibile con gli eseguibili Python, non sarai in grado di installare tali pacchetti. Django è una libreria Python pura, quindi non richiede un compilatore C per l'installazione.
È importante installare Python 2.7.9 o versioni successive, poiché le versioni di Python che iniziano con 2.7.9 includono PIP, la libreria/pacchetti/gestore software Python che viene utilizzato per installare tutto il resto in questo tutorial.
Il processo di installazione è molto semplice e diretto. Offrirà l'installazione di Python nella directory C:\Python27
, che dovresti accettare in quanto rende la vita più facile in seguito. Cerca di non cedere all'abitudine di Windows di installare roba in directory con spazi nei loro nomi.
La directory di base dopo l'installazione conterrà circa 8 sottodirectory, alcuni file vari e due eseguibili denominati Python.exe
e PythonW.exe
. Il primo è l'interprete della riga di comando predefinito e la shell Python, mentre il secondo è solo l'interprete, che non utilizzerà (o genererà) una finestra della console se richiamato, e per questo motivo è adatto per l'esecuzione di applicazioni Python della GUI.
Successivamente, Python dovrebbe essere aggiunto alla variabile di ambiente PATH del sistema. Questo viene fatto in Impostazioni di sistema avanzate (o Proprietà di sistema ), nella scheda Avanzate , facendo clic sul pulsante Variabili d'ambiente . Ci sono due directory da aggiungere: C:\Python27
e C:\Python27\Scripts
. Questi devono essere aggiunti all'elenco PATH, separati da punto e virgola ( ;
). La fine della tua variabile PATH dovrebbe apparire come ;C:\Python27;C:\Python27\Scripts
.
Suggerimento per professionisti: potresti anche voler installare GOW, una raccolta leggera di utilità da riga di comando Unix simili a Cygwin. Ti fornirà strumenti come
ls
, ma anche strumenti più interessanti comemake
,wget
,curl
,ssh
,scp
,gzip
etar
.
Installazione di Django su Windows
Django può essere installato utilizzando PIP con un comando come pip install django
. Il processo potrebbe inserire alcune dipendenze aggiuntive se non sono già presenti sul tuo sistema. In caso contrario, installerà semplicemente solo Django, con un output simile al seguente:
Downloading/unpacking django Installing collected packages: django Successfully installed django Cleaning up...
Puoi verificare se sia Python che Django per Windows funzionano avviando un nuovo prompt dei comandi di Windows, eseguendo il comando python
e immettendo il comando import django
al prompt di Python. Se funziona correttamente, non dovrebbero esserci output o messaggi dopo il comando import django
; cioè:
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 >>>
Installazione di un progetto Django su Windows
Un “progetto” Django è costituito da una o più “app”. La directory di primo livello di un progetto di solito contiene una sottodirectory di progetto speciale che contiene le impostazioni e alcune informazioni generali a livello di progetto, una sottodirectory per app e uno script della riga di comando chiamato manage.py
. Per esempio:
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
I progetti Django possono essere distribuiti semplicemente archiviando l'intera directory del progetto e decomprimendola su un'altra macchina. Nell'esempio sopra, il progetto contiene la sottodirectory del project
, la directory dell'applicazione denominata djangoapp
e una sottodirectory dei templates
ausiliari.
Lo script manage.py
è il "coltellino svizzero" delle applicazioni Django. Fa di tutto, dalla creazione di nuove app, alle migrazioni di database, all'esecuzione di un server HTTP di prova (incorporato) o persino di un server FastCGI.
Esecuzione di un server HTTP di prova
Se il progetto e le sue app funzionano, dovresti essere in grado di avviare il server HTTP di solo sviluppo Django predefinito eseguendo il comando manage.py runserver
, che dovrebbe generare un output simile al seguente:
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.
Come puoi vedere dai messaggi, questo avvia un server su localhost, porta 8000. Puoi accedervi immediatamente con il tuo browser web.
Configurazione ed esecuzione di un server FastCGI
Un'opzione più interessante è abilitare un server FastCGI. Con FastCGI, puoi utilizzare IIS, Apache o qualsiasi altro server Web per servire l'applicazione in un ambiente di produzione. Affinché funzioni, è necessario scaricare fcgi.py (il comando di gestione di Django per eseguire Django su Windows con IIS tramite FastCGI) e inserirlo nella sottodirectory management/commands
della sottodirectory dell'app Django (non del progetto!). Sia la sottodirectory di management
che quella dei commands
devono avere un file vuoto chiamato __init__.py
(che trasforma quelle directory in moduli Python).

fcgi.py
è un adattatore da WSGI a FastCGI molto semplice e minimalista che non supporta l'ascolto su un socket TCP o una pipe ed esegue tutta la sua elaborazione utilizzando stdin
e stdout`. In quanto tale, non è utilizzabile con i server Web moderni come nginx, ma funzionerà con IIS.
Configurazione di IIS per eseguire un'applicazione FastCGI
Se il modulo FastCGI è caricato in IIS (o semplicemente il modulo CGI in IIS 7+), la console di gestione di IIS avrà l'icona "Impostazioni FastCGI" disponibile. Django è un framework che ha il proprio routing URL, quindi le app Django devono essere installate come "gestore" in IIS per percorsi specifici. Per installare un'app Django sul sito Web predefinito di IIS, selezionala nella console di gestione e apri la funzionalità di configurazione dei mapping del gestore . In esso, fai clic sull'azione Aggiungi mappatura modulo... e inserisci le seguenti informazioni:
- Percorso della richiesta : impostalo su
\*
per gestire tutte le richieste con il routing interno di Django - Modulo : impostalo su
FastCgiModule
per utilizzare il modulo FastCGI di IIS - Eseguibile : qui è necessario impostare sia il percorso
python.exe
che i relativi argomenti della riga di comando, utilizzando il carattere pipe (|
) come separatore. Un valore di esempio per questa impostazione è:C:\Python27\python.exe|C:\app\src\manage.py fcgi --pythonpath C:\app\src --settings project.settings
. Si noti che è necessario specificare il comandofcgi
per lo scriptmanage.py
e impostare manualmente il percorso di ricerca dell'interprete Python per il progetto, nonché il nome del modulo Python per il modulo di impostazione del progetto. - Nome : puoi impostarlo come preferisci.
La tua finestra di configurazione dovrebbe assomigliare a questa:
Quindi, fai clic sul pulsante Richiedi restrizioni e modifica la scheda Mappatura . Deseleziona la casella di controllo "Richiama il gestore solo se la richiesta è mappata su..." (altrimenti, IIS avrà problemi a mappare quelle che pensa siano sottodirectory nella richiesta URL):
Fare clic su OK nella finestra di dialogo delle informazioni sul gestore. IIS ti chiederà quindi di confermare la creazione di una voce dell'applicazione FastCGI corrispondente che dovrai confermare. Questa voce sarà visibile nella funzione Impostazioni FastCGI , accessibile dalla schermata principale di IIS Management Console. La voce predefinita creata da IIS stesso è adeguata, ma sono disponibili alcune impostazioni opzionali di cui potresti voler sfruttare:
- Numero massimo di istanze : l'approccio che stiamo utilizzando per eseguire le applicazioni FastCGI è a processo singolo, a thread singolo, il che significa che verrà avviato un processo di interprete Python separato per ogni richiesta simultanea . Questa impostazione limita il numero di istanze simultanee dell'app Django.
- Monitora le modifiche al file : per impostazione predefinita, una volta avviati, i processi dell'app saranno attivi fino all'arresto manuale o fino a quando non gestiranno le richieste di istanze MaxRequest . Usando questa impostazione, IIS monitorerà un timestamp di un file arbitrario e, se cambia, interromperà e ricaricherà le istanze dell'app. Questo è conveniente sia per gli sviluppatori che per gli ambienti di produzione, poiché consente di ricaricare le app quando vengono modificate. Il "monitora il timestamp di un file per un indicatore di ricarica" è un concetto abbastanza strano su Windows, ma è normale in ambienti simili a Unix, quindi è stato riportato qui con FastCGI.
Configurazione della risorsa statica e delle directory multimediali
Le moderne applicazioni Web utilizzano più file di risorse, come CSS, JavaScript e altri, e le app Django non fanno eccezione. Django fornisce una funzionalità molto conveniente che consente agli sviluppatori di integrare le risorse necessarie nell'albero delle directory dell'applicazione, ma che può essere estratta e copiata da Django in una directory statica adeguata. Questa è fondamentalmente una funzionalità controllata dallo sviluppatore e le posizioni in cui Django memorizzerà i file statici sono controllate nel settings.py
del progetto. I progetti ben educati utilizzeranno un percorso ragionevolmente sano per questo, ma non è standardizzato.
Le app che gestiscono i file caricati li archiviano in una directory gestita in modo simile che, in Django, è tradizionalmente denominata media
. Le directory static
e media
devono essere aggiunte alla configurazione di IIS come directory virtuali:
Il passaggio importante qui è riconfigurare la funzione Mapping del gestore per ciascuna delle directory e rimuovere il gestore dell'app Django, lasciando il gestore StaticFile
come il più importante.
Si noti che la directory static
deve essere leggibile da IIS (così come tutti gli altri file e directory nel progetto Django), ma anche la directory media
deve essere scrivibile da IIS. La configurazione finale del sito dovrebbe essere simile alla seguente:
Una nota sui database
SQLite funziona per impostazione predefinita su Windows, così come su sistemi simili a Unix. La maggior parte degli altri database open source ora funziona su Windows, anche PostgreSQL, che consiglio. Nelle installazioni Windows esistenti, tuttavia, potrebbe essere necessario distribuire Django con MS SQL Server. Ciò è possibile utilizzando un driver bridge ODBC o utilizzando un driver MS SQL nativo. In teoria funzionano entrambi, ma non li ho testati. Almeno i parametri di connessione al database (nel file settings.py
del progetto) devono essere modificati per passare a un nuovo database. La migrazione dei dati deve essere eseguita manualmente.
Si noti che se si utilizza il database SQLite, sia il file del database che la directory in cui si trova devono essere scrivibili da IIS.
Risoluzione dei problemi
La configurazione descritta è stata testata e ha dimostrato di funzionare, ma se qualcosa va storto, ecco alcuni passaggi di base per la risoluzione dei problemi di installazione di Django per Windows:
- Prova ad avviare tu stesso la riga di comando FastCGI. Questo è il comando configurato nelle Impostazioni di FastCGI e che deve corrispondere a quello configurato nelle Mappature degli Handler per il sito.
- Installa la funzionalità di traccia per IIS, quindi configurala per il sito Django in Regole di traccia delle richieste non riuscite per tracciare tutto il contenuto ( ), il codice di stato "500" e la gravità dell'evento "Errore". Le tracce saranno disponibili come file XML (con XSLT allegato) nella directory
C:\inetpub\logs\FailedReqLogFiles
di IIS (o simile, a seconda della configurazione). È quindi necessario abilitare la traccia per il particolare sito Web (o una directory virtuale) nell'azione *Configura->Traccia richiesta non riuscita....
Conclusione
A dire il vero, Django è fatto su misura per un ambiente simile a Unix, e il modo più diffuso e supportato per eseguire Django è su un sistema Linux (ad esempio, con uwsgi e nginx).
Eppure non ci vuole molto lavoro per far funzionare Django su Windows, come mostrato in questo tutorial. Alcuni dei passaggi descritti possono sembrare controintuitivi dal punto di vista puramente Windows, ma sono necessari e, fortunatamente, lo sforzo speso nella configurazione è una tantum. Una volta configurata, l'applicazione Django dovrebbe quindi comportarsi più o meno allo stesso modo di una piattaforma Linux.