Pular para o conteúdo
Ramos da Informática - Comunidade de Desenvolvedores

Torne-se um desenvolvedor FullStack: Pacote completo de formação desenvolvedor Frontend e Backend utilizando as linguagens de programação e frameworks mais procurados no mercado de trabalho. Mais informações, aqui. Faça o download do E-BookGuia Completo Para Se Tornar um(a) Desenvolvedor(a) Full-Stack, Começando do ZERO”.

Engenheiro de Software, autor de livros sobe tecnologia e negócios. É mantenedor do site Ramos da Informática. Hobbies: investir em ações, natação e finanças.

Engenheiro de Software, autor de livros sobe tecnologia e negócios. É mantenedor do site Ramos da Informática. Hobbies: investir em ações, natação e finanças.

admin

Todos os artigos deste autor

Configurando ambiente Django com Apache e mod_wsgi

Chatbots com Whatsapp e Cielo integrados Nesse curso, eu vou te mostrar como o consumidor poder realizar um pagamento por dentro do aplicativo do WhatsApp, aonde o seu cliente vai entrar numa conversa como entraria numa conversa com qualquer pessoa ou com a sua empresa, navegar entre os produtos/serviços em menus simples enviados pelo chatbot, adicionar esses produtos/serviços no carrinho de compras, e num determinado ponto do chat, um link exclusivo é enviado para o cliente preencher os dados do cartão de crédito. No final, a análise é devolvida para o Whatsapp no qual a conversa foi iniciada. Inscreva-se.

Entendendo a necessidade

Muitas vezes encontramos dificuldade em colocar nossas aplicações para funcionar em um servidor devido ao pouco conhecimento em infraestrutura, principalmente aqueles que vieram do php, onde, subir um site e já o ver funcionando no ambiente final se trata apenas de subir os arquivos para a pasta www e pronto, certo? Não, não é bem por aí …

Normalmente quando configuramos a hospedagem de um domínio através de um software de gestão de alojamento web (cpanel é o mais conhecido) automaticamente o sistema configura o VirtualHost específico para o seu domínio cadastrado, ja direcionando a path para a sua pasta www ou public_html. Mas como isso é feito? Não entrarei em detalhes de como o cpanel funciona, mas irei demonstrar aqui como configuramos um servidor com apache para receber nossa aplicação.

Mas por que o Apache?

A partir do momento que eu mudei meu foco, saindo do PHP para trabalhar com Python, eu acabei “abandonando” o Apache para trabalhar com Nginx. Porém, me deparei com um projeto onde tinha que funcionar em uma Hospedagem compartilhada na qual só funciona o apache. Como não vi nada relacionado a essa configuração aqui no Pythonclub, achei que seria útil para muitos que podem cair em uma situação parecida com a minha, ou simplesmente prefira usar o Apache do que o Nginx.

Caso o seu interesse seja mesmo usar o Nginx (pode parar por aqui), acho ótimo!!! Te dou todo apoio e ainda te indico um ótimo post para isso, do nosso amigo Igor Santos.

Configurando um servidor de produção para aplicações Python (Nginx)

Agora, chega de conversa e vamos ao que interessa.

Como fazer?

Existem várias maneiras de se fazer o Django trabalhar com apache, uma delas é a combinação Apache + mod_wsgi e será dessa forma que faremos. Com mod_wsgi podemos implementar qualquer aplicação Python que suporte a interface Python WSGI.

Instalando alguns pacotes necessários

Antes de mais nada, atualize a lista de pacotes

$ sudo apt-get update

Apache + mod_wsgi

$ sudo apt-get install apache2 libapache2-mod-wsgi

Python setup tools + pip

$ sudo apt-get install python-setuptools
$ sudo apt-get install python-pip

Vamos testar o WSGI?

Vamos fazer um teste com uma aplicação simples em python.

Começe criando um diretório na raiz do apache (DocumentRoot)

$ sudo mkdir /var/www/wsgi_test

Em seguida vamos criar nossa app de teste …

$ sudo vim /var/www/app.wsgi

… e escrever nossa app python compatível com WSGI

def application(environ, start_response):
status = ‘200 OK’
output = ‘Hello World!’
response_headers = [(‘Content-type’, ‘text/plain’),
(‘Content-Length’, str(len(output)))]
start_response(status, response_headers)
return [output]

Vamos criar agora um host para usar como nosso domínio da aplicação teste

$ sudo vim /etc/hosts

Adicione esta linha ao seu arquivo hosts

127.0.0.1 wsgi_test

E vamos configurar nosso VirtualHost no Apache.

$ sudo vim /etc/apache2/sites-available/wsgi_test
<VirtualHost *:80>
ServerName wsgi_test
DocumentRoot /var/www/wsgi_test
<Directory /var/www/wsgi_test>
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias / /var/www/wsgi_test/app.wsgi
</VirtualHost>

Ative-o

$ sudo a2ensite wsgi_test

Obs: esse comando cria um link simbólico do wsgi_test para a pasta sites-enabled. Você pode fazer isso manualmente.

Reinicie o apache:

$ sudo service apache2 reload

Feito isso abra o internet explorer seu navegador preferido e acesse http://wsgi_test. Se você está vendo a mensagem “Hello World” pode comemorar, o wsgi está funcionando com o apache.

Configurando Django com WSGI

Até o momento entendemos como funciona a configuração do apache para receber uma aplicação Python com WSGI. Podemos usar essa ideia para qualquer aplicação python, porém veremos como fica essa configuração para trabalhar com Django.

Criando o ambiente

É sempre bom trabalharmos com ambientes virtuais em nossas aplicações python, para isso temos o virtualenv. Eu, particularmente, prefiro usar o VirtualenvWrapper, que separa os ambientes virtuais das aplicações. Caso você não conheça, indico o post do Arruda que foi o que me guiou quando comecei a usar. Usando VirtualEnvWrapper

No meu caso usei o virtualenvwrapper e meu filesystem é o seguinte:

+– /home/guilouro
| +– .virtualenvs #[Ambientes]
| +– www #[Projetos]

O Virtualenvwrapper criará meus projetos dentro de www e os ambientes em .virtualenvs. Mas para que isso aconteça temos que adicionar algumas linhas em nosso ~/.bashrc

# adicione no final do arquivo ~/.bashrc
# …
export PROJECT_HOME=~/www
export WORKON_HOME=~/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

Atualize com o comando:

source ~/.bashrc
Criando nosso projeto
$ mkproject wsgi

Com as configurações anteriores o virtualenvwrapper já irá ativar o ambiente e levar você para a pasta do projeto. Mas para ativar é muito simples, basta usar:

$ workon wsgi

Com o nosso ambiente virtual criado partiremos então para a criação do nosso projeto django. Utilizarei a versão mais atual até o momento, nesse caso 1.7

$ pip install django

Não entrarei em detalhes para a configuração inicial do django, portanto irei usar um template que eu criei para a inicialização dos meus projeto. Criamos então o projeto dessa forma:

# startproject pelo template
$ django-admin.py startproject –template https://github.com/guilouro/django-boilerplate/archive/master.zip wsgitest .
# instala os pacotes
$ pip install -r requirements.txt
# faz a migração
$ python manage.py migrate

Você encontra esse template aqui -> django-boilerplate

Criando um site no apache para o projeto

Primeiramente, vamos criar um domínio fictício para responder com o nosso projeto ao ser acessado.

$ sudo vim /etc/hosts

127.0.0.1 djangowsgi.com

Agora vamos configurar o apache:

$ sudo vim /etc/apache2/sites-available/djangowsgi
WSGIDaemonProcess djangowsgi.com python-path=/home/guilouro/www/wsgi:/home/guilouro/.virtualenvs/wsgi/lib/python2.7/site-packages
WSGIProcessGroup djangowsgi.com<VirtualHost *:80>
ServerName djangowsgi.com
WSGIScriptAlias / /home/guilouro/www/wsgi/wsgitest/wsgi.py<Directory /home/guilouro/www/wsgi>
<Files wsgi.py>
Order allow,deny
Allow from all
</Files>
</Directory>

Alias /media/ /home/guilouro/www/wsgi/media/
Alias /static/ /home/guilouro/www/wsgi/static/

<Directory /home/guilouro/www/wsgi/static>
Order allow,deny
Allow from all
</Directory>

<Directory /home/guilouro/www/wsgi/media>
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

Reinicie novamente o apache:

$ sudo service apache2 reload

Explicarei agora um pouco do que foi usado nessa configuração

WSGIScriptAlias: é a url na qual você estará servindo sua aplicação (/ indica a url raiz), e a segunda parte é a localização de um “arquivo WSGI”.

Modo daemon

O modo daemon é o modo recomendado para a execução do mod_wsgi(em plataformas não-windows). Ele gera um processo independente que lida com as solicitações e pode ser executado como um usuário diferente do servidor web. Um dos pontos positivos dele é que a cada alteração em seu projeto você não precisa restartar o apache, basta executar um touch no seu arquivo wsgi.py

Directivas para o daemon

WSGIDaemonProcess: Foi atribuido a ele o nosso servername e utilizamos python-path por se tratar de um projeto que esta em ambiente virtual. Passamos então nossas paths nele.

WSGIProcessGroup: Atribuímos o servername a ele

Testando a aplicação

Agora acesse http://djangowsgi.com e corre para o abraço.

Espero que tenha ficado claro. Qualquer dúvida ou problema deixe nos comentários e vamos juntos tentar resolver.

Referências:

modwsgiwiki – https://code.google.com/p/modwsgi/wiki/
Blogalizado – http://www.blogalizado.com.br/deploy-de-aplicacao-django-no-apache-com-mod_wsgi/
Documentação oficial do django – https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/modwsgi/

Este artigo foi importado automaticamente por fazer parte do Planetário Dev. Quer fazer parte deste HUB de conteúdos? Faça parte do Planetário e veja as vantagens.

Não tem site ou blog? Seja um autor do site e ainda pode ser remunerado.

Leia também:

Facebook
LinkedIn
Twitter
Pinterest
Reddit
Telegram
WhatsApp
Email
Print

Relacionados

Deixe uma resposta