summaryrefslogtreecommitdiffstats
path: root/INSTALL
blob: 72cc76bf865865acbfde9b85d7e8e91f4b32331d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
CONTENTS
------------------
A. PREREQUISITES
B. INSTALLATION
   1. Settings file
   2. Database
   3. Running CNPROG in the development server
   4. Installation under Apache/WSGI
   5. Full text search
   6. Email subscriptions
   7. Sitemap
   8. Miscellaneous
C. CONFIGURATION PARAMETERS (settings_local.py)
D. CUSTOMIZATION


A. PREREQUISITES
-----------------------------------------------
0. We recommend you to use python-setuptools to install pre-requirement libraries.
If you haven't installed it, please try to install it first.
e.g, sudo apt-get install python-setuptools

1. Python2.5/2.6, MySQL, Django v1.0/1.1
Note: email subscription sender job requires Django 1.1, everything else works with 1.0
Make sure mysql for python provider has been installed.
sudo easy_install mysql-python

2. Python-openid v2.2
http://openidenabled.com/python-openid/
sudo easy_install python-openid

4. html5lib
http://code.google.com/p/html5lib/
Used for HTML sanitizer
sudo easy_install html5lib

5. Markdown2
http://code.google.com/p/python-markdown2/
sudo easy_install markdown2

6. Django Debug Toolbar
http://github.com/robhudson/django-debug-toolbar/tree/master

7. djangosphinx (optional - for full text questions+answer+tag)
http://github.com/dcramer/django-sphinx/tree/master/djangosphinx

8. sphinx search engine (optional, works together with djangosphinx)
http://sphinxsearch.com/downloads.html

9. recaptcha_django
http://code.google.com/p/recaptcha-django/

10. python recaptcha module
http://code.google.com/p/recaptcha/
Notice that you will need to register with recaptcha.net and receive
recaptcha public and private keys that need to be saved in your
settings_local.py file

NOTES: django_authopenid is included into CNPROG code 
and is significantly modified.  http://code.google.com/p/django-authopenid/
no need to install this library

B. INSTALLATION
-----------------------------------------------
0. Make sure you have all above python libraries installed.

   make cnprog installation server-readable on Linux command might be:
   chown -R yourlogin:apache /path/to/CNPROG
   
   directories templates/upfiles and log must be server writable

   on Linux type chmod
   chmod -R g+w /path/to/CNPROG/upfiles
   chmod -R g+w /path/to/log

   above it is assumed that webserver runs under group named "apache"

1. Settings file

Copy settings_local.py.dist to settings_local.py and 
update all your settings. Check settings.py and update 
it as well if necessory.
Section C explains configuration paramaters.

2. Database

Prepare your database by using the same database/account 
configuration from above.
e.g,
create database cnprog DEFAULT CHARACTER SET UTF8 COLLATE utf8_general_ci;
grant all on cnprog.* to 'cnprog'@'localhost';
And then run "python manage.py syncdb" to synchronize your database.

3. Running CNPROG on the development server 

Run "python manage.py runserver" to startup django 
development environment.
(Under Linux you can use command "python manage.py runserver `hostname -i`:8000",
where you can use any other available number for the port)

you might want to have DEBUG=True in the beginning of settings.py 
when using the test server

4. Installation under Apache/WSGI

4.1 Prepare wsgi script

Make a file readable by your webserver with the following content:

---------
import os
import sys

sys.path.insert(0,'/one/level/above') #insert to make sure that forum will be found
sys.path.append('/one/level/above/CNPROG') #maybe this is not necessary
os.environ['DJANGO_SETTINGS_MODULE'] = 'CNPROG.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
-----------

insert method is used for path because if the forum directory name 
is by accident the same as some other python module
you wull see strange errors - forum won't be found even though
it's in the python path. for example using name "test" is
not a good idea - as there is a module with such name


4.2 Configure webserver
Settings below are not perfect but may be a good starting point

---------
WSGISocketPrefix /path/to/socket/sock #must be readable and writable by apache
WSGIPythonHome /usr/local #must be readable by apache
WSGIPythonEggs /var/python/eggs #must be readable and writable by apache

#NOTE: all urs below will need to be adjusted if 
#settings.FORUM_SCRIPT_ALIAS !='' (e.g. = 'forum/')
#this allows "rooting" forum at http://example.com/forum, if you like
<VirtualHost ...your ip...:80>
    ServerAdmin forum@example.com
    DocumentRoot /path/to/cnprog
    ServerName example.com

    #run mod_wsgi process for django in daemon mode
    #this allows avoiding confused timezone settings when
    #another application runs in the same virtual host
    WSGIDaemonProcess CNPROG 
    WSGIProcessGroup CNPROG 

    #force all content to be served as static files
    #otherwise django will be crunching images through itself wasting time
    Alias /content/ /path/to/cnprog/templates/content/
    AliasMatch /([^/]*\.css) /path/to/cnprog/templates/content/style/$1
    <Directory /path/to/cnprog/templates/content>
        Order deny,allow
        Allow from all
    </Directory>

    #this is your wsgi script described in the prev section
    WSGIScriptAlias / /path/to/cnprog/cnprog.wsgi

    #this will force admin interface to work only
    #through https (optional)
    #"nimda" is the secret spelling of "admin" ;)
    <Location "/nimda">
        RewriteEngine on
        RewriteRule /nimda(.*)$ https://example.com/nimda$1 [L,R=301]
    </Location>
    CustomLog /var/log/httpd/CNPROG/access_log common
    ErrorLog /var/log/httpd/CNPROG/error_log
</VirtualHost>
#(optional) run admin interface under https
<VirtualHost ..your ip..:443>
    ServerAdmin forum@example.com
    DocumentRoot /path/to/cnrpog
    ServerName example.com
    SSLEngine on
    SSLCertificateFile /path/to/ssl-certificate/server.crt
    SSLCertificateKeyFile /path/to/ssl-certificate/server.key
    WSGIScriptAlias / /path/to/cnprogcnprog.wsgi
    CustomLog /var/log/httpd/CNPROG/access_log common
    ErrorLog /var/log/httpd/CNPROG/error_log
    DirectoryIndex index.html
</VirtualHost>
-------------

5. Full text search (using sphinx search)
   Currently full text search works only with sphinx search engine
   Sphinx at this time supports only MySQL and PostgreSQL databases
   to enable this, install sphinx search engine and djangosphinx

   configure sphinx, sample configuration can be found in
   sphinx/sphinx.conf file usually goes somewhere in /etc tree

   build cnprog index first time manually

   % indexer --config /path/to/sphinx.conf --index cnprog

   setup cron job to rebuild index periodically with command
   your crontab entry may be something like

   0 9,15,21 * * * /usr/local/bin/indexer --config /etc/sphinx/sphinx.conf --all --rotate >/dev/null 2>&1
   adjust it as necessary this one will reindex three times a day at 9am 3pm and 9pm

   if your forum grows very big ( good luck with that :) you'll
   need to two search indices one diff index and one main
   please refer to online sphinx search documentation for the information
   on the subject http://sphinxsearch.com/docs/

   in settings_local.py set
   USE_SPHINX_SEARCH=True
   adjust other settings that have SPHINX_* prefix accordingly 
   remember that there must be trailing comma in parentheses for
   SHPINX_SEARCH_INDICES tuple - particlarly with just one item!
   
   in settings.py look for INSTALLED_APPS
   and uncomment #'djangosphinx',
   

6. Email subscriptions
   
   This function at the moment requires Django 1.1

   edit paths in the file cron/send_email_alerts
   set up a cron job to call cron/send_email_alerts once or twice a day
   subscription sender may be tested manually in shell 
   by calling cron/send_email_alerts

7. Sitemap
Sitemap will be available at /<settings_local.FORUM_SCRIPT_ALIAS>sitemap.xml
e.g yoursite.com/forum/sitemap.xml

google will be pinged each time question, answer or 
comment is saved or a question deleted

for this to be useful - do register you sitemap with Google at 
https://www.google.com/webmasters/tools/

8. Miscellaneous

There are some demo scripts under sql_scripts folder, 
including badges and test accounts for CNProg.com. You 
don't need them to run your sample.

C. CONFIGURATION PARAMETERS

#the only parameter that needs to be touched in settings.py is 
DEBUG=False #set to True to enable debug mode

#all forum parameters are set in file settings_local.py

LOG_FILENAME = 'cnprog.log' #where logging messages should go
DATABASE_NAME = 'cnprog'    # Or path to database file if using sqlite3.
DATABASE_USER = ''          # Not used with sqlite3.
DATABASE_PASSWORD = ''      # Not used with sqlite3.
DATABASE_ENGINE = 'mysql'   #mysql, etc
SERVER_EMAIL = ''
DEFAULT_FROM_EMAIL = ''
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''    #not necessary if mailserver is run on local machine
EMAIL_SUBJECT_PREFIX = '[CNPROG] '
EMAIL_HOST='cnprog.com'
EMAIL_PORT='25'
EMAIL_USE_TLS=False
TIME_ZONE = 'America/Tijuana'
APP_TITLE = u'CNPROG Q&A Forum' #title of your forum
APP_KEYWORDS = u'CNPROG,forum,community' #keywords for search engines
APP_DESCRIPTION = u'Ask and answer questions.' #site description for searche engines 
APP_INTRO = u'<p>Ask and answer questions, make the world better!</p>' #slogan that goes to front page in logged out mode
APP_COPYRIGHT = '' #copyright message

#if you set FORUM_SCRIPT_ALIAS= 'forum/'
#then CNPROG will run at url http://example.com/forum
#FORUM_SCRIPT_ALIAS cannot have leading slash, otherwise it can be set to anything
FORUM_SCRIPT_ALIAS = '' #no leading slash, default = '' empty string

LANGUAGE_CODE = 'en' #forum language (see language instructions on the wiki)
EMAIL_VALIDATION = 'off' #string - on|off
MIN_USERNAME_LENGTH = 1
EMAIL_UNIQUE = False    #if True, email addresses must be unique in all accounts
APP_URL = 'http://cnprog.com' #used by email notif system and RSS
GOOGLE_SITEMAP_CODE = '' #code for google site crawler (look up google webmaster tools)
GOOGLE_ANALYTICS_KEY = '' #key to enable google analytics on this site
BOOKS_ON = False  #if True - books tab will be on
WIKI_ON = True  #if False - community wiki feature is disabled

#experimental - allow password login through external site
#must implement django_authopenid/external_login.py
#included prototype external_login works with Mediawiki
USE_EXTERNAL_LEGACY_LOGIN = True #if false CNPROG uses it's own login/password
EXTERNAL_LEGACY_LOGIN_HOST = 'login.cnprog.com'
EXTERNAL_LEGACY_LOGIN_PORT = 80
EXTERNAL_LEGACY_LOGIN_PROVIDER_NAME = '<span class="orange">CNPROG</span>'

FEEDBACK_SITE_URL = None #None or url
LOGIN_URL = '/%s%s%s' % (FORUM_SCRIPT_ALIAS,'account/','signin/')

DJANGO_VERSION = 1.1 #must be either 1.0 or 1.1
RESOURCE_REVISION=4 #increment when you update media files - clients will be forced to load new version

D. Customization

Other than settings_local.py the following will most likely need customization:
* locale/*/django.po - language files that may also contain your site-specific messages
  if you want to start with english messages file - look for words like "forum" and
  "CNPROG" in the msgstr lines
* templates/header.html and templates/footer.html may contain extra links
* templates/about.html - a place to explain for is your forum for
* templates/faq.html - put answers to users frequent questions
* templates/content/style/style.css - modify style sheet to add disctinctive look to your forum