Come spiegare l'installazione di Django / Python su Python-newbie che esegue un server IIS condiviso [chiuso]


9

Per motivi indipendenti dalla mia volontà, il nostro sito Web è ospitato da un provider di hosting che utilizza IIS per i propri server. Al momento offrono PHP e ASP, e anche Python e Perl tramite cgi-script.

Voglio riprogettare, riscrivere il nostro sito Web e voglio passare da PHP a una configurazione Python / Django. Il provider di hosting è aperto a suggerimenti, ma è chiaro che "Non sappiamo davvero cos'è Python o come funziona, ma se puoi spiegarcelo, proveremo a configurarti con tutto ciò di cui hai bisogno" .

Tuttavia, potrei sapere come impostare Django in un ambiente di hosting condiviso su apache / mod_python, ma non ho idea di come sarebbe impostato su IIS e certamente non come sarebbe impostato per un ambiente di hosting condiviso. Ho cercato su Google un po ', ma la maggior parte delle risorse che trovo presumono che l'amministratore di sistema 1) sappia che Python / Django e 2) sta usando l'hosting IIS dedicato per il suo sito.

Qualcuno potrebbe spiegare come posso spiegare il processo al mio provider di hosting o darmi indicazioni su buone risorse dettagliate che posso inoltrare al mio provider di hosting? Tieni presente che le persone che gestiscono l'hosting potrebbero sapere "tutto" su IIS, ma non hanno idea di come gestire Python.

Risposte:


8

Se sei bloccato con l'utilizzo di IIS, usa PyISAPIe invece di CGI se puoi. Di seguito sono riportate le istruzioni e i collegamenti per PyISAPIe. Il tuo host web saprà molto di più sulle estensioni ISAPI se gestiscono IIS che su Python e non hanno bisogno di sapere molto su Python con PyISAPIe.

UN MOLTO MIGLIORE MODO DI FARE QUESTO STA UTILIZZANDO PYISAPIe, UN'ESTENSIONE ISAPI . PyISAPIe è molto, molto più veloce del CGI su IIS7. Quello che fa è simile a mod_python su Apache. La homepage del progetto PyISAPIe contiene istruzioni per la configurazione di Django con WSGI su PyISAPIe. Ciò porterà le tue prestazioni a velocità ragionevoli per un sito Web pubblico / ad alto traffico.

L'impostazione di Django in un IIS + Python tramite ambiente CGI sarà terribilmente lenta per qualsiasi uso di produzione. Non dovresti mai usarlo per un sito web sul quale prevedi di servire più di una manciata di richieste al minuto. Inoltre, ti limita fortemente in ciò che puoi memorizzare nella memoria nel framework di cache di Django, poiché il processo dell'app Django viene riavviato con ogni nuova richiesta.

In un server web sano come Apache, lighttpd, ecc., Con mod_python, l'interprete Python che esegue il processo Django rimane in memoria e viene inizializzato con ogni nuovo thread di lavoro Apache che gestisce molte richieste nel corso del tempo. Ciò significa che Python + Django non viene chiuso e riavviato per ogni nuova richiesta. In una configurazione FastCGI, il web server (Apache o lighttpd per esempio) crea un socket (dominio UNIX o TCP) attraverso il quale comunica con un'applicazione FastCGI (la tua applicazione web Django) tramite il protocollo FastCGI. Idem per le configurazioni proxy HTTP (parlano HTTP invece di FastCGI). In un ambiente CGI, viene chiamato l'interprete Python che esegue l'applicazione Django, completamente nuovo per ogni richiesta, quindi l'applicazione non può mantenere lo stato tra le richieste in memoria e non può essere memorizzata correttamente nella cache in nessun luogo tranne che in un database.

Abbastanza rantolo, se devi usare IIS + CGI + Django, ecco come realizzare questa orribile cosa orribile: Usa il seguente codice per creare il tuo script CGI che esegue la tua app Django (traduce tra CGI e WSGI). Dovrai modificare un po 'lo script per farlo puntare alla tua app e al tuo codice Django. Questo è lo script CGI a cui dovresti passare le richieste. Successivamente, è necessario inoltrare / riscrivere tutte le richieste allo script CGI ...

Sotto IIS6, avrai bisogno di un equivalente a mod_rewrite come IISRewrite, che penso non sia gratuito ed è chiuso. Sotto IIS7, Microsoft includeva finalmente un modulo di riscrittura degli URL. La documentazione per questo si trova qui . Le istruzioni per la creazione di regole di riscrittura in IIS7 sono qui . Dovrai inoltrare tutto all'URL di base di destinazione per essere gestito dal tuo script CGI.


Poiché l'hosting è condiviso, il problema principale è come il provider di hosting configurerebbe PyISAPIe in base alle mie esigenze e anche alle diverse esigenze degli altri clienti. Non sono riuscito a trovare le istruzioni per configurare Django con WSGI sulla homepage ... Se tutto il resto fallisce, userò solo l'approccio CGI. Con meno di 400 richieste a settimana , penso che possiamo vivere con la soluzione CGI fino a quando non decidiamo di cambiare hosting.
Epcylon,

1

Come configurare Python su FastCGI su IIS

Ecco come configurare Python su FastCGI IIS 7+ con apre la strada a una configurazione decente di DJango

... ed essere in grado di agganciare un debugger al processo che consente di scorrere il codice Python

Questo esempio non utilizza la console di gestione IIS ma elenca il contenuto dei file di configurazione risultanti

Passo 1

Installa Python + un buon debugger (questo esempio usa WingIDE che ho trovato uno strumento eccellente) Questo esempio presuppone la cartella c: \ python27

Passo 2

Creare una cartella Web, ad esempio su localhost c: \ inetpub \ wwwroot \ mypythonfolder e inserire il seguente file web.config:

Nota il | carattere pipe nella direttiva scriptProcessor. Viene utilizzato da IIS per mappare lo script su un'applicazione fastCgi (passaggio 3). Deve corrispondere carattere per carattere al percorso completo + carattere pipe + impostazioni degli argomenti dal passaggio 3 di seguito.

Passaggio 3

Nel file applicationHost.config nella cartella c: \ windows \ system32 \ inetsrc \ config inserire quanto segue nella sezione:

    <fastCgi>
        <application fullPath="c:\python27\python.exe" arguments="c:\python27\lib\mylib\myfcgi.py" monitorChangesTo="C:\Python27\Lib\r4a\r4afcgi.py" stderrMode="ReturnStdErrIn500" maxInstances="4" idleTimeout="300" activityTimeout="300" requestTimeout="90" instanceMaxRequests="200" protocol="NamedPipe" queueLength="1000" flushNamedPipe="true" rapidFailsPerMinute="10" />
    </fastCgi>

Passaggio 4

In c: \ python27 \ lib \ mylib \ myfcgi.py inserisci il seguente codice:

import wingdbstub

import os, io, sys ret = "environment: \ r \ n" per param in os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs:" per arg in sys.argv: ret = ret + arg handle = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) handle.close ()

Passaggio 5

Assicurarsi che IUSR disponga dei diritti per scrivere nella cartella c: \ temp

Passaggio 6

Inserisci wingdbstub.py e wingdebugpw nella tua cartella c: \ python27 \ lib \ mylib \. Ciò consentirà il debug in wingide. Questi file vengono forniti con l'installazione dell'ala. Nota: se Python deve anche compilare il codice in wingstub.pyc, IUSR necessita dei diritti di scrittura su quella cartella poiché il processo python verrà avviato con quell'account da IIS

Passaggio 6

Apri wingdb e imposta un punto di interruzione sulla riga "import os, io, sys"

Passaggio 7

Hit nel tuo browser http: // localhost / mypythonfolder

Se tutto funziona correttamente, Wingide ora dovrebbe essere attivato per visualizzare il codice in esecuzione nel punto di interruzione. In caso contrario: - o c'è un problema con il firewall. Il processo Python comunica con l'interfaccia WingIDE tramite una connessione TCPC o c'è un problema con la sicurezza all'interno di Wingide. È necessaria la versione corretta del file wingdebugpw, che in pratica contiene una password o un token che convalida l'accesso contro l'installazione di Wingide. In caso contrario, chiunque disponga dell'accesso tcp al PC potrebbe eseguire il debug con il codice.

Passaggio 8

Verificare che in c: \ temp sia stato creato il file di registro. Questo dovrebbe funzionare anche se non riesci ad avviare il passaggio 7

Passaggio 9

Si noti che questa pagina attiva il debugger ma non restituisce alcuna pagina al browser web. Alcuni retroscena: il server web comunica fastcgi attraverso i cosiddetti "record". Ciò significa che ogni singola richiesta dell'utente arriva nella tua applicazione racchiusa in più "record" separati. Ogni record è una struttura di dati che indica l'inizio di una richiesta, la stringa di query, le variabili di post, ecc. Il disimballaggio di questi record in una singola richiesta è un po 'ingombrante, segue le specifiche fastcgi di http: //www.fastcgi .com / DevKit / doc / fcgi-spec.html # S1

Come contenuto di c: \ python27 \ lib \ mylib \ myfcgi.py ho appena inserito una copia di zoofcgi.py fornita da helicontech. Questo file python è in grado di decodificare questi record e servire una pagina ed è abbastanza interessante per il debug. Si noti inoltre che helicontech fornisce facoltativamente una dll che si trova tra IIS e zoofcgi.py ma questa dll non è strettamente necessaria. Credo che implementa una versione leggermente migliorata e generica dell'implementazione fastcgi fornita da msft. Tuttavia, quando si utilizza la loro dll, quando si desidera scorrere il codice, il processo viene terminato in modo piuttosto rapido e IIS / DLL interrompe il processo Python quando si conclude che non viene restituita risposta entro un secondo o 2.

Questo è tutto. In linea di principio, la comunicazione tra IIS e il codice Python viene effettuata con named pipe. Dovresti essere in grado di configurarlo usando socket tcp ma non sono stato in grado di capire quale porta viene utilizzata (credo che lo stdin dovrebbe essere trasformato nella porta che quindi può essere selezionata () ed ma non l'ho dato qualsiasi tentativo)


0

Non ho provato questo con Python, ma ha funzionato alla grande come CGI con Perl. I prodotti ActiveState si integrano apparentemente con IIS. Ho avuto un grande successo con ActivePerl. Hanno anche ActivePython che potrebbe (probabilmente) farebbe anche il trucco lì. Quindi penso che dovresti semplicemente scaricare Django installarlo .

EDIT: Ok, quindi gratta l'integrazione apparente con IIS ... TUTTAVIA, ecco un articolo su come integrare in IIS . Potresti anche considerare Iron Python come la tua distribuzione per un box di Windows.

Per il provider, dubiterei che debbano sapere più di quanto non sia una piattaforma di sviluppo web come ASP / ASP.NET e che Python è il linguaggio utilizzato per svilupparsi con esso.

Per quanto riguarda l'installazione che menziono sopra, lo proverò e vedrò come funziona. Pubblicherò delle note se lo faccio funzionare bene!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.