9/27/2007

Instalando Django com Apache e Mod_Python no Ubuntu

Um servidor com Apache rodando Django através de mod_python é uma das melhores escolhas para se fazer um deploy de uma aplicação feita em Django. Devido a isso resolvi fazer através deste post um simples passo a passo de como fazer a instalação e configuração desse deploy.

Como no Ubuntu Python já vem instalado, é uma coisa a menos a se preocupar. Outra vantagem em usar o Ubuntu, ou qualquer distribuição baseada em Debian e a possibilidade de utilizar o apt-get para facilitar a instalação dos programas.

Então vamos aos passos:

1 - Instalando o Apache 2
Para instalar o Apache 2 no Ubuntu basta abrir o terminal e digitar apenas um apt-get
#sudo apt-get install apache2

Para ver se o Apache foi instalado com sucesso e está em funcionamento é só acessar http://localhost em seu navegador.

2 - Instalando mod_python
Para instalar o mod_python no Ubuntu não é muito diferente
#sudo apt-get libapache2-mod-python

3 - Instalando o Django
#sudo apt-get install python-django

4 - Configurando o Apache
Como o mod_python foi instalado via apt-get, o módulo já fica habilitado automaticamente.

Mas é necessário configurarmos nossa aplicação no Apache. Para isso temos que editar o http.conf da seguinte maneira:

Para editar o http.conf, é só digitar esse comando no terminal:

#sudo gedit /etc/apache2/http.conf

E adicionar as linhas a seguir:

<VirtualHost * >
<Location "/">
SetHandler python-program
PythonPath "['/home/seuusuario/projetos/'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE meuprojeto.settings
PythonDebug On
</Location>
</VirtualHost>


Onde informamos através do PythonPath o diretório onde ficam os seus projetos como no exemplo foi: '/home/seuusuario/projetos/'. E criamos a variável de ambiente DJANGO_SETTINGS_MODULE cujo valor é o local onde fica o settings.py onde "meuprojeto" é o nome do projeto.

Podemos ao invés de editar o http.conf editar o arquivo: /etc/apache2/sites-avaliable/default.

5 - Reiniciando o Apache
Após configurar o Apache é só reiniciar ele. Para reiniciar ele digite o comando abaixo:
#/etc/init.d/apache2 reload

Para testar é só acessar no seu navegador o endereço configurado!

Só para lembrar, o Django + Apache + Mod_python é uma ótima opção para deploy, ou seja, para rodar sua aplicação já finalizada. Para ser servidor de desenvolvimento não é recomendado a utilização do Apache e sim do próprio servidor de testes do Django.

7 comentários:

Anônimo disse...

Obrigado pelo tutorial, como havia dito no comentário anterior, estava querendo saber isso.

Mais importante ainda foi a linha que você fala que para desenvolver é para utilizar o servidor do Django mesmo, então vou testar esse tutorial depois.

Seria ótimo se tivesse alguém na minha lista do MSN que pudesse me auxiliar nesses meus estudos. Se puder me adicionar: msn@edmilsonlani.com.br.

Saudações!

Andrews Medina disse...

Adicionado

Anônimo disse...

Andrews, o local correto do VirtualHost default, por convenção, é o /etc/apache2/sites-avaiable/default.

Eu recomendo que utilize ele, e para outros hosts virtuais, é só criar um arquivo nesse diretório e habilitar com o comando "a2ensite" ou fazer um link em /etc/apache2/sites-enabled. ;-)

Fica a dica.

Jader Rubini disse...

Olá Andrews,
como faço pra tornar o django-admin um comando padrão, pra eu não ter que digitar o caminho completo do arquivo (/usr/share/django-admin, certo?) sempre que quiser usar suas funcionalidades?

No Windows bastava adicionar o diretório do Django às variáveis de ambiente, e no Linux, como faço isso?

Andrews Medina disse...

Ola Jader,

quando instalado o Django apenas o comando django-admin.py deve se tornar um comando padrão. Mas, se isso nao ocorrer, é só copiar o arquivo para /usr/bin

O blog disse...

Boa tarde Andrews.

Ao invés de configurar o arquivo http.conf eu acabei por optar pela configuração do arquivo '/etc/apache2/sites-available/default', reiniciei o apache e recebi as seguintes mensagens de erro:

Traceback (most recent call last):

File "/usr/lib/python2.5/site-packages/mod_python/importer.py", line 1537, in HandlerDispatch
default=default_handler, arg=req, silent=hlist.silent)

File "/usr/lib/python2.5/site-packages/mod_python/importer.py", line 1229, in _process_target
result = _execute_target(config, req, object, arg)

File "/usr/lib/python2.5/site-packages/mod_python/importer.py", line 1128, in _execute_target
result = object(arg)

File "/var/lib/python-support/python2.5/django/core/handlers/modpython.py", line 177, in handler
return ModPythonHandler()(req)

File "/var/lib/python-support/python2.5/django/core/handlers/modpython.py", line 145, in __call__
self.load_middleware()

File "/var/lib/python-support/python2.5/django/core/handlers/base.py", line 22, in load_middleware
for middleware_path in settings.MIDDLEWARE_CLASSES:

File "/var/lib/python-support/python2.5/django/conf/__init__.py", line 28, in __getattr__
self._import_settings()

File "/var/lib/python-support/python2.5/django/conf/__init__.py", line 55, in _import_settings
self._target = Settings(settings_module)

File "/var/lib/python-support/python2.5/django/conf/__init__.py", line 83, in __init__
raise EnvironmentError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e)

EnvironmentError: Could not import settings 'meuprojeto.settings' (Is it on sys.path? Does it have syntax errors?): No module named meuprojeto.settings

O que pode ser feito para corrigir este erro?

PS: Optei pela configuração do arquivo default pois eu instalei o apache a partir de um repositório da empresa e ao invés das configurações serem feitas no arquivo http.conf, são feitas no arquivo apache2.conf, eu acabei ficando com dúvidas.

Desde já agradeço.

Anônimo disse...

Olá,

esses seus erros são provavelmente do arquivo de settings que não foi encontrado (meuprojeto).