Deploying askbot (assuming that it is already installed) entails:
This document currently explains the configuration under Apache and mod_wsgi.
Static media must be collected into a single location with a command:
python manage.py collectstatic
There are several options on where to put the static files - the simplest is a local directory, but it is also possible to use a dedicated static files storage or a CDN, for more information see django documentation about serving static files.
Webserver process must be able to write to the following locations within your project:
If you know user name or the group name under which the webserver runs, you can make those directories writable by setting the permissons accordingly:
For example, if you are using Linux installation of apache webserver running under group name ‘apache’ you could do the following:
cd /path/to/django-project cd .. #go one level up chown -R yourlogin:apache django-project chmod -R g+w django-project/askbot/upfiles chmod -R g+w django-project/log
If your account somehow limits you from running such commands - please consult your system administrator.
Apache/mod_wsgi combination is the only type of deployment described in this document at the moment. mod_wsgi is currently the most resource efficient apache handler for the Python web applications.
The main wsgi script is in the file django.wsgi it does not need to be modified
Settings below are not perfect but may be a good starting point:
#NOTE: the directory paths used here may be adjusted #the following two directories must be both readable and writable by apache WSGISocketPrefix /path/to/socket/sock WSGIPythonEggs /var/python/eggs #the following directory must be readable by apache WSGIPythonHome /usr/local #NOTE: all urs below will need to be adjusted if #settings.FORUM_SCRIPT_ALIAS is anything other than empty string (e.g. = 'forum/') #this allows "rooting" forum at http://example.com/forum, if you like #replace with 127.0.0.1 with real IP address <VirtualHost 127.0.0.1:80> ServerAdmin email@example.com DocumentRoot /path/to/django-project ServerName example.come #aliases to serve static media directly #will probably need adjustment Alias /static/ /path/to/django-project/static/ Alias /upfiles/ /path/to/django-project/askbot/upfiles/ <DirectoryMatch "/path/to/django-project/askbot/skins/([^/]+)/media"> Order deny,allow Allow from all </DirectoryMatch> <Directory "/path/to/django-project/askbot/upfiles"> Order deny,allow Allow from all </Directory> #must be a distinct name within your apache configuration WSGIDaemonProcess askbot2 WSGIProcessGroup askbot2 WSGIScriptAlias / /path/to/django-project/django.wsgi #make all admin stuff except media go through secure connection <LocationMatch "/admin(?!/media)"> RewriteEngine on RewriteRule /admin(.*)$ https://example.com/admin$1 [L,R=301] </LocationMatch> CustomLog /var/log/httpd/askbot/access_log common ErrorLog /var/log/httpd/askbot/error_log LogLevel debug </VirtualHost> #again, replace the IP address <VirtualHost 127.0.0.1:443> ServerAdmin firstname.lastname@example.org DocumentRoot /path/to/django-project ServerName example.com <LocationMatch "^(?!/admin)"> RewriteEngine on RewriteRule django.wsgi(.*)$ http://example.com$1 [L,R=301] </LocationMatch> SSLEngine on #your SSL keys SSLCertificateFile /etc/httpd/ssl.crt/server.crt SSLCertificateKeyFile /etc/httpd/ssl.key/server.key Alias /admin/media/ /usr/local/lib/python2.6/site-packages/django/contrib/admin/media/ WSGIScriptAlias / /path/to/django-project/django.wsgi CustomLog /var/log/httpd/askbot/access_log common ErrorLog /var/log/httpd/askbot/error_log </VirtualHost>