diff README.txt @ 221:2de8715f0d59

Better names and location for README.rst and COPYING.
author Daniele Nicolodi <daniele@grinta.net>
date Mon, 21 Nov 2011 16:15:28 +0100
parents README.rst@2a9af8163c46
children bec775b8c364
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.txt	Mon Nov 21 16:15:28 2011 +0100
@@ -0,0 +1,200 @@
+INSTALL
+=======
+
+This package uses buildout for development and deployment. The use of
+buildout allows for the creation of a self contained environment
+containing application code and most of the required dependencies.
+
+
+Prerequisites
+-------------
+
+1. Running MySQL server version >= 5.0
+2. Python version >= 2.6
+3. MySQLdb Python package
+
+To install this application you need a recent python interpreter:
+development and testing have been performed with Python 2.6, but
+Python 2.7 should work as well.  MySQL and the Python MySQL connector
+are not installed as part of the buildout recipe because it is much
+easier to do so with the help of the OS package management software.
+
+On a Debian or Debian like GNU-Linux installation you can easily
+install all the required packages as follows::
+
+   # apt-get install mysql-server python2.6 python2.6-mysqldb
+
+
+Install
+-------
+
+The buildout recipe takes care of installing all the other required
+component. For that you need to have an Internet connection, if you
+access the Web through a proxy server remember to set it correctly for
+you shell.  For a bash shell::
+
+   # export http_proxy=http://proxy.example.net:3128/
+   # export https_proxy=http://proxy.example.net:3128/
+
+First download the buildout software itself::
+
+   # python2.6 bootstrap.py --distribute
+
+Then run the buildout recipe::
+
+   # ./bin/buildout
+
+
+Setup
+-----
+
+The application needs to be configured. Copy the example configuration
+file to the expected configuration file location::
+
+   # cp etc/ltpdarepo.ex etc/ltpdarepo
+
+Then edit this file and enter the required information::
+
+   # edit etc/ltpdarepo
+
+Chose a database name at will: this database will be created during
+the application initialization. The user used in the connection should
+be an user with administrative capabilities on the MySQL database,
+ordinarily the `root` user [1].
+
+Remember to set an unique encryption key for the SECRET_KEY parameter.
+This key is used in the application for generating cryptographic
+hashes and the security of your application depends on selecting an
+unique and unpredicible value for this key. A good way to obtain a
+random string on an Unix machine is to execute::
+
+   # dd bs=1024 count=16 if=/dev/random 2>/dev/null | md5
+
+Note that in the default configuration notification emails are not
+sent. To enable notification emails set the TESTING parameter to False.
+
+To initialize the database use the LTPDA Repository administration
+command line tool::
+
+   # ./bin/admin install
+
+Then create an administrator user to use in the first connection
+through the Web interface::
+
+   # ./bin/admin useradd <username> --admin true
+   # ./bin/admin passwd <username> <password>
+
+Help on the usage of the command line tool can be obtained with::
+
+   # ./bin/admin help
+
+For development and evaluation you can run the Web application in
+standalone mode using the an embedded HTTP server. Execute::
+
+   # ./bin/run
+
+and connect to it at the address http://localhost:5000/
+
+
+[1] It is also possible to run the application with an user having
+reduced privileges. An user with the the minimum set of privileges
+required for running the application may be obtained with the
+following SQL commands::
+
+    CREATE USER <username>@'localhost' IDENTIFIED BY <password>;
+
+    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, CREATE VIEW,
+    CREATE USER ON *.* TO <username>@'localhost' WITH GRANT OPTION;
+
+    GRANT EXECUTE, CREATE TEMPORARY TABLES
+    ON <database>.* TO <username>@'localhost';
+
+However, due to MySQL server limitations, this minimum set of
+privileges allows the user to grant himself additional privileges, and
+more generally to modify MySQL administrative tables.  Therefore, this
+is not an effective protection from security issues.
+
+The initialization of the database and the upgrade procedure require
+additional privileges than the ones listed above. Therefore, the
+command line administration tool `install` and `upgrade` commands
+allow to connect to the database with a different user than the one
+specified in the configuration file, via the `--user` and `--password`
+parameters. Example::
+
+    # ./bin/admin install --user root --password <password>
+
+An user with the username and password specified in the configuration
+file, and with the minimum set of privileges required for running the
+application, may be created during the database initialization
+procedure with the `--create-user` option of the `install` command::
+
+    # ./bin/admin install --create-user --user root --password <password>
+
+
+Upgrade
+-------
+
+Upgrading from old versions of the application may require chenges to
+the databases schema. To permorm the upgrade install and configure the
+application and then run the upgrade procedure:: 
+
+   # ./bin/admin upgrade
+
+If the application is configured to run with an user with limited
+privileges, as detailed in the previous section, it is necessary to
+use the `--user` and `--password` parameters of the `upgrade` commnand
+to connect to the database with a user having administration
+capabilities::
+
+    # ./bin/admin upgrade --user root --password <password>
+
+Upgrading from the PHP base Web interface is also possible. For doing
+that install and configure the application to connect to the old
+administrative database (the default administrative database name for
+the PHP application is `ltpda_admin`) and run the upgrade procedure.
+It is recommended to backup the database content before attempting the
+upgrade.
+
+
+Deployment
+----------
+
+For the deployment to a production server you do not want to use the
+embedded HTTP server. You can use any WSGI capable web server. The
+easiest solution it is probably to use Apache `mod_wsgi`.
+
+First enable the `mod_wsgi` Apache module::
+
+   # a2enmod wsgi
+
+A WSGI script is generated during the application install procedure.
+To have Apache load it, copy this configuration snippet into your
+Apache server configuration::
+
+   WSGIScriptAlias /ltpdarepo /srv/ltpdarepo/bin/wsgi
+   WSGIDaemonProcess ltpdarepo
+
+   <Directory /srv/ltpdarepo/>
+       WSGIProcessGroup ltpdarepo
+       WSGIApplicationGroup %{GLOBAL}
+       Order deny,allow
+       Allow from all
+   </Directory>
+
+   Alias /ltpdarepo/static/foo/ /srv/ltpdarepo/src/ltpdarepo/static/
+
+   <Directory /srv/ltpdarepo/src/ltpdarepo/static/>    
+       AllowOverride None
+       Order deny,allow
+       Allow from all
+   </Directory>
+
+In this example the application was installed in the `/srv/ltpdarepo/`
+directory and has been configureted to be reached at the `/ltpdarepo`
+path of the webserver. Modify the configuration to adjust for your
+installation folder and for the path where the application should be
+reached.
+
+Then restart the Apache server::
+
+   # apache2ctl restart