Criar um servidor em rede local com IIS e Django no Windows 10

Introdução

Devido a um trabalho, precisei configurar uma WebApp, feita em Django, que deveria, apenas, funcionar em uma rede local.

Ela precisava ser hospedada em um computador com Windows 10 Home e executar python manage.py runserver sempre que ligasse a máquina, não era o desejável.

Decidi, então, escrever este post com base neste outro artigo que apesar de cobrir grande parte dos passos necessários, faltaram alguns pormenores para que o servidor funcionasse a 100%.

Parto do princípio que o leitor já tenha configurado o seu projeto em Django, de forma a que possa funcionar tanto em um ambiente de desenvolvimento quanto em produção.

Ativar/Instalar IIS

O IIS (Internet Information Services) precisa ser ativo para vocês terem acesso à área de gestão do mesmo.

Sigam os seguintes passos:

  • Pesquisem por "Painel de Controlo" na barra de pesquisa do Windows e executem-no

  • De seguida, no canto superior direito, estará, em letras pequenas, a opção "Ver por:", devem selecionar "Categoria"

  • Cliquem em "Programas"

  • E por fim cliquem na opção "Ativar ou desativar funcionalidades do Windows"

Vai aparecer uma pequena janela com várias "pastas".
Devem procurar por uma pasta denominada de "Serviços de Informação Internet" e marquem-na.

Agora precisamos de expandir essa pasta, clicando no ícone "+"
Imagem 2

De seguida expandimos a pasta "Serviços da World Wide Web" e, por fim, expandimos a pasta "Funcionalidades de Desenvolvimento de Aplicações".

Dentro dessa última, deverá constar algo chamado de "CGI" que tem de ser marcado também.
Imagem 3

Após tudo isto, devem clicar em "OK" e o IIS deverá estar a funcionar. Para testar-mos isso, abrimos um navegador e colamos o seguinte URL: http://localhost

E se tudo estiver certo, aparecerá uma página idêntica a esta:
Imagem 4

Não tenho a opção "Serviços de Informação Internet"

Caso não encontrem essa primeira pasta, tentem descarregar diretamente daqui e verifiquem se, após reiniciar o computador, já aparece a opção desejada.

Instalar o wfastcgi

Primeiramente, aconselho que criem um ambiente virtual para a vossa aplicação, já que eu irei demonstrar a configuração fazendo uso de um ambiente virtual.

Para criar um ambiente virtual, basta abrir um terminal/cmd no diretório raiz do vosso projeto (onde está o ficheiro manage.py) e executar o seguinte comando: python -m venv env - em que env é o nome do vosso ambiente virtual.
Não necessita chamar-se assim, podem atribuir o nome que desejarem.

Para ativarem o ambiente, basta que nesse mesmo terminal/cmd, executem: .\env\Scripts\activate - deverá aparecer um (env) no lado esquerdo do vosso terminal/cmd.

Agora devem utilizar o pip para instalar os vossos pacotes, como por exemplo, o Django e, obrigatoriamente, o wfastcgi: pip install Django wfastcgi

Configurar o FastCGI

Comecemos por abrir o Gestor de Serviços de Informação Internet (IIS). Dentro dele, vão clicar no nome do vosso computador (no canto superior esquerdo) e aparecerá um painel no centro, onde clicarão em "Definições de FastCGI".
Imagem 5

Agora no lado direito, cliquem na opção que diz "Adicionar Aplicação..."
Imagem 6

E agora terão uma janela, onde devem preencher os 2 seguintes espaços:

  • Caminho Completo: Caminho até ao vosso executável de python, o mesmo estará presente na vossa pasta de ambiente env.
    Sendo assim, o caminho é algo deste tipo: C:\Users\Usuario\projeto_django\env\Scripts\python.exe

  • Argumentos: aqui vocês devem colocar o caminho até ao wfastcgi.py que também estará presente na vossa pasta de ambiente.
    O caminho será algo assim: C:\Users\Usuario\projeto_django\env\Lib\site-packages\wfastcgi.py

Ainda na mesma janela cliquem em "(Coleção)" e de seguida nos 3 pontos.
Imagem 8

Agora vamos criar 3 membros (clicando em adicionar) e vamos alterar o Name e o Value deles:

  • DJANGO_SETTINGS_MODULE:

    • Name = DJANGO_SETTINGS_MODULE
    • Value = nome_do_app.settings
  • WSGI_HANDLER:

    • Name = WSGI_HANDLER
    • Value = nome_do_app.wsgi.application
  • PYTHONPATH:

    • Name = PYTHONPATH
    • Value = Caminho\para\a\pasta\raiz\do\projeto

Vocês podem achar os 2 primeiros valores nos ficheiros do vosso projeto, sendo que o primeiro está no ficheiro wsgi.py e o segundo no settings.py na variável WSGI_APPLICATION.

Deploy do site

Agora que configuramos a CGI (Common Gateway Interface), vamos colocar o nosso site no servidor.

Para isso precisam expandir o nome do computador/servidor, clicando na seta
Imagem 12

De seguida, basta clicar em "Sites" e do lado direito aparecerá a opção "Adicionar Website...", na qual devem clicar.

Vai aparecer uma janela, e nela devem preencher o campo "Nome do site" com o nome que acharem melhor.

Para o campo "Caminho físico" basta clicarem nos 3 pontos e escolherem a pasta raiz do vosso projeto (lembrando que a pasta raiz é a pasta que contém o ficheiro manage.py)

Devem testar se está tudo bem, clicando em "Definições de Teste...", se não estiver tudo verde, devem clicar em "Ligar como..", marcar "Utilizador específico" e clicarem em "Definir...".
Imagem 13

O utilizador que colocarem, TEM de ter permissões na vossa pasta do projeto.

Depois voltem a testar e deverá aparecer algo deste género:
Imagem 14

O último campo a preencher é o da "Porta" que no meu caso deixei como 8000.

A janela deverá ficar idêntica a esta:
Imagem 15

Mapeamento de Processador

Bem agora temos de definir onde está o nosso site e selecionar a FastCGI que definimos nos passos anteriores.

Para isso vamos expandir "Sites" (do lado esquerdo) e clicar no nome do nosso site. De seguida, clicamos em "Mapeamento do Processador".
Imagem 16

Após isso, do lado direito, deverá aparecer várias ações. Cliquemos em "Adicionar Mapeamento de Módulo...".
Imagem 17

Aparecerá uma janela igual a esta:

Devemos preencher da seguinte forma:

  • Caminho do pedido: *

  • Módulo: Selecionar "FastCgiModule"

  • Executável (opcional): Devem colocar o caminho para o executável do python, | e coloca-se o caminho para o wfastcgi.py. Aqui vai um exemplo: C:\Users\User\projeto_django\env\Scripts\python.exe|C:\Users\User\projeto_django\env\Lib\site-packages\wfastcgi.py

  • Nome: Colocar o nome que bem entenderem

Devem depois clicar em "Restrições de Pedido..." e desmarcar a opção "Invocar o processador apenas se o pedido estiver mapeado para:".
Imagem 19

No fim a janela deverá estar idêntica a esta imagem:
Imagem 20

Basta clicar em "OK" em tudo e caso apareça um Pop-up, cliquem em "Sim".

ALLOWED_HOSTS

É importante que no ficheiro settings.py, na variável ALLOWED_HOSTS coloquem dentro dessa lista tanto o "localhost" quanto o IP da vossa máquina na rede local, exemplo: "192.168.20.135".

Podem ver o IPv4 utilizando o comando ipconfig no CMD do Windows.

Agora basta vocês entrarem em http://localhost:8000 e ficarem frustrados...

ERROR 500 - FastCgi Desconhecido

Este foi o primeiro e único erro que me apareceu e pode ser facilmente mitigado, trocando a Identidade da nossa aplicação.

Bem para isto preciso que abram o vosso "Gestor de Serviços de Informação Internet".

Vão expandir o nome do vosso computador/servidor e clicar em "Conjuntos Aplicacionais".

Deverá aparecer o nome da aplicação no centro da janela e ao clicar no nome da vossa app, aparecerá, do lado direito, várias ações e vocês clicarão em "Definições Avançadas".
Imagem 21

Agora basta trocar o valor do item "Identidade" para "LocalSystem".
Imagem 22

Por fim, reiniciem o servidor e verifiquem se já têm acesso ao site.
Imagem 23

Servir ficheiros estáticos

Após a resolução do erro citado acima, vocês poderão se deparar com um site que aparentemente não carregou os ficheiros CSS, JS nem imagens.

Para corrigirmos isso, vamos precisar criar alguns diretórios virtuais.

Vamos ao Python primeiro!

Antes de mais verifiquem se no fim do vosso ficheiro settings.py, têm as seguintes variáveis devidamente declaradas:
Imagem 24

Depois de verificar o código, devem gerar o vosso conteúdo estático, executando, dentro da pasta raiz, o seguinte comando:
python manage.py collectstatic

No meu caso, criar-se-á uma pasta static_root com todos os meus ficheiros estáticos.

Voltando para o IIS

Para criarmos esses diretórios virtuais, temos de estar dentro do "Gestor de Serviços de Informação Internet", expandir o nome do computador/servidor, expandir "Sites" e, finalmente, clicar com o botão direito no nome do nosso site, para de seguida selecionarmos a opção "Adicionar Diretório Virtual...".
Imagem 25

Na seguinte janela, devemos colocar o "Alias" como static e no "Caminho físico", utilizamos os 3 pontos para selecionar a pasta criada pelo collectstatic, contendo os vossos ficheiros estáticos (no meu caso é a pasta static_root).

Lembrando que devem, novamente, testar as "Definições de Teste..." e caso dê erros/avisos, devem usar a opção "Ligar como..." e usarem um utilizador com as devidas permissões na pasta do site.
Imagem 26

Repitam o mesmo processo para a pasta media, alterando o Alias para media e selecionando a pasta correta.

Mesmo fazendo isto, ainda não vai funcionar. Precisamos remover o mapeamento do módulo FastCgi destas pastas, já que elas são apenas pastas de ficheiros estáticos.

Para isso, clicamos no nosso diretório virtual (parece com o ícone de atalho) e de seguida, duplo clique em "Mapeamento do Processador".
Imagem 28

E agora selecionamos o nosso módulo referente ao FastCgi e clicamos em "Remover".
Imagem 29

Atenção: Devem fazer este processo em todos o vossos diretórios virtuais que sirvam ficheiros estáticos.

Agora voltem a reiniciar o vosso servidor e se tudo correr bem, terão o vosso site a funcionar normalmente.

Considerações finais

Quero pedir desculpa por toda a censura nos prints, mas eu fui tirando prints conforme fui fazendo os passos e não quero expor informações.

Qualquer coisa que não tenham entendido, erro gramatical ou alguma dúvida que tenham, podem deixar nos comentários, tentarei ajudar o melhor que conseguir.

17