22 kwietnia 2019

Jak uruchomić Django

Hej, z uwagi na to jak często powstają nowe wpisy, mój wstęp będzie następujący:

W tym półroczu zajmiemy się instalacją „django” oraz konfiguracją serwera produkcyjnego 🙂

Zaczynamy

Na starcie zalecam posiadanie czystej instalacji ubuntu. Wiem że lepiej aby było to centos lub debian, ale ja nie jestem profesjonalistą więc mam ubuntu skierowane do lamusów.

Sprawdzamy czy posiadamy pythona w wersji 3.x na starcie, wpiszmy więc:

python3 --version

Jeśli nie posiadamy pythona to:

sudo apt-get install python3

Musimy zainstalować „pip„, więc wpisujemy polecenie:

sudo apt-get install python3-pip

Jeśli jednak „pip” posiadamy, dokonajmy aktualizacji do najnowszej wersji:

sudo python3 -m pip install --upgrade pip

Instalacja „Django”

Instalujemy „Django” poleceniem:

pip3 install django

Teraz sprawdźmy wersję zainstalowanego „Django

python3 -m django --version

Następnie instalujemy pakiet „python3-django„:

sudo apt-get install python3-django

Uruchamiamy serwer deweloperski

Przechodzimy do katalogu gdzie chcemy ulokować nasz projekt, następnie wydajemy polecenie:

django-admin startproject mysite

Następnie wchodzimy do katalogu „mysite” odszukujemy plik „manage.py” oraz wykonujemy poniższe polecenie:

python3 manage.py runserver

Zostanie teraz uruchomiony deweloperski serwer django pod domyślnym adresem: 127.0.0.1:8000

Konfiguracja Nginx

Wiadomym jest, że serwer deweloperski nie może działać w formie produkcyjnej. Jako serwer produkcyjny wykorzystamy nginx. Więc musimy go wpierw zainstalować:

sudo apt-get install nginx

Jeśli teraz wydamy polecenie:

sudo nginx -t

Otrzymamy odpowiedź z której wynika, że wszystko jest skonfigurowane prawidłowo, za chwilę to zepsujemy:

Edytujemy plik /etc/nginx/sites-available/default

Wewnątrz pliku szukamy:

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
}

Zmieniamy tą sekcję na:

location / {
     uwsgi_pass django;
     include /var/www/mysite/uwsgi_params
}

przed sekcją „server” dodajmy:

upstream django {
     server 127.0.0.1:8001;
}

Jeśli teraz sprawdzimy czy nasz nginx jest skonfigurowany prawidłowo otrzymamy odpowiedź mniej więcej taką:

nginx: [emerg] open() "{ścieżka do pliku}" failed (2: No such file or directory) in /etc/nginx/sites-enabled/default:50 nginx: configuration file /etc/nginx/nginx.conf test failed

Prawidłowo, teraz musi rzucać błędami, ponieważ nie mamy uwsgi. Nie mamy również pliku uwsgi_params, wszystko po kolei teraz naprawimy.

Instalacja uwsgi

pip3 install uwsgi
sudo apt-get install uwsgi
sudo pat-get install uwsgi-plugin-python3

Stwórzmy teraz plik testowy, np „test.py

def application(env, start_response):
     start_response('200 OK', [('Content-Type','text/html')])
     return[b"HelloWorld"]

Wydając polecenie w konsoli:

uwsgi --plugin http,python3 --http :8000 --wsgi-file {ścieżka do pliku test.py}

W ten sposób uruchomimy serwer, możemy wpisać w przeglądarce adres 127.0.0.1:8000 i zobaczymy tekst „HelloWorld„.

Wcześniej wspomniałem o braku pliku „uwsgi_params„, stwórzmy go więc w katalogu który podaliśmy wcześniej jako konfigurację default dla nginx a jego zawartość będzie równa poniższej:

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
 Źródło:
https://github.com/nginx/nginx/blob/master/conf/uwsgi_params

Uruchomienie serwera produkcyjnego

Zbliżamy się do końca (wreszcie). Teraz pozostaje tylko odpalić nginx:

sudo nginx

Musimy jeszcze odpalić uwsgi z odpowiednimi parametrami:

uwsgi --plugins python3 --socket :8001 --module mysite.wsgi

Możemy teraz wpisać w przeglądarce adres 127.0.0.1 i zobaczymy stronę początkową django. Port oraz adres zmieniamy w pliku:
/etc/nginx/sites-available/default„.