Configurando Apache para trabalhar com Django e PHP

Introdução

Como primeiro artigo do ano, vou mostrar de forma bem rápida como configurar o Apache no Linux para trabalhar com Django e com PHP ao mesmo tempo. Para tal, foi usada a instalação padrão do Apache2 com PHP5 do Ubuntu no servidor de desenvolvimento.
O mod_wsgi é um módulo para o Apache que permite executar aplicações web escritas em Python. Trata-se de uma alternativa ao mod_python e ao FastCGI.

Instalação

O primeiro passo é instalar o mod_wsgi. No meu caso instalei a partir do repositório do Ubuntu, via apt-get:
root@notebook:~# apt-get install libapache2-mod-wsgi
Nesse exemplo vamos utilizar o diretório padrão do Apache (/var/www) para hospedar os projetos feitos em Django e PHP. Abaixo a estrutura de diretório utilizada:

+ /var/www/
+--+ meusite/
+-- apps_wsgi/
| +-- djangosite/
+-- www/

var/www – Diretório padrão do Apache
meusite – Diretório do projeto
apps_wsgi – Diretório de projetos feitos em Django
djangosite – Projeto em Django, criado com o django-admin
www – Diretório de arquivos PHP

Antes de criarmos o VirtualHost, é preciso configurar o /etc/hosts. Vamos atribuir um IP de loopback uma vez que o Apache está sendo executado na máquina local que é um ambiente de desenvolvimento.
Segue abaixo o conteúdo do /etc/hosts já alterado. A primeira coluna é o IP do servidor virtual, a segunda é o hostname e a terceira é um alias para o hostname.

gustavo@notebook:~# cat /etc/hosts
127.0.0.1 localhost notebook
127.0.0.2 www2.meusite.com.br meusite

Reparem que não configurei o hostname como www.meusite.com.br, pois senão o Apache responderia à toda requisição feita para essa URL, logo não conseguiríamos acessar o site na web. Se testarmos dar um ping para meusite vamos obter uma resposta sem perda de pacotes.

O próximo passo é criar um VirtualHost para nosso projeto. Com VirtualHost é possível hospedar vários sites no Apache, cada um sendo representado por um nome. Vamos criar nosso VirtualHost após a última linha do arquivo de configuração /etc/apache2/sites-enabled/000-default do Apache:

WSGIRestrictStdout Off
<virtualHost www2.meusite.com.br>
  LimitInternalRecursion 1000
  ServerName meusite
  DocumentRoot /var/www/meusite/www/
 
  ErrorLog /var/www/meusite/error.log
  LogLevel warn
 
  <directory "/var/www/meusite/www/">
    Order allow,deny
    Allow from all
  </directory>
 
  AddHandler wsgi-script .wsgi
  #WSGIScriptAlias /meusite/ "/var/www/meusite/www/meusite.wsgi"
  <directory "/var/www/meusite/apps_wsgi/">
    AllowOverride FileInfo
    Options ExecCGI MultiViews FollowSymLinks
    MultiviewsMatch Handlers
    Order deny,allow
    Allow from all
  </directory>
</virtualHost>

Então agora criamos o arquivo /var/www/meusite/www/meusite.wsgi com o seguinte conteúdo:

import os, sys
sys.path.append('/var/www/meusite/apps_wsgi')
os.environ['DJANGO_SETTINGS_MODULE']='meusite.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

E para finalizar, vamos criar um arquivo .htaccess dentro do DocumentRoot. Esse arquivo utiliza o mod_rewrite do Apache para sobrescrever URLs. Nesse exemplo o .htaccess verifica todas as requisições feitas ao servidor, e caso não exista o arquivo dentro do diretório www, quem assume o controle é o Django.

$ cat /var/www/meusite/www/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /var/www/meusite/www/meusite.wsgi/$1 [QSA,PT,L]

Conclusão

Para testar, crie o arquivo /var/www/meusite/www/info.php contendo a seguinte linha:

<? phpinfo(); ?>

Agora tente acessa a URL http://www2.meusite.com.br/info.php e será exibida na tela informações sobre o ambiente web instalado na máquina. Agora se tentar acessar um arquivo que não existe, tipo http://www2.meusite.com.br/qualquercoisa, o .htaccess redirecionará a requisição para o arquivo urls.py do projeto feito em Django.

You can leave a response, or trackback from your own site.

5 Responses to “Configurando Apache para trabalhar com Django e PHP”

  1. No caso o melhor seria no terminal,mas como vamos estar tentando ensinar “leigos” uma ide eu diria que ainda é muito difícil.Mwahahahahahha.

  2. Jeferson says:

    Muito bom!!! Parabéns por dedicar seu tempo em ajudar as pessoas!!! vlw!!! Poderia perguntar uma coisa? Estou querendo configurar um servidor, para ser acessado de qualquer lugar, pq tenho um site, e nele vai ter uma área de Upload de arquivos grandes, e gostaria de fazer isso direto da minha maquina quando for para essa parte do site. Como eu poço fazer isso?

  3. Luiz Carlos says:

    Cara muito bom o tutorial me ajudou muito… agora se eu precisa-se servir na rede e precisa-se usar assim ip/app. Como faria ?

  4. André says:

    huhuhu, nao consegui entender a estrutura dos diretórios

    /var/www/
    /var/www/meusite
    /var/www/apss_wsgi
    djangosite está n mesmo nivel de apps_wsgi ???
    o www dentro do var?

    Desculpem é um problema sério que estou enfrentando.
    Um deficit

    • gustavohenrique says:

      djangosite no caso fica dentro de apps_wsgi.
      A estrutura é:
      /var/www/meusite/www (php)
      /var/www/meusite/apps_wsgi (projetos django)

Leave a Reply

Powered by WordPress | Shop the Best Verizon Wireless Deals. | Thanks to Best CD Rates, Credit Cards and Credit card