O Django é um poderoso framework que pode ajudá-lo a decolar com sua aplicação Python ou Website. O Django inclui um servidor simplificado de desenvolvimento para testar seu código localmente, mas para todo o resto, quando falamos de ambiente de produção, é necessário um web server mais poderoso e seguro. A própria documentação do Django traz isso a atenção.
Nesse guia, iremos ver como instalar e configurar o Django em um ambiente virtual Python. Setaremos o Apache na vanguarda da nossa aplicação para que, dessa forma, possa administrar as requisições do cliente antes de passar requisições que requeiram uma aplicação lógica ao Django app. Faremos isso usando o módulo do Apache chamado mod_wsgi que pode se comunicar com o Django através de uma especificação de interface WSGI.
Nota: esse tutorial é baseado em um tutorial da Digital Ocean. Ele foi traduzido e modificado por mim para facilitar a compreensão de algumas coisas e para ajudar em algumas situações diferentes. O tutorial original em inglês foi acessado em 22/05/2018 e pode ser encontrado aqui: https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-apache-and-mod_wsgi-on-ubuntu-16-04
Índice de artigos do tutorial:
- Parte 1 – Configuração do projeto e ambiente virtual no servidor
- Parte 2 – Configuração do Apache e WSGI para acessar o nosso projeto no servidor
Objetivos e Pré-requisitos
Para completar esse passo-a-passo, você deverá ter uma instância/servidor Ubuntu 16.04, de preferência fresquinho (sem nenhuma instalação posterior).
Durante o tutorial, estaremos instalando o Django com um ambiente virtual. Instalar o Django dentro de um ambiente específico para o projeto permitirá que seus projetos e as requisições para os mesmos sejam separadas.
Após termos a aplicação rodando através do ambiente virtual, vamos configurar a interface Apache com o app Django. Faremos isso com o módulo do Apache mod_wsgi. Esse módulo pode traduzir requisições HTTP dentro de um formato compreensível para a aplicação, formato esse chamado de WSGI. Você poderá ler mais sobre WSGI no seguinte guia (em inglês): this guide.
Vamos começar!
Instale os Pacotes a partir dos Repositórios do Ubuntu
Para iniciar o processo, faremos o download e instalaremos todos os itens que precisaremos. Faremos o download a partir dos repositórios do Ubuntu. Esses downloads incluirão: o Apache Web Server, o mod_wsgi e o pip (que é o gerenciador de pacotes do Python).
Para termos tudo o que precisamos, atualize primeiramente as referências (índice) de pacotes existentes. Você pode fazer isso por digitar os seguintes comandos no terminal:
- sudo apt-get update
- sudo apt-get install python3-pip apache2 libapache2-mod-wsgi-py3
Configurando o ambiente de desenvolvimento Python (Virtual Enviroment – venv)
Agora que temos nossa lista de repositórios do Ubuntu atualizada, podemos começar a trabalhar em nosso projeto Django. O primeiro passo é criar um ambiente virtual (venv) Python. Isso permitirá que o nosso projeto Django tenha configurações diferentes de quaisquer outros projetos que possam, por ventura, estar no mesmo servidor.
Primeiramente, precisamos instalar o comando “virtualenv” para criar esses ambientes virtuais. Podemos fazer isso usando o “pip”. Digite:
- sudo pip3 install virtualenv
Com o virtualenv
instalado, podemos criar nosso projeto. Crie um diretório onde você deseja manter seu projeto e vá (dê o cd) nesse diretório. Nesse exemplo, usaremos o diretório /var/www e criaremos nele o nosso projeto:
- mkdir /var/www/meuprojeto
- cd /var/www/meuprojeto
Se você estiver já dentro do diretório (meuprojeto), crie agora um ambiente virtual Python. Você pode fazer isso digitando:
- virtualenv meuprojetoenv
Isso criará um diretório chamado “meuprojetoenv” dentro do diretório do seu projeto (ou seja, dentro de “meuprojeto”). Dentro dele, será instalado uma versão local do Python e uma versão do pip. Podemos usar essas instalações para configurar um ambiente isolado do Python para nosso projeto.
Antes de instalarmos os requisitos do nosso projeto, precisamos ativar (activate) o ambiente virtual. Basta digitar:
- source meuprojetoenv/bin/activate
Seu promt/terminal deverá modificar indicando agora que você está operando em um ambiente virtual Pyton. Você verá algo como: (meuprojetoenv)user@host:~/meuprojeto
$.
Agora sim! Com seu ambiente virtual ativo, você poderá:
- Instalar uma aplicação Django do zero ou…
- Instalar uma aplciação Django já existente, baseando-se nos requisitos encontrados num arquivo chamado requirements.txt.
Nova aplicação Django
Se estamos falando de uma nova aplicação Django, basta digitar:
- pip install django
Aplicação existente, baseada em requirements.txt
Caso você já tenha construído uma aplicação Django, você deve ter gerado um arquivo requirements.txt. Então, estando no mesmo diretório que esse arquivo, digite:
-
pip install -r requirements.txt
Criando e configurando um novo projeto Django
Caso você esteja criando uma nova aplicação Django, agora que você tem o ambiente virtual instalado, podemos criar os arquivos do nosso projeto.
Criando o projeto Django
Já que já temos um diretório para nosso projeto (/var/www/meuprojeto), diremos ao Django para instalar os arquivos que ele precisa aqui. O Django criará um diretório de segundo nível com o código atual, o que é normal, e colocará o script de gerenciamento nesse diretório. A chave para fazer isso é o ponto no final do comando. Isso dirá ao Django para criar os arquivos no diretório atual (lembrando que você deve estar dentro do diretório do projeto, ou seja, dentro de /var/www/meuprojeto). Digite:
- django-admin.py startproject meuprojeto .
Ajustando as configurações do projeto
A primeira coisa que devemos fazer com os recém-criados arquivos do nosso projeto é ajustar as configurações. Abra o arquivo settings.py:
- nano meuprojeto/settings.py
Para esse tutorial, usaremos a base de dados padrão dos projetos Django, o SQLite. Vamos nos focar na configuração dos hosts permitidos para restringir assim os domínios que irão acessar a aplicação. Vamos configurar também os arquivos estáticos, ou seja, onde o Django colocará os static files para que assim o web server possa acessar esses arquivos facilmente.
Comece por achar a linha ALLOWED_HOSTS dentro do “settings.py”. Dentro dos colchetes, coloque o IP público do seu servidor e o nome do domínio (ex.: [‘127.0.0.0.1’], [‘localhost’]). Cada valor deve ser separado por aspas simples e vírgula, como uma lista normal em Python:
# ~/meuprojeto/meuprojeto/settings.py . . . ALLOWED_HOSTS = ["server_domain_or_IP"] . . . |
No rodapé do arquivo, adicionaremos a linha para configurar esse diretório. O Django usa a constante de configuração STATIC_ROOT para determinar o diretório onde esses arquivos deverão ir. Vamos usar um pouco de Python para dizer ao Django para usar um diretório chamado “static” no nosso diretório principal do projeto:
~/myproject/myproject/settings.py . . . STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static/') |
Quando acabar, salve e feche o arquivo.
Complete as configurações iniciais do projeto
Agora está na hora de migrarmos as tabelas iniciais da base de dados para nosso Banco de Dados SQLite usando o script de gerenciamento:
- cd /var/www/meuprojeto
- python manage.py makemigrations
- python manage.py migrate
Crie um usuário com privilégios administrativos, o SuperUser:
- python manage.py createsuperuser
Você terá que setar um nome de usuário, um e-mail e uma senha (que deverá ser confirmada).
Depois de setar essas configurações, podemos coletar todos os conteúdos estáticos para dentro do diretório que configuramos. Digite:
- python manage.py collectstatic
Você terá de confirmar a operação. Os arquivos estáticos serão colocados em um diretório chamadostatic
dentro do diretório do seu projeto.
Ajustando as configurações do Firewall
Agora podemos ajustar nossas configurações de firewall para permitir o tráfego ao nosso servidor de desenvolvimento Django, o qual rodará na porta 8000. Se você seguiu esse tutorial desde o início, você deve ter um firewall UFW ativado. Permita conexões com o servidor de desenvolvimento por digitar:
- sudo ufw allow 8000
Finalmente, você pode testar seu projeto por “startar” o servidor de desenvolvimento Django. Use o comando abaixo:F
- python manage.py runserver 0.0.0.0:8000
No seu navegador, digite o endereço acima (http://0.0.0.0:8000).
Você deverá ver a página padrão do Django:
Se você adicionar /admin na sua barra de endereços (url), aparecerá a tela administrativa onde você poderá digitar o usuário e a senha criada anteriormente (superuser):
Depois de se logar, você acessará a interface padrão do painel administrativo do Django:
Explore um pouco esse painel administrativo. Quando você terminar, digite CTRL+C (COMAND+C no Mac) para terminar com o processo do servidor de desenvolvimento.
Por último, digite o comando abaixo para desativar o ambiente virtual:
- deactivate
Na parte 2 desse tutorial, veremos como instalar o Apache e configurá-lo.