]> git.ozlabs.org Git - patchwork/blob - docs/INSTALL
docs: Document password-based pgsql login
[patchwork] / docs / INSTALL
1 Deploying Patchwork
2
3 Patchwork uses the django framework - there is some background on deploying
4 django applications here:
5
6  http://www.djangobook.com/en/1.0/chapter20/
7
8 You'll need the following (applications used for patchwork development are
9 in brackets):
10
11   * A python interpreter
12   * django
13   * A webserver (apache)
14   * mod_python or flup
15   * A database server (postgresql)
16
17 1. Database setup
18
19     At present, I've tested with PostgreSQL and (to a lesser extent) MySQL
20     database servers. If you have any (positive or negative) experiences with
21     either, email me.
22
23     For the following commands, a $ prefix signifies that the command should be
24     entered at your shell prompt, and a > prefix signifies the commant-line
25     client for your sql server (psql or mysql)
26
27     Create a database for the system, add accounts for two system users: the
28     web user (the user that your web server runs as) and the mail user (the
29     user that your mail server runs as). On Ubuntu these are
30     www-data and nobody, respectively.
31
32     As an alternative, you can use password-based login and a single database
33     account. This is described further down.
34
35     For PostgreSQL (ident-based)
36
37         $ createdb patchwork
38         $ createuser www-data
39         $ createuser nobody
40
41         - postgres uses the standard UNIX authentication, so these users
42           will only be accessible for processes running as the same username.
43           This means that no passwords need to be set.
44
45     For PostgreSQL (password-based)
46
47         $ createuser -PE patchwork
48         $ createdb -O patchwork patchwork
49
50         Once that is done, you need to tell Django about the new Database
51         settings, using local_settings.py (see below) to override the defaults
52         in settings.py:
53
54         DATABASE_ENGINE = 'postgresql_psycopg2'
55         DATABASE_NAME = 'patchwork'
56         DATABASE_USER = 'patchwork'
57         DATABASE_PASSWORD = 'my_secret_password
58         DATABASE_HOST = 'localhost'
59         DATABASE_PORT = ''
60
61     For MySQL:
62         $ mysql
63         > CREATE DATABASE 'patchwork';
64         > CREATE USER 'www-data'@'localhost' IDENTIFIED BY '<password>';
65         > CREATE USER 'nobody'@'localhost' IDENTIFIED BY '<password>';
66
67 2. Django setup
68
69         Set up some initial directories in the patchwork base directory:
70
71          mkdir -p lib/packages lib/python
72
73         lib/packages is for stuff we'll download, lib/python is to add
74         to our python path. We'll symlink python modules into lib/python.
75
76         At the time of release, patchwork depends on django version 1.0 or
77         later. Your distro probably provides this. If not, do a:
78
79          cd lib/packages
80          svn checkout http://code.djangoproject.com/svn/django/tags/releases/1.2
81          cd ../python
82          ln -s ../packages/django/django ./django
83
84         We also use the django-registration infrastructure from
85         http://bitbucket.org/ubernostrum/django-registration/. Your distro
86         may provide the django-registration python module (in Ubuntu/Debian it's
87         called 'python-django-registration'). If not, download the module
88         and symlink it to lib/python/ :
89
90          cd lib/packages/
91          hg clone http://bitbucket.org/ubernostrum/django-registration/
92          cd ../python
93          ln -s ../lib/packages/django-registration/registration ./registration
94
95         We also use some Javascript libraries:
96
97          cd lib/packages
98          mkdir jquery
99          cd jquery
100          wget http://jqueryjs.googlecode.com/files/jquery-1.3.min.js
101          wget http://www.isocra.com/articles/jquery.tablednd_0_5.js.zip
102          unzip jquery.tablednd_0_5.js.zip jquery.tablednd_0_5.js
103          cd ../../../htdocs/js/
104          ln -s ../../lib/packages/jquery/jquery-1.3.min.js ./
105          ln -s ../../lib/packages/jquery/jquery.tablednd_0_5.js ./
106
107         The settings.py file contains default settings for patchwork, you'll
108         need to configure settings for your own setup.
109
110         Rather than edit settings.py, create a file 'local_settings.py', and
111         override or add settings as necessary. You'll need to define the
112         following:
113
114           SECRET_KEY
115           ADMINS
116           TIME_ZONE
117           LANGUAGE_CODE
118
119         You can generate the SECRET_KEY with the following python code:
120
121           import string, random
122           chars = string.letters + string.digits + string.punctuation
123           print repr("".join([random.choice(chars) for i in range(0,50)]))
124
125         If you have patchwork installed in somewhere other than /srv/patchwork,
126         you'll also need to define:
127
128           MEDIA_ROOT
129           TEMPLATE_DIRS
130
131         If you wish to enable the XML-RPC interface, add the following to
132         your local_settings.py file:
133
134           ENABLE_XMLRPC = True
135
136         Then, get patchwork to create its tables in your configured database:
137
138          cd apps/
139          PYTHONPATH=../lib/python ./manage.py syncdb
140
141         And add privileges for your mail and web users. This is only needed if
142         you use the ident-based approach. If you use password-based database
143         authentication, you can skip this step.
144
145         Postgresql:
146           psql -f lib/sql/grant-all.postgres.sql patchwork
147
148         MySQL:
149           mysql patchwork < lib/sql/grant-all.mysql.sql
150
151
152 3. Apache setup
153
154 Example apache configuration files are in lib/apache/.
155
156 mod_python:
157
158         This should be the simpler of the two to set up. An example apache
159         configuration file is in:
160
161           lib/apache/patchwork.mod_python.conf
162
163         However, mod_python and mod_php may not work well together. So, if your
164         web server is used for serving php files, the fastcgi method may suit
165         instead.
166
167 fastcgi:
168
169         django has built-in support for fastcgi, which requires the
170         'flup' python module. An example configuration is in:
171
172           lib/apache/patchwork.fastcgi.conf
173
174         - this also requires the mod_rewrite apache module to be loaded.
175
176         Once you have apache set up, you can start the fastcgi server with:
177
178           cd /srv/patchwork/apps
179           ./manage.py runfcgi method=prefork \
180                               socket=/srv/patchwork/var/fcgi.sock \
181                               pidfile=/srv/patchwork/var/fcgi.pid
182
183 4. Configure patchwork
184     Now, you should be able to administer patchwork, by visiting the
185     URL:
186
187       http://your-host/admin/
188
189     You'll probably want to do the following:
190
191       * Set up your projects
192       * Configure your website address (in the Sites) section of the admin
193
194 5. Subscribe a local address to the mailing list
195
196      You will need an email address for patchwork to receive email on - for
197      example - patchwork@, and this address will need to be subscribed to the
198      list. Depending on the mailing list, you will probably need to confirm the
199      subscription - temporarily direct the alias to yourself to do this.
200
201 6. Setup your MTA to deliver mail to the parsemail script
202
203     Your MTA will need to deliver mail to the parsemail script in the email/
204     directory. (Note, do not use the parsemail.py script directly). Something
205     like this in /etc/aliases is suitable for postfix:
206
207       patchwork: "|/srv/patchwork/apps/patchwork/bin/parsemail.sh"
208
209     You may need to customise the parsemail.sh script if you haven't installed
210     patchwork in /srv/patchwork.
211
212     Test that you can deliver a patch to this script:
213
214      sudo -u nobody /srv/patchwork/apps/patchwork/bin/parsemail.sh < mail
215
216
217 Some errors:
218
219 * __init__() got an unexpected keyword argument 'max_length'
220
221  - you're running an old version of django. If your distribution doesn't
222    provide a newer version, just download and extract django into
223    lib/python/django
224
225 * ERROR: permission denied for relation patchwork_...
226
227  - the user that patchwork is running as (ie, the user of the web-server)
228    doesn't have access to the patchwork tables in the database. Check that
229    your web-server user exists in the database, and that it has permissions
230    to the tables.
231
232 * pwclient fails for actions that require authentication, but a username
233   and password is given int ~/.pwclient rc. Server reports "No authentication
234   credentials given".
235
236  - if you're using the FastCGI interface to apache, you'll need the
237    '-pass-header Authorization' option to the FastCGIExternalServer
238    configuration directive.