aboutsummaryrefslogtreecommitdiffstats
path: root/INSTALL.md
diff options
context:
space:
mode:
Diffstat (limited to 'INSTALL.md')
-rw-r--r--INSTALL.md220
1 files changed, 220 insertions, 0 deletions
diff --git a/INSTALL.md b/INSTALL.md
new file mode 100644
index 000000000..304d912b3
--- /dev/null
+++ b/INSTALL.md
@@ -0,0 +1,220 @@
+ * Email: angie@mysociety.org; WWW: http://www.mysociety.org
+ *
+ * $Id: INSTALL.txt,v 1.10 2009-10-02 13:17:59 francis Exp $
+ *
+
+
+These instructions are based on getting the FOI site up and running on
+Ubuntu and/or Debian.
+
+It was last run using the Lucid Lynx version of Ubuntu and on the
+Parallels debian instance (2.6.18-4-686).
+
+Commands are intended to be run via the terminal or over ssh.
+
+1. Package Installation
+-----------------------
+i.e. Install git (sudo apt-get install git-core),
+to get the alaveteli code from github: git clone https://github.com/sebbacon/alaveteli.git
+
+Firstly, in a terminal, navigate to the alaveteli folder where this
+install guide lives.
+
+Install the packages that are listed in config/packages using apt-get e.g.:
+
+> sudo apt-get install `cut -d " " -f 1 config/packages | grep -v "^#"`
+
+Some of the files also have a version number listed in config/packages - check
+that you have appropriate versions installed. Some also list "|" and offer
+a choice of packages.
+
+Some of the required packages only exist in the mysociety debian archive (or we
+have updated versions there), so you will want to add that to your
+/etc/apt/sources.list:
+
+ deb http://debian.mysociety.org etch main non-free contrib
+ deb-src http://debian.mysociety.org etch main non-free contrib
+
+You will also want to install mySociety's common ruby libraries and the Rails
+code. Run:
+
+ git submodule update --init
+
+to fetch the contents of the submodules.
+
+2. Configure Database
+---------------------
+
+There has been a little work done in trying to make the code work with
+other databases (e.g. SQLite), but the preferred database is PostgreSQL.
+
+If you don't have it installed:
+ apt-get install postgresql postgresql-client
+
+Now we need to set up the database config file to contain the name,
+username and password of your postgres database.
+
+* copy database.yml-example to database.yml in alaveteli/config
+* edit it to point to your local postgresql database in the development
+ and test sections and create the databases:
+
+Become the 'postgres' user (sudo su - postgres)
+
+psql template1
+ to get into command tool
+
+\l to list databases
+ CREATE DATABASE foi_development encoding = 'UTF8';
+ CREATE DATABASE foi_test encoding = 'UTF8';
+
+Make sure that the user specified in database.yml exists, and has full
+permissions on this database. As they need the ability to turn off
+constraints whilst running the tests they also need to be a superuser.
+ (See http://dev.rubyonrails.org/ticket/9981)
+
+ CREATE USER <username> WITH CREATEUSER;
+ ALTER USER <username> WITH PASSWORD '<password>';
+ ALTER USER <username> WITH CREATEDB;
+ GRANT ALL PRIVILEGES ON DATABASE foi_development TO <username>;
+ GRANT ALL PRIVILEGES ON DATABASE foi_test TO <username>;
+ ALTER DATABASE foi_development OWNER TO <username>;
+ ALTER DATABASE foi_test OWNER TO <username>;
+
+
+3. Set up configs
+-----------------
+
+For overall application settings, copy config/general-example to
+config/general and edit to your taste.
+
+Note that the default settings for frontpage examples are designed to
+work with the dummy data shipped with Alaveteli; once you have real
+data, you should edit these.
+
+The default theme is the "WhatDoTheyKnow" theme. When you run
+rails-post-deploy, that theme gets installed automatically.
+
+You'll also want to copy config/memcached.yml-example to
+config/memcached.yml. The application is configured, via the Interlock
+Rails plugin, to cache content using memcached. You probably don't
+want this in your development profile.
+
+4. Deployment
+-------------
+
+In the 'alaveteli' directory, run:
+> ./script/rails-post-deploy
+
+(This will need execute privs so chmod 755 if necessary)
+
+This sets up directory structures, creates logs, etc.
+
+Next, if you have a alaveteli/config/rails_env.rb file, delete it, so that
+tests run against our test database, rather than the development one.
+(Otherwise, any data you create in development will be blown away every
+time you run the tests.)
+
+If you want some dummy data to play with, you can try loading the
+fixtures that the test suite uses into your development database. You
+can do this with:
+
+> rake spec:db:fixtures:load
+
+Next we need to create the index for the search engine (Xapian):
+
+> ./script/rebuild-xapian-index
+
+If this fails, the site should still mostly run, but it's a core
+component so you should really try to get this working.
+
+5. Run the Tests
+----------------
+
+Make sure everything looks OK:
+
+> rake spec
+
+If there are failures here, something has gone wrong with the preceding
+steps. You might be able to move on to the next step, depending on how
+serious they are, but ideally you should try to find out what's gone
+wrong.
+
+6. Run the Server
+-----------------
+
+run the following to get the server running (may need to chmod 755 again)
+> ./script/server --environment=development
+
+By default the server listens on all interfaces. You can restrict it to the
+localhost interface by adding --binding=127.0.0.1
+
+You’ll probably need to install various things to make this work. The server
+script will tell you about any missing dependencies.
+
+
+7. Success
+----------
+
+The server should have told you the URL to access in your browser to see
+the site in action.
+
+8. Administrator privileges
+---------------------------
+
+By default, anyone can access the administrator pages without authentication.
+They are under the URL /admin.
+
+At mySociety, we use a separate layer of HTTP basic authentication, proxied
+over HTTPS, to check who is allowed to use the administrator pages. You might
+like to do something similar.
+
+Alternatively, update the code so that
+* By default, admin pages use normal site authentication (checking user admin
+level 'super').
+* Create an option in config/general which lets mySociety override that
+behaviour.
+And send us the patch!
+
+9. Mailer setup
+---------------
+
+When an authority receives an email, its reply-to address is a magic
+email which is parsed and consumed by the Rails app.
+
+Currently, this is done by calling script/mailin and piping in the raw
+email. You will need to configure your MTA to accept emails to magic
+addresses, and to pipe such emails to this script.
+
+Magic email addresses are of the form:
+
+ <foi+request-3-691c8388@example.com>
+
+The respective parts of this address are controlled with options in
+options/general, thus:
+
+ $OPTION_INCOMING_EMAIL_PREFIX = 'foi+'
+ $OPTION_INCOMING_EMAIL_DOMAIN = 'example.com'
+
+INSTALL-exim.txt describes one possible configuration for Exim 1.9.
+
+When you set up your MTA, note that if there is some error inside
+Rails, the email is returned with an exit code 75, which for Exim at
+least means the MTA will try again later. Additionally, a stacktrace
+is emailed to $OPTION_CONTACT_EMAIL.
+
+A well-configured installation of this code will separately have had
+Exim make a backup copy of the email in a separate mailbox, just in
+case.
+
+This setup isn't very scaleable, as it spawns a new Ruby process for
+each email received; patches welcome!
+
+10. Cron jobs
+------------
+
+config/crontab.ugly contains the cronjobs we run on WhatDoTheyKnow. It's
+in a strange templating format we use in mySociety, but you should be
+able to work out the syntax and variables fairly easily :)
+
+We render the "ugly" file to reference absolute paths, and then drop
+it in /etc/cron.d/ on the server.