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:
- 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
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:
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:
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.
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.
Ola William bom dia, estou fazendo essa configuracao do django com apache no gcloud, funcionaria da mesma forma ? Desde ja obrigado.