Django installieren: Unterschied zwischen den Versionen
K (Glossar) |
Tim00 (Diskussion | Beiträge) (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. | 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 | 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/ | 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 | |||
. | |||
</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 | Python 3.5.3 (default, Sep 27 2018, 17:25:39) | ||
[GCC | [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:~$ | (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> | ||
(djangoenv) xyz-doms:~$ python manage.py runserver | |||
Watching for file changes with StatReloader | |||
Performing system checks... | |||
0 | System check identified no issues (0 silenced). | ||
Django version | 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. | Quit the server with CONTROL-C. | ||
</pre> | </pre> | ||
===Nutzung mit FastCGI=== | Es muss noch die Domain in die settings.py eingetragen werden: | ||
Zunächst | <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> | ||
#! | 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(" | 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, "/ | 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 | |||
</pre> | </pre> | ||
Außerdem muss flup installiert werden: | |||
<pre> | |||
xyz-doms:~$ source djangoenv/bin/activate | |||
(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> | ||
# | xyz-doms:~$ cd doms/example.com/djangoprojekt | ||
xyz-doms:~$ sed -i "s~path('admin/'~#path('admin/'~g" djangoprojekt/urls.py | |||
</pre> | |||
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: | |||
<pre> | |||
xyz-doms:~$ touch doms/example.com/fastcgi-ssl/django.fcgi | |||
</pre> | </pre> | ||
Alternativ kann der Prozess gestoppt werden: | |||
<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.