Django Projekt mit Apache, mod_wsgi und virtualenv veröffentlichen

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

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


fünf − = 2

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>