Django installieren: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
K (Glossar)
(Aktualisierung der Anleitung auf Django 2.2 mit UWSGI)
Zeile 1: Zeile 1:
===Installation Djangobibliothek===
===Installation Djangobibliothek===
Die Djangobibliotheken werden in einer Virtualenv-Umgebung installiert. Vorraussetzung ist ein auf dem System installiertes python mit einem virtualenv-Paket
Die Djangobibliotheken werden in einer Virtualenv-Umgebung installiert. Voraussetzung ist ein auf dem System installiertes python mit einem virtualenv-Paket
 
Zunächst wird die Virtualenvumgebung erstellt:
Zunächst wird die Virtualenvumgebung erstellt:
<pre>
<pre>
xyz00-doms:~$ virtualenv djangoenv
xyz00-doms:~$ virtualenv -p /usr/bin/python3 djangoenv
New python executable in djangoenv/bin/python
Already using interpreter /usr/bin/python3
Installing setuptools............done.
Using base prefix '/usr'
New python executable in djangoenv/bin/python3
Also creating executable in djangoenv/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
</pre>
</pre>
Dann werden die Django-Bibliotheken in die eben erstellte Virtualenvumgebung installiert.
Dann werden die Django-Bibliotheken in die eben erstellte Virtualenvumgebung installiert.
<pre>
<pre>
xyz-doms:~$ djangoenv/bin/easy_install django
xyz-doms:~$ source djangoenv/bin/activate
Searching for django
(djangoenv) xyz-doms:~$ pip3 install django
Reading http://pypi.python.org/simple/django/
...
Reading http://www.djangoproject.com/
Successfully installed django-2.2.12 pytz-2020.1 sqlparse-0.3.1
Best match: Django 1.3
.
.
.
Finished processing dependencies for django
</pre>
</pre>
Es wird Django 2.2 statt Django 3.0 installiert, weil wir im Moment nur Python 3.5 zur Verfügung haben, aber Python 3.6 eine Bedingung für Django 3.0 ist.
Testen, ob Django installiert ist:
Testen, ob Django installiert ist:
<pre>
<pre>
xyz-doms:~$ djangoenv/bin/python
(djangoenv) xyz-doms:~$ djangoenv/bin/python
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)  
Python 3.5.3 (default, Sep 27 2018, 17:25:39)  
[GCC 4.4.5] on linux2
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> import django
Zeile 29: Zeile 31:
</pre>
</pre>
Mit Ctrl-D kann die Konsole wieder verlassen werden.
Mit Ctrl-D kann die Konsole wieder verlassen werden.
Nun kann man die Virtualenvumgebung wieder verlassen:
(djangoenv) xyz-doms:~$ deactivate


===Django-Projekt===
===Django-Projekt===
Dann wird das Django Projekt im Bereich einer Domain abgelegt.  
Dann wird das Django Projekt im Bereich einer Domain abgelegt.  
<pre>
<pre>
xyz-doms:~$ cd ~/doms/example.com/
xyz-doms:~$ source djangoenv/bin/activate
xyz-doms:~$ /path_to_djangoenv/djangoenv/bin/django-admin.py startproject djangoprojekt
(djangoenv) xyz-doms:~$ cd ~/doms/example.com/
(djangoenv) xyz-doms:~$ django-admin.py startproject djangoprojekt
(djangoenv) xyz-doms:~$ cd djangoprojekt
</pre>
 
Jetzt soll die Datenbank initialisiert werden, die in djangoprojekt/djangoproject/settings.py definiert ist:
<pre>
(djangoenv) xyz-doms:~$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK
</pre>
</pre>
Jetzt kann man unter Verwendung des Pythons der Virtualenv testen, ob Django läuft.
Jetzt kann man unter Verwendung des Pythons der Virtualenv testen, ob Django läuft.
<pre>
<pre>
xyz00: /path_to_djangoenv/djangoenv/bin/python manage.py runserver  
(djangoenv) xyz-doms:~$ python manage.py runserver
Validating models...
Watching for file changes with StatReloader
Performing system checks...


0 errors found
System check identified no issues (0 silenced).
Django version 1.3, using settings 'mysite.settings'
Django version 2.2.12, using settings 'djangoprojekt.settings'
Development server is running at http://127.0.0.1:8000/
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Quit the server with CONTROL-C.
</pre>
</pre>
... und die ''settings.py'' an die Hostsharing-Pfade angepasst.


===Nutzung mit FastCGI===
Es muss noch die Domain in die settings.py eingetragen werden:
Zunächst richtet man den FastCGI-Skript (django.fcgi) ein und legt es im fastcgi-Verzeichnis ab und macht es ausführbar:
<pre>
(djangoenv) xyz-doms:~$ export domain=example.com
(djangoenv) xyz-doms:~$ sed -i "s/ALLOWED_HOSTS = \[\]/ALLOWED_HOSTS = ['$domain','www.$domain']/g" djangoprojekt/settings.py
</pre>
 
===Nutzung mit FastCGI und WSGI via flup===
Zunächst legt man das FastCGI-Skript (django.fcgi) an und legt es im fastcgi-ssl Verzeichnis ab und macht es ausführbar:


<pre>
<pre>
#!/path_to_djangoenv/djangoenv/bin/python
xyz-doms:~$ export djangoenv=$HOME/djangoenv
xyz-doms:~$ cd doms/example.com
xyz-doms:~$ export path_to_domain=`pwd`
xyz-doms:~$ cat > fastcgi-ssl/django.fcgi <<FINISH
#!$djangoenv/bin/python


import os, sys
import os, sys
os.chdir("/path_to_doms/doms/example.com/djangoprojekt/")
import django
from flup.server.fcgi import WSGIServer
from django.core.handlers.wsgi import WSGIHandler
 
os.chdir("$path_to_domain/djangoprojekt")
os.environ['DJANGO_SETTINGS_MODULE']= "djangoprojekt.settings"
os.environ['DJANGO_SETTINGS_MODULE']= "djangoprojekt.settings"
sys.path.insert(0, "/path_to_doms/doms/example.com/djangoprojekt/")
sys.path.insert(0, "$path_to_domain/djangoprojekt")
from django.core.servers.fastcgi import runfastcgi
sys.path.insert(0, "$path_to_domain/djangoprojekt/djangoprojekt")
runfastcgi(method="threaded", daemonize="false")
 
django.setup(set_prefix=False)
WSGIServer(WSGIHandler()).run()
FINISH
 
xyz-doms:~$ chmod a+x fastcgi-ssl/django.fcgi
</pre>
</pre>


Das Djangoprojekt sollte jetzt unter example.com/fastcgi-bin/django.fcgi erreichbar sein.
Außerdem muss flup installiert werden:
 
<pre>
===Nutzung mit WSGI via flup===
xyz-doms:~$ source djangoenv/bin/activate
Zunächst legt man das FastCGI-Skript (django.fcgi) an und legt es im fastcgi-Verzeichnis ab und macht es ausführbar:
(djangoenv) xyz-doms:~$ pip3 install flup
</pre>


Um die voreingestellte leere Seite von Django zu sehen, muss noch die nicht existierende admin App auskommentiert werden:
<pre>
<pre>
#!/path_to_djangoenv/djangoenv/bin/python
xyz-doms:~$ cd doms/example.com/djangoprojekt
xyz-doms:~$ sed -i "s~path('admin/'~#path('admin/'~g" djangoprojekt/urls.py
</pre>


import os, sys
Das Djangoprojekt sollte jetzt unter https://example.com/fastcgi-bin/django.fcgi erreichbar sein.
os.chdir("/path_to_doms/doms/example.com/django")
os.environ['DJANGO_SETTINGS_MODULE']= "djangoprojekt.settings"
sys.path.insert(0, "/path_to_doms/doms/example.com/django")
sys.path.insert(0, "/path_to_doms/doms/example.com/django/djangoprojekt")


from flup.server.fcgi import WSGIServer
Tipp: Manchmal werden Änderungen in den Quellen, insbesondere der settings.py nicht übernommen. Dann hilft es den Zeitstempel der Datei django.fcgi mit touch zu aktualisieren:
from django.core.handlers.wsgi import WSGIHandler
<pre>
WSGIServer(WSGIHandler()).run()
xyz-doms:~$ touch doms/example.com/fastcgi-ssl/django.fcgi
</pre>
</pre>


Das Djangoprojekt sollte jetzt unter example.com/fastcgi-bin/django.fcgi erreichbar sein.
Alternativ kann der Prozess gestoppt werden:
Tipp: Manchmal werden Änderungen in den Quellen, insbesondere der settings.py nicht übernommen. Dann hilft es den Zeitstempel der Datei django.fcgi mit touch zu aktualisieren.
<pre>
xyz-doms:~$ ps xaf | grep django.fcgi
8091 pts/1    S+    0:00  |                      \_ grep django.fcgi
7195 ?        Sl    0:01  |  \_ /.../djangoenv/bin/python django.fcgi
xyz-doms:~$ kill 7195
</pre>


===Apache Weiterleitung===
===Apache Weiterleitung===
Zeile 89: Zeile 146:


<pre>
<pre>
xyz-doms:~$ cd doms/example.com
xyz-doms:~$ cat > .htaccess <<FINISH
RewriteEngine On
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /fastcgi-bin/django.fcgi/$1 [QSA,L]
RewriteRule ^(.*)$ /fastcgi-bin/django.fcgi/$1 [QSA,L]
</pre>  
FINISH
</pre>


Nun sollte die Seite unter (www.)example.com erreichbar sein.
Nun sollte die Seite unter (www.)example.com erreichbar sein.

Version vom 20. Mai 2020, 04:10 Uhr

Installation Djangobibliothek

Die Djangobibliotheken werden in einer Virtualenv-Umgebung installiert. Voraussetzung ist ein auf dem System installiertes python mit einem virtualenv-Paket

Zunächst wird die Virtualenvumgebung erstellt:

xyz00-doms:~$ virtualenv -p /usr/bin/python3 djangoenv
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in djangoenv/bin/python3
Also creating executable in djangoenv/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.

Dann werden die Django-Bibliotheken in die eben erstellte Virtualenvumgebung installiert.

xyz-doms:~$ source djangoenv/bin/activate
(djangoenv) xyz-doms:~$ pip3 install django
 ...
 Successfully installed django-2.2.12 pytz-2020.1 sqlparse-0.3.1

Es wird Django 2.2 statt Django 3.0 installiert, weil wir im Moment nur Python 3.5 zur Verfügung haben, aber Python 3.6 eine Bedingung für Django 3.0 ist.

Testen, ob Django installiert ist:

(djangoenv) xyz-doms:~$ djangoenv/bin/python
Python 3.5.3 (default, Sep 27 2018, 17:25:39) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> 

Mit Ctrl-D kann die Konsole wieder verlassen werden.

Nun kann man die Virtualenvumgebung wieder verlassen:

(djangoenv) xyz-doms:~$ deactivate

Django-Projekt

Dann wird das Django Projekt im Bereich einer Domain abgelegt.

xyz-doms:~$ source djangoenv/bin/activate
(djangoenv) xyz-doms:~$ cd ~/doms/example.com/
(djangoenv) xyz-doms:~$ django-admin.py startproject djangoprojekt
(djangoenv) xyz-doms:~$ cd djangoprojekt

Jetzt soll die Datenbank initialisiert werden, die in djangoprojekt/djangoproject/settings.py definiert ist:

(djangoenv) xyz-doms:~$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK

Jetzt kann man unter Verwendung des Pythons der Virtualenv testen, ob Django läuft.

(djangoenv) xyz-doms:~$ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
Django version 2.2.12, using settings 'djangoprojekt.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Es muss noch die Domain in die settings.py eingetragen werden:

(djangoenv) xyz-doms:~$ export domain=example.com
(djangoenv) xyz-doms:~$ sed -i "s/ALLOWED_HOSTS = \[\]/ALLOWED_HOSTS = ['$domain','www.$domain']/g" djangoprojekt/settings.py 

Nutzung mit FastCGI und WSGI via flup

Zunächst legt man das FastCGI-Skript (django.fcgi) an und legt es im fastcgi-ssl Verzeichnis ab und macht es ausführbar:

xyz-doms:~$ export djangoenv=$HOME/djangoenv
xyz-doms:~$ cd doms/example.com
xyz-doms:~$ export path_to_domain=`pwd`
xyz-doms:~$ cat > fastcgi-ssl/django.fcgi <<FINISH
#!$djangoenv/bin/python

import os, sys
import django
from flup.server.fcgi import WSGIServer
from django.core.handlers.wsgi import WSGIHandler

os.chdir("$path_to_domain/djangoprojekt")
os.environ['DJANGO_SETTINGS_MODULE']= "djangoprojekt.settings"
sys.path.insert(0, "$path_to_domain/djangoprojekt")
sys.path.insert(0, "$path_to_domain/djangoprojekt/djangoprojekt")

django.setup(set_prefix=False)
WSGIServer(WSGIHandler()).run()
FINISH

xyz-doms:~$ chmod a+x fastcgi-ssl/django.fcgi

Außerdem muss flup installiert werden:

xyz-doms:~$ source djangoenv/bin/activate
(djangoenv) xyz-doms:~$ pip3 install flup

Um die voreingestellte leere Seite von Django zu sehen, muss noch die nicht existierende admin App auskommentiert werden:

xyz-doms:~$ cd doms/example.com/djangoprojekt
xyz-doms:~$ sed -i "s~path('admin/'~#path('admin/'~g" djangoprojekt/urls.py

Das Djangoprojekt sollte jetzt unter https://example.com/fastcgi-bin/django.fcgi erreichbar sein.

Tipp: Manchmal werden Änderungen in den Quellen, insbesondere der settings.py nicht übernommen. Dann hilft es den Zeitstempel der Datei django.fcgi mit touch zu aktualisieren:

xyz-doms:~$ touch doms/example.com/fastcgi-ssl/django.fcgi

Alternativ kann der Prozess gestoppt werden:

xyz-doms:~$ ps xaf | grep django.fcgi
 8091 pts/1    S+     0:00  |                       \_ grep django.fcgi
 7195 ?        Sl     0:01  |   \_ /.../djangoenv/bin/python django.fcgi
xyz-doms:~$ kill 7195

Apache Weiterleitung

Nun wird das Djangoprojekt unter www.example.com verfügbar gemacht. Hierfür wird eine .htaccess im entsprechenden Domainverzeichnis angelegt:

xyz-doms:~$ cd doms/example.com
xyz-doms:~$ cat > .htaccess <<FINISH
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /fastcgi-bin/django.fcgi/$1 [QSA,L]
FINISH

Nun sollte die Seite unter (www.)example.com erreichbar sein.