Rodando o Django no Rpi

Na verdade funciona no Raspberry pi como em qualquer outra distro derivada do Debian.

Eu vi muitos tutoriais na internet quando estava querendo colocar minha aplicação django no Rpi e também em servidores Ubuntu, encontrei um que de longe era o mais simples e sucinto, como eu sei que a barreira linguística pode ser um problema para muitos, traduzi e adaptei por considerar um conhecimento bem legal de compartilhar. Caso queira verificar, coloquei o link do original no final do post.

Primeiros passos

Vamos lá, estou partindo do pressuposto que você já tem um Rpi corretamente configurado e já possui um projeto em Django que queira colocar para rodar no Rpi.

Para colocar o seu projeto embarcado no Rpi, você pode copiar de seu repositório git, copiar os arquivos ou começar ele dentro do próprio Rpi mesmo. De qualquer maneira guarde o caminho até a pasta que contenha seu projeto. Vou chamar a pasta de “MeuProjeto” para facilitar a explicação.

Então caminhe até a pasta do projeto, migre o banco de dados e rode o seu projeto para testar se está funcionando e propriamente configurado.

$ cd MeuProjeto
$ python manage.py makemigrations
$ python manage.py migrate
$ python manage.py runserver`

Se der tudo certo vc conseguirá acessar a página inicial do seu projeto no browser do Rpi ou se quiser acessar do seu computador rode o projeto no IP 0.0.0.0( python manage.py runserver 0.0.0.0:8000)

Tudo certo? Vamos instalar o gunicorn e instalar e configurar também o supervisor.

Preparando o gunicorn

$ pip install gunicorn
$ sudo apt-get install supervisor

Para configura-lo você precisará de um editor de texto. Se estiver acessando via ssh utilize o “nano” ou o “vim” por exemplo. O que você estiver mais acostumado. Se estiver acessando o modo gráfico, utilize o editor gráfico de texto da sua preferência.

$ sudo nano /etc/supervisor/conf.d/gunicorn.conf`

e lá dentro configure conforme a seguir:

[program:gunicorn]
command = /home/pi/bin/python /home/pi/bin/gunicorn MeuProjeto.wsgi:application
directory = /home/pi/MeuProjeto
user = pi
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/gunicorn.log
stderr_logfile = /var/log/supervisor/gunicorn_err.log

Nessa parte da configuração preste bastante atenção na localização dos seus arquivos. Em especial na localização do wsgi.py para preencher o “command” e o caminho até o pasta do seu projeto (no nosso caso aqui, MeuProjeto). Caso dê algum problema fique esperto no gunicorn.log e gunicorn_err.log para pegar dicas do que pode ter acontecido. Salve e saia do editor.

Você precisará reiniciar o supervisor para que ele leia as mudanças.

$ sudo supervisorctl reread
$ sudo supervisorctl update
$ sudo supervisorctl status`

Preparando os estáticos

O django não serve estáticos nativamente com o Debug=False. Existem pacotes em python para isto, como o dj-static ou o whitenoise, entretanto, aqui vamos utilizar o nginx para isto.

Vamos criar as pastas que receberam os estáticos e configurar suas permissões.

$ sudo mkdir /var/www /var/www/static /var/www/media
$ sudo chown -R pi:www-data /var/www`

Agora no settings do projeto Django, adicione/modifique as linhas. nano settings.py no final do arquivo insira.

MEDIA_ROOT = '/var/www/media/'
MEDIA_URL = '/media/'
STATIC_ROOT = '/var/www/static/'
STATIC_URL = '/static/'

e informe o Django para ele coletar os estáticos para você e colocar nas pastas criadas.

python manage.py collectstatic

Configurando o Nginx

Vamos agora instalar e configurar o nginx:

$ sudo apt install nginx
$ cd /etc/nginx/sites-available/
$ sudo nano MeuProjeto

Agora nós informamos o nginx que o nosso projeto Django está disponível em 127.0.0.1:8000 que o gunicorn iniciou e que ele deve ser servido na porta 80.

upstream gunicorn {
    server 127.0.0.1:8000;
}
 
# cria um servidor nginx na porta 80
server {
    # ouvir porta 80
    listen 80;
 
    # Localização da pasta para servir os estáticos
    root /var/www/;
 
    # Criar logs de acesso
    access_log /var/log/nginx/django_project_name_access.log;
    error_log /var/log/nginx/django_project_name_error.log;
 
    client_max_body_size 0;
 
    # Servir os estáticos primeiro, e então passar o request para o Gunicorn
    try_files $uri @gunicorn;
 
    # regras para o gunicorn
    location @gunicorn {
        client_max_body_size 0;
        proxy_pass http://gunicorn;
        proxy_redirect off;
        proxy_read_timeout 5m;
 
        # ter certeza que os headers HTTP estão configurados corretamente
        proxy_set_header Host            $host;
        proxy_set_header X-Real-IP       $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Após salvar, execute:

$ cd /etc/nginx/sites-enabled
$ sudo ln -s ../sites-available/test_project_name
$ sudo rm default

reinicie o nginx para que as modificações comecem a fazer efeito:

$ sudo service nginx restart

E se tudo estiver corretamente configurado você deve poder acessar sua aplicação Django de qualquer computador na mesma rede do seu Rpi bastando digitar o IP dele no browser.

=)

original

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *