Como configurar o Django em um Servidor Ubuntu com Apache – Parte 2

No artigo anterior vimos como montar um projeto Django dentro de um servidor com Linux e como configurar o ambiente virtual dentro do mesmo. Se você seguiu aquele artigo ou apenas deseja configurar o Apache no servidor com Ubuntu para rodar seu projeto Django, leia esse artigo e siga os passos na íntegra.

Nota: esse artigo é uma tradução e adaptação de um artigo da Digital Ocean. Você pode acessar o artigo original (em inglês) através do seguinte link: https://www.digitalocean.com/community/tutorials/how-to-set-up-uwsgi-and-nginx-to-serve-python-apps-on-ubuntu-14-04#definitions-and-concepts

Índice de artigos do tutorial:

Configure o Apache

Agora que seu projeto Django está funcionando, podemos configurar o Apache para tomar a frente. As conexões que ele receber serão traduzidas para o formato esperado pelas aplicações do Django, o WSGI. Essa tradução é feita pelo módulo mod_wsgi. Isso deve ter sido habilitado automaticamente durante a instalação feita anteriormente.

Para configurar os caminhos do WSGI, precisamos editar o arquivo padrão do virtual host. No terminal/promt, digite:

1
sudo nano /etc/apache2/sites-available/000-default.conf

Podemos manter a estrutura do arquivo assim como a encontramos. Precisamos somente adicionar algumas coisas:

Para iniciar, vamos configurar os arquivos estáticos, ou static files. Vamos usar um alias (apelido) para dizer ao Apache para mapear qualquer requisição que inicie com o caminho “/static” para o nosso diretório “static” que está na nossa pasta do projeto. Anteriormente coletamos os arquivos (assets) e colocamos nesse diretório. Agora vamos configurar o alias e então garantir o acesso ao diretório:

/etc/apache2/sites-available/000-default.conf
1
2
3
4
5
6
7
8
9
10
11
<VirtualHost *:80>
   . . . Alias /static /home/sammy/myproject/static
   <Directory /home/sammy/myproject/static>
      Require all granted
   </Directory>
</VirtualHost>
/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80> . . . Alias /static /home/sammy/myproject/static <Directory /home/sammy/myproject/static> Require all granted </Directory> <Directory /home/sammy/myproject/myproject> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost>

Em seguida, garantiremos acesso ao arquivo wsgi.py ao segundo nível de diretórios do projeto, onde o Django está armazenado. Para fazer isso, use uma seção de diretório com um arquivo de seção dentro dele. No mesmo arquivo 000-default.conf modifique:

/etc/apache2/sites-available/000-default.conf
1
2
3
4
5
6
7
8
9
<VirtualHost *:80>
. . . Alias /static /var/www/meuprojeto/static
   <Directory /home/var/www/meuprojeto/static>
       Require all granted
   </Directory>
   <Directory /var/www/meuprojeto/meuprojeto>
       <Files wsgi.py> Require all granted </Files>
   </Directory>
</VirtualHost>

Depois dessa configuração, estaremos prontos para construir a porção do arquivo que encabeça atualmente os caminhos do WSGI. Usaremos o modo daemon para rodar o processo WSGI. Essa é a configuração recomendada pelo próprio Django. Usaremos a diretiva WSGIDaemonProcess para essa configuração.

Essa diretiva pega um nome arbitrário para o processo. Nesse exemplo, usaremos o nome arbitrário “meuprojeto”. Depois, setaremos um caminho inicial (home) onde o Apache poderá encontrar todos os componentes que podem ser requisitados. Já que usamos anteriormente um ambiente virtual (que chamamos de meuprojetoenv), vamos apontar esse diretório/ambiente como nossa base do ambiente virtual. Após isso, setaremos o diretório do Python para ser usado pelo nosso projeto Django.

Logo após, precisamos especificar o grupo de processos. Esse deve apontar para o mesmo nome selecionado para a diretiva WSGIDaemonProcess, a qual chamamos de  “meuprojeto”. Finalmente, precisamos setar um alias para que o Apache passe as requisições do domínio raiz (root) para o arquivo wsgi.py.

/etc/apache2/sites-available/000-default.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<VirtualHost *:80>
    . . .
    Alias /static /var/www/meuprojeto/static
    <Directory /var/www/meuprojeto/static>
        Require all granted
    </Directory>
    <Directory /var/www/meuprojeto/meuprojeto>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
    WSGIDaemonProcess meuprojeto python-home=/var/www/meuprojeto/meuprojetoenv python-path=/var/www/meuprojeto
    WSGIProcessGroup meuprojeto
    WSGIScriptAlias / /var/www/meuprojeto/meuprojeto/wsgi.py
</VirtualHost>

Quando você terminar de fazer essas alterações, salve e feche o arquivo.

Resolvendo alguns problemas com as permissões

Se você estiver seguindo esse tutorial e tiver usado o banco de dados SQLite, você precisará permitir ao Apache acessar esse arquivo.

Para fazer isso, o primeiro passo é alterar as permissões de forma que o group owner do banco de dados possa ler e escrever (read e write). Por padrão, o arquivo de banco de dados é chamado de db.sqlite3 e deve estar na raiz do seu projeto.

Para alterar suas permissões, digite:

  • chmod 664 /var/www/meuprojeto/db.sqlite3

Depois, precisamso dar permissões para o grupo a que o Apache pertence. O Apache pertence ao grupo www-data:

  • sudo chown :www-data /var/www/meuprojeto/db.sqlite3

Para ter as permissões de escrita, precisamos dar ao Apache um grupo de permissões sobre o diretório onde está o banco de dados, ou seja, o diretório principal do projeto.

  • sudo chown :www-data /var/www/meuprojeto

Precisamos reajustar novamente nosso firewall. Não precisamos mais da porta 8000 aberta. Isso porque nós estamos usando o proxy através do Apache. Sendo assim, podemos remover essa regra. Podemos então adicionar uma exceção para permitir o tráfego ao processo do Apache:

cd /var/www/meuprojeto
sudo ufw delete allow 8000
sudo ufw allow 'Apache Full'

Verifique seus arquivos do Apache para se certificar que você não tem nenhum erro de sintaxe:

sudo apache2ctl configtest

Se tudo estiver certo (esperamos que esteja), você verá a seguinte mensagem:

. . .
Syntax OK

Uma vez tendo seguido esses passos, estamos prontos para fazer um restart do Apache a fim de implementar as alterações feitas. Dê um restart no Apache usando o seguinte código:

. . .
sudo systemctl restart apache2
 

Você deve agora estar apto a acessar seu site em Django. Basta digitar o endereço de ip ou nome do seu servidor (você não precisa especificar a porta). O site normal (aquela tela inicial padrão do Django) e a interface padrão do Admin devem estar funcionando como esperado.

Espero ter ajudado.

Seus comentários são muito apreciados.

This site uses Akismet to reduce spam. Learn how your comment data is processed.