Instalando modulo WSGI no apache 2 com Django 1.3

Created: Jan. 1, 2010, 4 a.m.
Update: March 31, 2020, 9:57 p.m.
Instando modulo django/python wsgi no apache2 e colocando um projeto django em produção

Ambiente:

Servidor Ubuntu 10.4

Django 1.3


PROJETO DJANGO main
DOCUMENT ROOT /var/www
DIRETORIO myhome
URL: dominio.com.br
Caminho completo do projeto /var/www/myhome/main

Parto do princípio que o apache2 já está instalado e funcionando e seu projeto Django funcionando localmente. Alteração no settings.py será necessário, PATH e URL, verifique caso apareça erros. Em caso de dúvida, utilize o PATH completo nesses arquivos, /var/www/myhome/main.

Vamos instalar o libapache2-mod-wsgi, acesso root será necessário. 
$ sudo apt-get update
$ sudo apt-get install libapache2-mod-wsgi python-psycopg2 python-django

Verifica a instalação
$ sudo dpkg -l | grep -i wsgi

Saida do comando

ii libapache2-mod-wsgi 2.8-2ubuntu1 Python WSGI adapter module for Apache

Vamos criar o arquivo myhome de configução do site, neste caso em /etc/apache2/sites-available
$ sudo vim /etc/apache2/sites-available/myhome

conteúdo do arquivo:

WSGIRestrictStdout Off
<VirtualHost *:80>

        #LimitInternalRecursion 1000
        ServerAdmin contato@dominio.com.br
        ServerName  dominio.com.br
        DocumentRoot /var/www/myhome
 
        <Directory /var/www/myhome>
                Order Allow,Deny
                Allow from All
        </Directory>
 
        AddHandler wsgi-script .wsgi
        <directory "/var/www/myhome/main/">
            AllowOverride FileInfo
            Options ExecCGI MultiViews FollowSymLinks
            MultiviewsMatch Handlers
            Order deny,allow
            Allow from all
        </directory>
 
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>
 
        ErrorLog /var/log/apache2/error.myhome.log
 
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
 
        CustomLog /var/log/apache2/access.myhome.log combined
 
    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>
</VirtualHost>

Vamos criar um diretório onde o projeto vai ficar dentro.

$ sudo mkdir /var/www/myhome

Vamos testar a configuração basica até aqui. Vamos criar um arquivo index.html para testar
$ sudo echo "TESTE INSTALACAO WSGI APACHE2" > /var/www/myhome/index.html

Agora que temos os arquivos configurados, vamos tornar ON o site criado:
$ sudo a2ensite myhome

Carregando o modulo rewrite:
$ sudo a2enmod rewrite

Saida: Enabling site myhome Run '/etc/init.d/apache2 reload' to activate new configuration! Como diz a cima:
$ sudo /etc/init.d/apache2 reload

Abra seu navegador com a URL e veja se está funcionando, a frase "TESTE INSTALACAO WSGI APACHE2" deverá aparecer, caso contrário refaça os passos. Copie o projeto django para dentro da pasta /var/www/myhome/, alterações no settings.py e urls.py será necessário. Copiando projeto, exemplo:
$ sudo ~cp /home/user/project/main /var/www/myhome/. -prav

Permissão WWW para os arquivos:
$ sudo chown www-data:www-data /var/www -R

Crie o arquivo abaixo com o seguinte conteudo 
$ sudo vim /var/www/myhome/default.wsgi

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

crie o arquivo .htaccess com o seguinte conteudo

$ sudo vim /var/www/myhome/.htaccess

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

Agora que temos os arquivos configurados, vamos tornar ON o site criado:
$ sudo a2ensite myhome
Saida: Enabling site myhome. Run '/etc/init.d/apache2 reload' to activate new configuration!

Como diz a cima:
$ sudo /etc/init.d/apache2 reload

Pronto! Feito!
Mantenha o autor em caso de publicação!

Tiago de Souza Moraes - teago.futuria.com.br - 2020 // CSS by UIKIT CSS