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„.