To use Luminotes, please see the included README file instead of this INSTALL
file. This file contains details about installing the Luminotes server, which
you shouldn't need if you only want to make a wiki.

First, install the prerequisites:

 * Python 2.4
 * CherryPy 2.2
 * PostgreSQL 8.1
 * psycopg 2.0
 * simplejson 1.3
 * pytz 2006p
 * Python Imaging Library 1.1
 * Python Universal Encoding Detector 1.0

In Debian GNU/Linux, you can issue the following command to install these
packages:

  apt-get install python2.4 python-cherrypy postgresql-8.1 \
          postgresql-contrib-8.1 python-psycopg2 python-simplejson \
          python-tz python-imaging python-chardet


database setup
--------------

Configure PostgreSQL's pg_hba.conf (usually found under /etc/postgresql/) to
require passwords for local connections:

  local all all md5

Restart postgresql so these changes take effect:

  /etc/init.d/postgresql restart

As the PostgreSQL superuser (usually "postgres"), create a new database user
and set a new password, for instance, "mypassword".

  createuser -S -d -R -P -E luminotes
  createdb -E UTF8 luminotes
  echo "alter database luminotes owner to luminotes;" | psql luminotes

Also as the PostgreSQL superuser, setup full-text searching. The path to the
tsearch2.sql file may be different depending on your Linux distribution or
PostgreSQL version:

  psql luminotes < /usr/share/postgresql/8.1/contrib/tsearch2.sql
  echo "grant all on pg_ts_cfg to luminotes;" | psql luminotes
  echo "grant all on pg_ts_cfgmap to luminotes;" | psql luminotes
  echo "grant all on pg_ts_dict to luminotes;" | psql luminotes
  echo "grant all on pg_ts_parser to luminotes;" | psql luminotes
  echo "update pg_ts_cfg set locale = 'en_US.UTF-8' where ts_name = 'default';" | psql luminotes

Note that you can use a different UTF-8 locale if you prefer. For instance, in
the command above, you can use 'en_GB.UTF-8' instead of 'en_US.UTF-8'.

Initialize the database with the starting schema and default data:

  export PYTHONPATH=.
  export PGPASSWORD=mypassword
  python2.4 tools/initdb.py


development mode
----------------

Running the Luminotes server in development mode is convenient for testing out
changes, because it uses CherryPy's built-in web server with auto-reload
enabled, so the server will automatically reload any modified source files as
soon as they're modified.

To start the server in development mode, run:

  python2.4 luminotes.py -d

Connect to the following URL in a web browser running on the same machine:

  http://localhost:8081/


production mode
---------------

Production mode is intended for a live production web site, so you can skip
this section entirely if you don't care about running such a site. Production
mode doesn't support auto-reload, and logging goes to file (luminotes.log)
instead of the console, but performance should be better than in development
mode.

First you'll need to configure your web server to forward requests for
non-static pages to CherryPy. These instructions are for Apache, but in
theory, Luminotes should work with just about any web server.

In your Apache configuration file, enable mod_rewrite and mod_proxy, then add
the following rewrite rules to the settings for your VirtualHost:

  RewriteEngine on
  RewriteRule ^/favicon.ico /path/to/luminotes/static/images/favicon.ico [L]
  RewriteRule ^/robots.txt /path/to/luminotes/static/html/robots.txt [L]
  RewriteRule ^/static/(.*) /path/to/luminotes/static/$1 [L]
  RewriteRule ^(.*) http://127.0.0.1:8081$1 [P]

You should change the paths in the rules above to point to wherever Luminotes
happens to be installed. These rules cause Apache to serve static files
itself, while passing through requests for dynamic pages to the CherryPy web
server running locally.

Optionally, you can also enable Apache's mod_expires module and include the
following configuration along with the above rules:

  ExpiresActive On
  ExpiresDefault "A600"

This will tell clients not to request static pages more frequently than every
ten minutes (unless the user forces a reload).

If you want to use SSL, procure and install an SSL cert for use with Apache.
Add the above mod_rewrite rules to the settings for your SSL-enabled
VirtualHost, but change the IP in the last rule from 127.0.0.1 to 127.0.0.2.
This hack allows the Luminotes server to distinguish between SSL and non-SSL
requests by looking at the proxy IP. Without this, Luminotes would have no way
of knowing whether a particular request was encrypted when received by Apache.
(There are ways to do this in a less hacky manner with Apache 2, but not
Apache 1.)

To configure the Luminotes server for SSL support, edit config/Common.py and
change the values of luminotes.http_url and luminotes.https_url based on the
domain you're using. For instance:

  "luminotes.http_url": "http://luminotes.com",
  "luminotes.https_url": "https://luminotes.com",

Then to actually start the production mode server, run:

  python2.4 luminotes.py

You should be able to connect to the site at whatever domain you've configured
Apache to serve.

Optionally, you can copy tools/luminotes_debian_initscript to
/etc/init.d/luminotes and use the following command to start the Luminotes
server instead:

  /etc/init.d/luminotes start


sending email
-------------

If you would like Luminotes to be able to send password reset emails, then
you'll need a mail server running on the same machine that is capabable of
receiving local SMTP connections and sending email. Either way, please set
the luminotes.support_email address in config/Common.py to the email address
you'd like in the From field of all outgoing emails. This email address also
shows up in various error messages and other places for a support contact
address.


user rate plans
---------------

By default, all Luminotes users start at rate plan 0. This corresponds to the
Luminotes "free" account level described at http://luminotes.com/pricing

If you'd like to change the details of any of the rate plans, edit
config/Common.py and change the first listed plan under luminotes.rate_plans.
For instance, if you'd like users at rate plan 0 to be allowed to invite other
users to edit their notebooks, change the "notebook_collaboration" value to
"True". If you like, you can also increase the amount of storage they're
allowed.


memcached
---------

For improved performance, it is recommended that you install and use memcached
for production servers.

First, install the prerequisites:

 * python-dev 2.4
 * libmemcache-dev 1.4
 * memcached 1.4
 * cmemcache 0.91

In Debian GNU/Linux, you can issue the following command to install these
packages:

  apt-get install python2.4-dev libmemcache-dev memcached

The cmemcache package is not currently included with Debian Etch, so you'll
have to build and install it manually. Download and untar the package from:

  http://gijsbert.org/cmemcache/

From the untarred cmemcache directory, issue the following command as root:

  python2.4 setup.py install

This should build and install the cmemcache module. Once installed, Luminotes
will use the module automatically. When Luminotes starts up, you should see a
"using memcached" message.


Python unit tests
-----------------

If you're interested in running unit tests of the server, install:

 * nose 0.9.0
 * pysqlite 2.3

In Debian GNU/Linux, you can issue the following command to install this
package:

  apt-get install python-nose python-pysqlite2

Then you can run unit tests by running:

  nosetests
