Deploying Askbot¶
Deploying askbot (assuming that it is already installed) entails:
collecting static media files
setting correct file access permissions
configuring the webserver to work with your application
This document currently explains the configuration under Apache and mod_wsgi.
Collecting static media files¶
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.
Setting up file access permissions¶
Webserver process must be able to write to the following locations within your project:
log/
askbot/upfiles
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.
Installation under Apache/mod_wsgi¶
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
Configure webserver¶
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 you@example.com
DocumentRoot /path/to/django-project
ServerName example.come
#aliases to serve static media directly
#will probably need adjustment
Alias /m/ /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 you@example.com
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/lib/python3.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>