Um ein Django Projekt über das Internet zu veröffentlichen gibt es mehrere Möglichkeiten.In diesem Beitrag wird die Installation und Konfiguration mit Apache2, mod_wsgi und virtualenv besprochen.
Alle hier dargestellten Schritte wurde auf einem lokalen Ubuntu 13.10 System durchgeführt.
Grundsätzlich sollten diese Schritte aber auch auf andere Linux-Distributionen anwendbar sein.
Die Grundkonfiguration von Apache und Python allgemein wird als bekannt vorausgesetzt.
apt-get install apache2 apache2-mpm-prefork apache2-utils libexpat1 apt-get install libapache2-mod-wsgi apt-get install python-pip python-dev build-essential apt-get install python-mysqldb apt-get install python-imaging
Um eine abgeschlossene, eigene Python Umgebung verwenden zu können installieren wir als nächstes virtualenv und virtualenvwrapper
pip install virtualenv pip install virtualenvwrapper
Jetzt richten wir virtualenv und virtualenvwrapper ein:
– Zuerst wird ein Verzeichnis für alle unsere Environments eingerichtet und im Profile abgelegt
sudo joe ~/.bash_profile export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh source ~/.bash_profile
– jetzt wechseln wir in das Verzeichnis .virtualenvs und erstellen unser erstes Environment:
mkvirtualenv django --no-site-packages
– das no-site-packages bewirkt das wir eine ganz minimale, saubere Umgebung mit Python und Pip haben
– unser Environment heisst django und es wurde auch ein entsprechendes Verzeichnis angelegt
– um mit dem Environment zu arbeiten und es zu aktivieren nutzen wir folgenden Befehl:
workon django
– jetzt verändert sich die Kommandozeile und am Anfang steht der Name des Environments in Klammern (django)
– nun installieren wir innerhalb dieser Umgebung weitere wichtige Packages für django und die Python Entwicklung
pip install djangopip install south pip install simplejson pip install reportlab pip install pep8 pip install pytest pip install mock pip install untangle pip install pillow pip install psycopg2
– wenn wir die abhängigen, installierten Pakete für eine spätere erneute Installation sichern möchten:
pip freeze > requirements.txt
Apache konfigurieren und mit mod_wsgi auf eine Django App zugreifen
– zuerst die grundlegenden Pakete installieren
apt-get install apache2 apache2-mpm-prefork apache2-utils libexpat1 apt-get install libapache2-mod-wsgi service apache2 restart
joe /etc/apache2/sites-available/djangotest.local.conf
<VirtualHost *:80> ServerAdmin webmaster@web-turbine.de ServerName djangotest.local ServerAlias www.djangotest.local WSGIScriptAlias / /var/www/djangotest.local/index.wsgi Alias /static/ /var/www/djangotest.local/static/ <Location "/static/"> Options -Indexes </Location> </VirtualHost>
joe /var/www/djangotest.local/index.wsgi
import os import sys import site # Add the site-packages of the chosen virtualenv to work with site.addsitedir('/home/seckermann/.virtualenvs/django/local/lib/python2.7/site-packages') # Add the app's directory to the PYTHONPATH sys.path.append('/home/seckermann/Dokumente/projekte/python/django/djangotest') sys.path.append('/home/seckermann/Dokumente/projekte/python/django/djangotest/djangotest') os.environ['DJANGO_SETTINGS_MODULE'] = 'djangotest.settings' # Activate your virtual env activate_env=os.path.expanduser("/home/seckermann/.virtualenvs/django/bin/activate_this.py") execfile(activate_env, dict(__file__=activate_env)) import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
– jetzt den Apache neustarten
service apache2 restart
– jetzt erzeugen wir unser Django-Projekt in unserem gewünschten Projektordner
(im Beispiel ~/Dokumente/projekte/python/django)
django-admin.py startproject djangotest
Statische Dateien veröffentlichen
– jetzt wechseln wir in das Projektverzeichnis und konfigurieren die Ablage der statischen Dateien ( settings.py )
STATIC_URL = '/static/' STATIC_ROOT = '/var/www/djangotest.local/static'
– nun führen wir folgendes Kommando aus welches unsere statischen Dateien in die Apache-Umgebung kopiert
python manage.py collectstatic
– und nochmal den Apache neu starten
service apache2 restart