Django installieren
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.
xyz00-doms:~$ source djangoenv/bin/activate (djangoenv) xyz00-doms:~$ pip3 install django ... Successfully installed asgiref-3.3.4 django-3.2 pytz-2021.1 sqlparse-0.4.1 typing-extensions-3.7.4.3
Testen, ob Django installiert ist:
(djangoenv) xyz00-doms:~$ djangoenv/bin/python Python 3.7.3 (default, Jan 22 2021, 20:04:44) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import django >>> django.VERSION (3, 2, 0, 'final', 0) >>>
Mit Ctrl-D kann die Konsole wieder verlassen werden.
Alternativ kann die aktuell installierte Version von Django so angezeigt werden:
(djangoenv) xyz00-doms:~$ python -m django --version 3.2
Nun kann man die Virtualenvumgebung wieder verlassen:
(djangoenv) xyz00-doms:~$ deactivate
Django-Projekt
Dann wird das Django Projekt im Bereich einer Domain abgelegt.
xyz00-doms:~$ source djangoenv/bin/activate (djangoenv) xyz00-doms:~$ cd ~/doms/example.com/ (djangoenv) xyz00-doms:~$ django-admin.py startproject djangoprojekt (djangoenv) xyz00-doms:~$ cd djangoprojekt
Jetzt soll die Datenbank initialisiert werden, die in djangoprojekt/djangoproject/settings.py definiert ist:
(djangoenv) xyz00-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) xyz00-doms:~$ python manage.py runserver Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). Django version 3.2, 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) xyz00-doms:~$ export domain=example.com (djangoenv) xyz00-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:
xyz00-doms:~$ export djangoenv=$HOME/djangoenv xyz00-doms:~$ cd doms/example.com xyz00-doms:~$ export path_to_domain=`pwd` xyz00-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 xyz00-doms:~$ chmod a+x fastcgi-ssl/django.fcgi
Außerdem muss flup installiert werden:
xyz00-doms:~$ source djangoenv/bin/activate (djangoenv) xyz00-doms:~$ pip3 install flup
Um die voreingestellte leere Seite von Django zu sehen, muss noch die nicht existierende admin App auskommentiert werden:
xyz00-doms:~$ cd doms/example.com/djangoprojekt xyz00-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:
xyz00-doms:~$ touch doms/example.com/fastcgi-ssl/django.fcgi
Alternativ kann der Prozess gestoppt werden:
xyz00-doms:~$ ps xaf | grep django.fcgi 8091 pts/1 S+ 0:00 | \_ grep django.fcgi 7195 ? Sl 0:01 | \_ /.../djangoenv/bin/python django.fcgi xyz00-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:
xyz00-doms:~$ cd doms/example.com xyz00-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.