Aplikacja Django na serwerze MyDevil

Miałam zamiar napisać sobie notatkę z instrukcją tworzenia projektu w Django. Doszłam jednak do wniosku, że takie instrukcje łatwo można znaleźć w sieci, nawet po polsku. Zamiast tego napisałam instrukcję instalowania projektu Django na hostingu wykupionym w MyDevil. Oczywiście wszystkie (albo prawie wszystkie) informacje znajdują się w dokumentacji udostępnionej przez MyDevil. Jednak dla mnie, kompletnie początkującego adepta Pythona, to wszystko nie było ani jasne ani łatwe do przetrawienia za pierwszym razem, stąd decyzja. Zatem do dzieła.

Odpowiednia konfiguracja usługi

W pierwszej kolejności należy ustawić, jeśli się tego nie zrobiło wcześniej, odpowiednią opcję umożliwiając sobie tym samym instalację własnego oprogramowania. Procedura opisana jest szczegółowo w dokumentacji MyDevil pod hasłem Binexec.

Środowisko wirtualne

Instalacja jakiejkolwiek aplikacji Python na tych serwerach wymaga stworzenia środowiska wirtualnego. Zgodnie z sugestią należy wpierw stworzyć osobny katalog .virtualenvs służący do przechowywania wszystkich utworzonych przez użytkownika wirtualnych środowisk. W tym celu należy zalogować się przez SSL na swój serwer i wykonać następującą instrukcję:

$ mkdir /usr/home/login/.virtualenvs

Po utworzeniu katalogu można stworzyć wewnątrz niego środowisko wirtualne. W tym celu w konsoli należy wykonać następujące instrukcje:

$ cd /usr/home/login/.virtualenvs
$ virtualenv nazwa_środowiska -p /usr/local/bin/python3.4

Ja celowo wymusiłam utworzenie środowiska opierającego się na wersji 3.4 Pythona. Jeśli wszystko przebiegnie pomyślnie i nie pojawią się żadne błędy można aktywować środowisko wirtualne:

$ source /usr/home/login/.virtualenvs/nazwa_środowiska/bin/activate

Django

Teraz można już instalować dodatkowe pakiety min. framework Django. Ja postanowiłam wykorzystać ostatnią stabilną wersję w związku z tym wykonałam komendę:

(nazwa_środowiska)$ pip install Django==1.11.7

Warto zwrócić uwagę, że po aktywacji środowiska zmienia się znak zachęty.

Strona WWW

Teraz najwyższa pora by panelu administracyjnym serwera stworzyć stronę WWW typu Python, czego nie będę opisywać dokładnie gdyż jest to dość dobrze opisane w dokumentacji. Oczywiście podczas tworzenia tej strony, zgodnie z zaleceniem należy jako źródło podać katalog zawierający nasze środowisko wirtualne. W tym celu wybieramy wpierw opcję “Inny plik wykonywalny”:

MyDevil strona WWW typu Python

A następnie wskazujemy w katalogu naszego środowiska wirtualnego plik /bin/python:

MyDevil strona WWW typu Python

Po tej operacji na serwerze w katalogu domains pojawi się podkatalog twoja.domena.pl przechowujący pliki utworzonej strony. Wewnątrz znajduje się min katalog pubic_python, domyślny katalog w którym umieszcza się pliki strony WWW typu Python.

Projekt Django

Teraz już wreszcie można stworzyć aplikację. W pierwszej kolejności należy wyczyścić domyślny katalog pubic_python wykonując instrukcję:

(nazwa_środowiska)$ cd /usr/home/login/domains/domena/
(nazwa_środowiska)$ rm -rf public_python

Następnie można już stworzyć nowy projekt oparty o zainstalowaną wcześniej w wirtualnym środowisku wersję Django:

(nazwa_środowiska)$ django-admin.py startproject public_python

Kolejnym krokiem jest konfiguracja modułu Phusion Passenger, który jest odpowiedzialny za uruchomienie aplikacji Django. W tym celu, w katalogu projektu (public_python) należy utworzyć plik passenger_wsgi.py o następującej zawartości (odpowiedniej dla wersji Django 1.7 i wyższych):

import sys, os

sys.path.append(os.getcwd())
os.environ['DJANGO_SETTINGS_MODULE'] = "nazwa_projektu.settings"   

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Po tej operacji warto zrestartować stronę w panelu administracyjnym lub poprzez polecenie:

(nazwa_środowiska)$ devil www restart domena

Konfiguracja hosta

Od tego momentu aplikacja w zasadzie powinna już działać i po wpisaniu w przeglądarce twoja.domena.pl wyświetlać taki panel:

projekt Django

Niestety prawdopodobnie zobaczysz wpierw komunikat:

 
DisallowedHost at / Invalid HTTP_HOST header: 'twoja.domena.pl'. You may need to add u'twoja.domena.pl' to ALLOWED_HOSTS.
n your project settings.py file,set ALLOWED_HOSTS

W takim wypadku należy odszukać plik settings.py w katalogu projektu i edytować zawartość tablicy ALLOWED_HOSTS dodając następującą informację:

ALLOWED_HOSTS = ['twoja.domena.pl', 'localhost', '127.0.0.1']

Teraz już wszystko powinno działać jak należy. Można przystępować do tworzenia aplikacji, o ile oczywiście traktuje się tę instalację jako serwer deweloperski. Niebawem napiszę jak zainstalować gotową aplikację stworzoną w frameworku Django na serwerze produkcyjnym na MyDevil.

Post Scriptum (11 grudnia 2018):
Mimo, że w dokumentacji Django napisano:

Django 2.1 supports Python 3.5, 3.6, and 3.7. Django 2.0 is the last version to support Python 3.4. We highly recommend and only officially support the latest release of each series.

Próba instalacji aplikacji opartej na Django 2 i wirtualnym środowisku z wersją 3.5 pythona, jest skazana na porażkę. Dowiedziałam się tego dzięki Katarzynie, z którą razem próbowałyśmy dociec czemu to nie działa. Na szczęście wystarczy zadbać by wirtualne środowisko było oparte o wersję 3.6 pythona i wszystko działa jak należy.

9 komentarzy do wpisu „Aplikacja Django na serwerze MyDevil”

  1. Długo szukałem hostingu pod Django i w końcu sprawdziłem DigitalOcean. Od tamtej pory nie zastanawiam się nad wyborem hostingu. Jeśli nie chcesz się dłubać samodzielnie w konfigurowanie serwera, możesz skorzystać z gotowego dropleta z Django. Jeśli lubisz się bawić, możesz sama wszystko postawić. Co więcej, DigitalOcean na swojej stronie ma wiele poradników dotyczących instalacji i używania Pythona/Django.

    Co do samego Pythona, warto zacząć używać pipenv (https://docs.pipenv.org). Jest to połączenie virtualenv oraz pip w jednym narzędziu. Daje o wiele większe możliwości niż wspomniane narzędzia używane osobno.

  2. Cześć,
    dzięki za artykuł. Właśnie przymierzam się do przećwiczenia procesu wdrażania na produkcję ze swoją pierwszą aplikacją. Też zdecydowałam się na myDevil, ale przed wykupieniem konta, chcę się dobrze przygotować do procesu wdrożenia.
    Czy opisałaś może gdzieś doświadczenie z przenoszeniem gotowej aplikacji z maszyny lokalnej na produkcję? Wspominałaś na końcu artykuły, że masz taki plan, ale nie mogę tego jakoś znaleźć.
    Zastanawia mnie np. kwestia nazwy projektu. W instrukcji jest o nazwie publick_python, a jak wiadomo lokalnie projekt nazywa się inaczej ;) I teraz się zastanawiam, czy mam wprowadzić lokalnie jakieś większe zmiany, czy tylko zmienić nazwę projektu w plikach produkcyjnych settings i wsgi?

    A druga kwestia która mnie interesuje, to czy istnieje możliwość utworzenia kilku projektów na myDevil w ramach różnych subdomen? Może miałaś z tym jakieś doświadczenie. Z góry dzięki za pomoc :)

  3. Kasiu, nie opisałam tego nigdzie. Po prostu wrzucam swoją aplikację do katalogu public_python, pilnuję, żeby nie plik settings miał odpowiednią dla serwera zawartość (choć wiem, że można to zrobić mądrzej, ale jeszcze nie przećwiczyłam). Robię jeśli trzeba requirements i migrację bazy i już.

  4. Problem jest na samym początku, niewidomo gdzie wpisywać comand. w opisie: “W tym celu należy zalogować się przez SSL na swój serwer”. Jak to zrobić??? Te miejce też nie jest opisane u MyDevil. Gdzie mam wpisać: $ mkdir /usr/home/login/.virtualenvs

  5. Po zrestartowaniu strony wyskakiwał mi błąd który w logach odczytałem jako “No module named ‘django'”, pamiętajcie żeby zainstalować przez ssh na virtualenv moduł :) “pip install Django”

Leave a Reply

%d bloggers like this: