Nesse tutorial iremos realizar o deploy de uma aplicação em Django com uWSGI e Nginx
1 – Realizar o update do apt
apt-get update apt-get upgrade
2 – Instalar dependências
apt install git gcc nginx certbot python3-dev python3.11-venv
3 – Criar diretório do projeto
mkdir /videoaula cd /videoaula
4 – Criar e ativar o ambiente virtual
python3 -m venv venv source venv/bin/activate
5 – Instalar os pacotes
pip install django uwsgi
6 – Iniciar o projeto
python3 -m django --version django-admin startproject videoaula . python3 manage.py runserver 0.0.0.0:8000
- Acesse o host no porta 8000 verifique se aplicação django esta presente.
7 – Ajustar o setting.py
- Configurar o allowed hosts e a static url
- Aproveite para checar a aplicação
- python3 manage.py runserver 0.0.0.0:8000
vim videoaula/settings.py import os ALLOWED_HOSTS = ['*'] STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, "static/")
8 – Testando manualmente o uWSGI
- Crie um arquivo teste.py com o seguinte conteúdo.
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World!"]
- uwsgi –http :8000 –wsgi-file teste.py
Acesse o host na porta 8000 e confirme se o Hello World foi redenrizado.
9 – Testando o projeto vídeo aula com uWSGI usando o IP Socket
- Acesse a aplicação via uWSGI para simples conferência.
uwsgi --http :8000 --module videoaula.wsgi
10 – Configurando o Nginx para acessar aplicação via Unix Socket
- Crie o arquivo .conf dentro de vim /etc/nginx/sites-available/videoaula.conf
- Preencha com seguinte conteúdo.
# Configuração do Servidor upstream django { server unix:///videoaula/videoaula.sock; } server { listen 80; server_name videoaula.cuidadodigital.com.br; charset utf-8; # max upload size client_max_body_size 75M; # Django media and static files location /media { alias /videoaula/media; } #Django static location /static { alias /videoaula/static; } # Send all non-media requests to the Django server. location / { uwsgi_pass django; include /videoaula/uwsgi_params; } }
- Crei o uwsgi_params dentro de /video/aula
- vim /videoaula/uwsgi_params
uwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param REQUEST_SCHEME $scheme; uwsgi_param HTTPS $https if_not_empty; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name;
- Crie um Link Simbólico do videoaula.conf de sites-availabe para sites-enable
ln -s /etc/nginx/sites-available/videoaula.conf /etc/nginx/sites-enabled/
- Cheque as configurações do ngnix: # ngnix -t
- Habilite o nginx: # systemct enable nginx
- Reinicie o nginx: # systemct restart nginx
11 – Testando aplicação via Unix Socket
uwsgi --socket videoaula.sock --module videoaula.wsgi --chmod-socket=666 --uid www-data
- Nessa etapa a aplicação ja deve estar funcionando, poém como aplicação e não como serviço
12 – Crei o arquivo de configuração que o demom irá utilizar para chamar uWSGI com serviço
- vim /videoaula/videoaula_uwsgi.ini
[uwsgi] # full path to Django project's root directory chdir = /videoaula # Django's wsgi file module = videoaula.wsgi # full path to python virtual env home = /videoaula/venv # enable uwsgi master process master = true # maximum number of worker processes processes = 10 # the socket (use the full path to be safe socket = /videoaula/videoaula.sock # socket permissions chmod-socket = 666 # User ID uid = www-data # Group ID gid = www-data # clear environment on exit vacuum = true # daemonize uwsgi and write messages into given log daemonize = /videoaula/uwsgi-emperor.log
13 – Testando a aplicação com paramentros de inicialização
uwsgi --ini videoaula_uwsgi.ini
15 – Configurando o vassals
mkdir -p /videoaula/venv/vassals ln -s /videoaula/videoaula_uwsgi.ini /videoaula/venv/vassals/
16 – Teste final. Realizado teste em modo Emperador do uWSGI emperor mode
uwsgi --emperor /videoaula/venv/vassals --uid www-data --gid www-data
17 – Criando serviço no linux Daemon
- Crie o arquivo videoaula-uwsgi-emperor.service
- vim /etc/systemd/system/videoaula-uwsgi-emperor.service
- Preencha com as seguintes configurações
[Unit] Description=App Django - Video Aula After=network.target [Service] User=admin Restart=always ExecStart=/videoaula/venv/bin/uwsgi --emperor /videoaula/venv/vassals --uid www-data --gid www-data [Install] WantedBy=multi-user.target
- Para habilitar o serviço : systemctl enable videoaula-uwsgi-emperor.service
- Para iniciar o serviço: systemctl start videoaula-uwsgi-emperor.service
Inpirado em: https://tonyteaches.tech/django-nginx-uwsgi-tutorial/
Você precisa fazer login para comentar.