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.

1 comentário

  1. bruno de araujo silva Responder

    Ola William bom dia, estou fazendo essa configuracao do django com apache no gcloud, funcionaria da mesma forma ? Desde ja obrigado.

Seus comentários são muito apreciados.

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