Instalando o Django no IIS: um tutorial passo a passo
Publicados: 2022-03-11Embora muitos desenvolvedores de Django possam considerá-lo uma blasfêmia, às vezes é realmente necessário implantar aplicativos Django no Windows/IIS, especialmente ao trabalhar com um cliente que baseou sua infraestrutura no ecossistema do Windows. A parte “blasfêmia” vem do Django ter sido realmente direcionado ao ambiente Unix, confiando fortemente em recursos como WSGI, FastCGI e ferramentas de linha de comando, todos estranhos ao Windows. Felizmente, a compatibilidade com Django/IIS está melhorando, graças à adição de recursos (que de outra forma seriam um kludge) nos lados Windows e Python+Django da equação, ajudando assim a resolver problemas de compatibilidade entre esses dois mundos técnicos díspares.
Este tutorial curto e focado orienta você pela configuração básica de um projeto Django no Windows. Ele cobre a instalação de Python, Django e ferramentas relacionadas, incluindo a execução do projeto Django de forma independente e como um servidor FastCGI. O último é cada vez mais importante, aliás, já que o IIS agora suporta oficialmente FastCGI (no IIS 7+, basta instalar o recurso CGI).
Observação: este tutorial destina-se àqueles que têm um conhecimento prático do Windows e estão familiarizados com o console de gerenciamento do IIS. A versão do IIS usada neste tutorial é 8.5, mas as descrições e técnicas são semelhantes nas versões anteriores. O tutorial é baseado em Python 2.7 e Django 1.7, pois essas são as versões que uso para meus projetos. Você pode encontrar outro tutorial do Django aqui.
Dica profissional: Se você for implantar vários projetos Django (ou mesmo Python simples), ou se você for um desenvolvedor, você deve olhar para virtualenv, uma ferramenta para criar ambientes Python isolados.
Instalando Python no Windows
Primeiro, baixe o Python. Instaladores MSI de 32 e 64 bits são fornecidos e você deve escolher o apropriado para a máquina em que está instalando.
PIP é a ferramenta que instala e mantém bibliotecas Python (das quais o Django é apenas um exemplo). Ele é invocado executando o comando pip no prompt de comando. Ele implementa vários subcomandos, e dois dos mais úteis são install e freeze . O PIP também instalará as dependências do projeto (bibliotecas adicionais) instaladas, caso o projeto tenha alguma.
A execução do pip install <package_name> fará o download e instalará o pacote e todas as suas dependências (que podem ser aninhadas e bastante complexas). A execução de pip install --upgrade <package_name> também atualizará um pacote existente para sua versão mais recente. O PIP suporta uma sintaxe especial para instalar versões precisas de um pacote em vez de apenas "o mais recente". Isso é feito anexando um operador e um número de versão ao nome do pacote; por exemplo, "Jinja2==2.7.3" (para instalar uma versão precisa) ou "seis>=1.8" (para instalar qualquer versão igual ou superior ao número de versão especificado).
A execução do pip freeze simplesmente mostra a lista de pacotes atualmente instalados em um formato que pode ser usado diretamente pelo pip install .
Observe que alguns pacotes Python/PIP vêm com bibliotecas escritas em C, que devem ser compiladas para que o pacote funcione. A menos que você configure seu sistema para ter um compilador C funcional que também seja compatível com os executáveis do Python, você não poderá instalar esses pacotes. O Django é uma biblioteca Python pura, portanto, não requer um compilador C para instalar.
É importante que você instale o Python 2.7.9 ou posterior, pois as versões do Python começando com 2.7.9 incluem PIP, o gerenciador de biblioteca/pacote/software Python que é usado para instalar todo o resto neste tutorial.
O processo de instalação é muito simples e direto. Ele oferecerá a instalação do Python no diretório C:\Python27
, que você deve aceitar, pois facilita a vida depois. Tente não ceder ao hábito do Windows de instalar coisas em diretórios com espaços em seus nomes.
O diretório básico após a instalação conterá cerca de 8 subdiretórios, alguns arquivos diversos e dois executáveis denominados Python.exe
e PythonW.exe
. O primeiro é o interpretador de linha de comando padrão e o shell Python, enquanto o último é apenas o interpretador, que não usará (ou gerará) uma janela de console se invocado e, por isso, é adequado para executar aplicativos Python da GUI.
Em seguida, o Python deve ser adicionado à variável de ambiente PATH do sistema. Isso é feito em Advanced System Settings (ou System Properties ), na aba Advanced , clicando no botão Environment Variables . Existem dois diretórios a serem adicionados: C:\Python27
e C:\Python27\Scripts
. Estes devem ser anexados à lista PATH, separados por ponto e vírgula ( ;
). O final da sua variável PATH deve se parecer com ;C:\Python27;C:\Python27\Scripts
.
Dica profissional: você também pode instalar o GOW, uma coleção leve de utilitários de linha de comando do Unix semelhantes ao Cygwin. Ele fornecerá ferramentas como
ls
, mas também outras mais interessantes comomake
,wget
,curl
,ssh
,scp
,gzip
etar
.
Instalando o Django no Windows
O Django pode ser instalado usando PIP com um comando como pip install django
. O processo pode puxar algumas dependências adicionais se elas ainda não estiverem presentes em seu sistema. Caso contrário, ele simplesmente instalará apenas o Django, com saída semelhante à seguinte:
Downloading/unpacking django Installing collected packages: django Successfully installed django Cleaning up...
Você pode verificar se tanto o Python quanto o Django para Windows estão funcionando iniciando um novo prompt de comando do Windows, executando o comando python
e digitando o comando import django
no prompt do Python. Se funcionar corretamente, não deve haver saída ou mensagens após o comando import django
; ou seja:
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 >>>
Instalando um projeto Django no Windows
Um “projeto” Django consiste em um ou mais “aplicativos”. O diretório de nível superior de um projeto geralmente contém um subdiretório de projeto especial que contém configurações e algumas informações gerais de nível de projeto, um subdiretório por aplicativo e um script de linha de comando chamado manage.py
. Por exemplo:
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
Projetos Django podem ser distribuídos simplesmente arquivando todo o diretório do projeto e descompactando-o em outra máquina. No exemplo acima, o projeto contém o subdiretório do project
, o diretório do aplicativo chamado djangoapp
e um subdiretório de templates
auxiliar.
O script manage.py
é o “canivete suíço” dos aplicativos Django. Ele faz tudo, desde a criação de novos aplicativos, migrações de banco de dados, execução de um servidor HTTP de teste (incorporado) ou até mesmo um servidor FastCGI.
Executando um servidor HTTP de teste
Se o projeto e seus aplicativos estiverem funcionais, você poderá iniciar o servidor HTTP padrão somente para desenvolvimento do Django executando o comando manage.py runserver
, que deve resultar em uma saída semelhante à seguinte:
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.
Como você pode ver nas mensagens, isso inicia um servidor no host local, porta 8000. Você pode acessá-lo imediatamente com seu navegador da web.
Configurando e executando um servidor FastCGI
Uma opção mais interessante é habilitar um servidor FastCGI. Com FastCGI, você pode usar IIS, Apache ou qualquer outro servidor web para servir o aplicativo em uma configuração de produção. Para que isso funcione, você precisa baixar o fcgi.py (o comando de gerenciamento do Django para executar o Django no Windows com IIS através do FastCGI) e colocá-lo no subdiretório management/commands
do subdiretório do aplicativo Django (não do projeto!). Ambos os subdiretórios management
e commands
devem ter um arquivo vazio chamado __init__.py
(que transforma esses diretórios em módulos Python).

fcgi.py
é um adaptador WSGI para FastCGI muito simples e minimalista que não suporta escuta em um socket TCP ou pipe, e faz todo o seu processamento usando stdin
e stdout`. Como tal, não é utilizável com servidores Web modernos, como o nginx, mas funcionará com o IIS.
Configurando o IIS para executar um aplicativo FastCGI
Se o módulo FastCGI estiver carregado no IIS (ou simplesmente o módulo CGI no IIS 7+), o console de gerenciamento do IIS terá o ícone “FastCGI Settings” disponível. O Django é um framework que possui seu próprio roteamento de URL, então os aplicativos Django devem ser instalados como um “manipulador” no IIS para caminhos específicos. Para instalar um aplicativo Django no site padrão do IIS, selecione-o no console de gerenciamento e abra o recurso de configuração de mapeamentos do manipulador . Nela, clique na ação Add Module Mapping… e insira as seguintes informações:
- Caminho da solicitação : defina-o como
\*
para lidar com todas as solicitações com roteamento interno do Django - Módulo : Configure para
FastCgiModule
para usar o módulo FastCGI do IIS - Executável : Aqui, tanto o caminho
python.exe
quanto seus argumentos de linha de comando precisam ser definidos, usando o caractere pipe (|
) como separador. Um valor de exemplo para essa configuração é:C:\Python27\python.exe|C:\app\src\manage.py fcgi --pythonpath C:\app\src --settings project.settings
. Observe que você precisa especificar o comandofcgi
para o scriptmanage.py
e definir manualmente o caminho de pesquisa do interpretador Python para o projeto, bem como o nome do módulo Python para o módulo de configuração do projeto. - Nome : Você pode definir isso para o que quiser.
Sua caixa de diálogo de configuração deve se parecer com isso:
Em seguida, clique no botão Solicitar restrições e edite a guia Mapeamento . Desmarque a caixa de seleção “Invoke handler only if the request is mapped to…” (caso contrário, o IIS terá problemas para mapear o que ele acha que são subdiretórios na solicitação de URL):
Clique em OK na caixa de diálogo de informações do manipulador. O IIS solicitará que você confirme a criação de uma entrada de aplicativo FastCGI correspondente que você precisará confirmar. Essa entrada ficará visível no recurso FastCGI Settings , acessível na tela raiz do IIS Management Console. A entrada padrão criada pelo próprio IIS é adequada, mas existem algumas configurações opcionais disponíveis que você pode aproveitar:
- Instâncias máximas : A abordagem que estamos empregando para executar aplicativos FastCGI é de processo único, thread único, o que significa que um processo de interpretador Python separado será iniciado para cada solicitação simultânea . Essa configuração limita o número de instâncias simultâneas do aplicativo Django.
- Monitorar alterações no arquivo : por padrão, uma vez iniciados, os processos do aplicativo estarão ativos até serem desligados manualmente ou até que lidem com as solicitações Instance MaxRequest . Ao usar essa configuração, o IIS monitorará um carimbo de data/hora de um arquivo arbitrário e, se for alterado, interromperá e recarregará as instâncias do aplicativo. Isso é conveniente tanto para desenvolvedores quanto para ambientes de produção, pois permite que os aplicativos sejam recarregados quando alterados. O “monitorar o carimbo de data/hora de um arquivo para um indicador de recarregamento” é um conceito bastante estranho no Windows, mas é normal em ambientes do tipo Unix, e por isso foi transportado aqui com FastCGI.
Configurando o recurso estático e os diretórios de mídia
Os aplicativos da Web modernos usam vários arquivos de recursos, como CSS, JavaScript e outros, e os aplicativos Django não são exceção. O Django fornece um recurso muito conveniente que permite aos desenvolvedores integrar os recursos necessários na árvore de diretórios do aplicativo, mas que pode ser extraído e copiado pelo Django em um diretório estático adequado. Este é basicamente um recurso controlado pelo desenvolvedor, e os locais onde o Django armazenará os arquivos estáticos são controlados no settings.py
do projeto. Projetos bem comportados usarão um caminho razoavelmente sensato para isso, mas não é padronizado.
Os aplicativos que lidam com arquivos carregados os armazenam em um diretório gerenciado de forma semelhante que, no Django, é tradicionalmente chamado media
. Os diretórios static
e de media
precisam ser adicionados à configuração do IIS como diretórios virtuais:
O passo importante aqui é reconfigurar o recurso Handler Mappings para cada um dos diretórios e remover o handler do Django App, deixando o handler StaticFile
como o mais importante.
Observe que o diretório static
deve ser legível pelo IIS (assim como todos os outros arquivos e diretórios no projeto Django), mas o diretório de media
também deve ser gravável pelo IIS. A configuração final do site deve se parecer com o seguinte:
Uma nota sobre bancos de dados
O SQLite funciona por padrão no Windows, assim como em sistemas do tipo Unix. A maioria dos outros bancos de dados de código aberto agora funciona no Windows, até o PostgreSQL, que eu recomendo. Em instalações existentes do Windows, no entanto, pode haver um requisito para implantar o Django com o MS SQL Server. Isso é possível usando um driver de ponte ODBC ou usando um driver MS SQL nativo. Em teoria, ambos funcionam, mas não os testei. Pelo menos os parâmetros de conexão do banco de dados (no arquivo settings.py
do projeto) precisam ser alterados para alternar para um novo banco de dados. A migração de dados precisa ser feita manualmente.
Observe que, se estiver usando o banco de dados SQLite, tanto o arquivo de banco de dados quanto o diretório em que ele está localizado precisam ser graváveis pelo IIS.
Solução de problemas
A configuração descrita é testada e comprovadamente funciona, mas se algo der errado, aqui estão algumas etapas básicas para solucionar problemas de instalação do Django para Windows:
- Tente iniciar a linha de comando FastCGI você mesmo. Este é o comando configurado nas Configurações do FastCGI e que deve corresponder ao configurado nos Mapeamentos do manipulador para o site.
- Instale o recurso Tracing para IIS e configure-o para o site Django em Failed Request Tracing Rules para rastrear todo o conteúdo ( ), o código de status “500” e a gravidade do evento “Error”. Os rastreamentos estarão disponíveis como arquivos XML (com XSLT anexado) no diretório
C:\inetpub\logs\FailedReqLogFiles
do IIS (ou similar, dependendo de sua configuração). Em seguida, você precisa habilitar o rastreamento para o site específico (ou um diretório virtual) na ação *Configure->Failed request traceing… .
Conclusão
Para ter certeza, o Django é feito sob medida para um ambiente do tipo Unix, e a maneira mais difundida e suportada de executar o Django é em um sistema Linux (por exemplo, com uwsgi e nginx).
No entanto, não é preciso muito trabalho para fazer o Django rodar no Windows, como mostrado neste tutorial. Algumas das etapas descritas podem parecer contra-intuitivas do ponto de vista puro do Windows, mas são necessárias e, felizmente, o esforço gasto na configuração é apenas uma vez. Uma vez configurado, o aplicativo Django deve se comportar da mesma maneira que em uma plataforma Linux.