Na razie działaliśmy na zapewnianym przez Django testowym serwerze. Teraz będziemy próbowali uruchomić aplikację na serwerze WWW.

Testy będę prowadzić na maszynie wirtualnej z Arch Linux.

Opis instalacji Arch Linux od podstaw pominę, żeby nie zanudzać czytelników. Jeżeli chcecie dowiedzieć się więcej, radzę zapoznać się z Installation Guide i wypróbować samemu na wirtualnej maszynie lub zbędnym komputerze.

Przejdźmy do konkretów.

Jakie programy potrzebujemy? Serwer WWW, WSGI, Python 3.4 lub nowszy, PIP oraz Django 1.9 lub nowsze (najlepiej 1.11 wzwyż). Zainstalujmy je.

Projekt umieściłem w katalogu /home/server/tasklist. Jak? Gitem. Przez sklonowanie repozytorium https://github.com/szymonsiecinski/tasklist.

Po instalacji niezbędnego oprogramowania, czas na instalację dodatkowych pakietów przez PIP poleceniem
pip install -r requirements.txt

Po instalacji czas na małą zmianę w pliku settings.py, dzięki której ułatwimy sobie życie. Chodzi o dopisanie tej linijki:

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

W tym pliku BASE_DIR jest zdefiniowane jako ścieżka, w której jest projekt, więc czemu z tego nie skorzystać zamiast wklepywać z palca?

Teraz wykonujemy polecenie
python manage.py collectstatic

aby wszystkie statyczne pliki (css, js, fonty) wylądowały w jednym miejscu, dzięki czemu łatwiej będzie udostępniać je.

W przypadku użytej maszyny wirtualnej zdecydowałem się na serwer Apache oraz moduł WSGI. Przejdźmy zatem do ustawień serwera.

Jaki użytkownik oraz grupa będzie mieć dostęp do pliku – kwestia gustu. Domyślnie jest http, które pozostawiłem.

Włączmy też moduł WSGI oraz aliasu:

Teraz czas na to, co tygryski lubią najbardziej: konfiguracja (wirtualnego) serwera z naszym projektem.

<VirtualHost *:80>
Alias /static /home/server/tasklist/static/

WSGIDaemonProcess tasklist python-path=/home/server/tasklist/TaskList/wsgi.py:/home/server/tasklist
WSGIProcessGroup tasklist

<Directory /home/server/tasklist/static>
Order allow,deny
Allow from all
Require all granted
</Directory>

WSGIScriptAlias / /home/server/tasklist/TaskList/wsgi.py process-group=tasklist

<Directory /home/server/tasklist/TaskList>
<Files wsgi.py>
Order deny,allow
Allow from all
Require all granted
</Files>
</Directory>

</VirtualHost>

I parę wyjaśnień: Alias oznacza ustawienie nowego adresu dla serwera z zawartością wskazanego katalogu. Do tego, aby aplikacja działała, trzeba ustawić demona (usługę) WSGI z projektem. Projekt można dowolnie nazwać, ale bardzo ważne jest python-path. Tam podajemy ścieżkę do naszej aplikacji. Jeżeli potrzebujemy ustawić więcej niż jedną ścieżkę, wykorzystujemy dwukropek (:) do rozdzielenia ścieżek w jednej linii.

Potem ustawiamy WSGIProcessGroup (do ustawienia procesu) oraz alias WSGIScriptAlias. Pierwszy argument to ścieżka aplikacji, drugi to ścieżka do pliku wsgi.py z ustawieniami aplikacji.

W znacznikach Directory zawarłem ustawienia dotyczące dostępu do wskazanych katalogów.

Jeszcze jedna bardzo ważna rzecz: bez przyznania praw do odczytu i dostępu dla katalogu z aplikacją będą błędy 403 (dostęp zabroniony). A plik z bazą danych musi być dostępny do zapisu dla serwera WWW.

Plik httpd.conf z konfiguracją zapisuję i uruchamiam serwer.

I na dowód parę zrzutów ekranowych:

Ten pokaz slajdów wymaga włączonego JavaScript.

Dodaj komentarz