Aby zainstalować własny pakiet Django, najpierw musimy najpierw skonfigurować własne wirtualne środowisko pythona (instrukcja dostępna w tym FAQ).
Aktywujemy środowisko wirtualne python:
bash-3.2$ . $HOME/python26/bin/activate
(python26)-bash-3.2$
Instalujemy pakiety Django i flup:
(python26)-bash-3.2$ easy_install Django
Searching for Django
Reading http://pypi.python.org/simple/Django/
Reading http://www.djangoproject.com/
Best match: Django 1.3.1
...
(python26)-bash-3.2$ easy_install flup
Searching for flup
Reading http://pypi.python.org/simple/flup/
Reading http://www.saddi.com/software/flup/
Best match: flup 1.0.3.dev-20110405
...
Uruchamiamy nowy projekt django za pomocą django-admin.py (przykładowa nazwa: "nowyprojekt"):
(python26)-bash-3.2$ django-admin.py startproject nowyprojekt
nowy projekt został utworzony w naszym katalogu domowym, na tym przykładzie w
/www/virtual/t/testitl/nowyprojekt
Następnie w katalogu /htdocs tworzymy plik dispatchera FCGI, o nazwie "django.fcgi":
#!/www/virtual/t/testitl/python26/bin/python26
import sys, os
sys.path.append("/www/virtual/t/testitl")
os.environ['DJANGO_SETTINGS_MODULE'] = "nowyprojekt.settings"
from django.core.servers.fastcgi import runfastcgi
runfastcgi(["method=threaded", "maxspare=1", "maxchildren=1", "daemonize=false"])
i nadajemy mu prawa wykonywania:
(python26)-bash-3.2$ chmod 755 django.fcgi
Tworzymy w tym samym katalogu plik .htaccess o zawartości:
AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /django.fcgi/$1 [QSA,L]
Aby powyższe ustawienia mod_rewrite zadziałały, w panelu administracyjnym w sekcji "Serwisy WWW" musimy aktywować mod_rewrite na danym serwisie oraz włączyć "AllowOverride All". Rekonfiguracja serwera może potrwać jakiś czas.
Od tej chwili nasza instalacja django powinna się uruchamiać. Teraz można już przystąpić do jej konfiguracji i budowania aplikacji.
Optymalizacja:
Po zaaplikowaniu na django patcha dołączonego do tego artykułu, możemy uruchamiać django w bardziej optymalny sposób, aby nie tworzył zbędnych wątków.
Aby zaaplikować patch:
$ cd /www/virtual/t/testitl/python26/
$ find . -path .*/django/core/servers/fastcgi.py
./lib/python2.6/site-packages/Django-1.4-py2.6.egg/django/core/servers/fastcgi.py
$ cd ./lib/python2.6/site-packages/Django-1.4-py2.6.egg
$ patch -p0 < ~/django.fastcgi.patch
patching file django/core/servers/fastcgi.py
i zmieniamy wywołanie w pliku dispatchera (django.fcgi) na:
runfastcgi(["method=single", "daemonize=false"])