]> git.ozlabs.org Git - patchwork/blob - docs/INSTALL
docs: Fix link creation example
[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 ../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/apache2/.
155
156 wsgi:
157         django has built-in support for WSGI, which supersedes the fastcgi
158         handler. It is thus the preferred method to run patchwork.
159
160         The necessary configuration for Apache2 may be found in
161
162          lib/apache2/patchwork.wsgi.conf.
163
164         You will need to install/enable mod_wsgi for this to work:
165
166          a2enmod wsgi
167          apache2ctl restart
168
169 mod_python:
170
171         An example apache configuration file for mod_python is in:
172
173           lib/apache2/patchwork.mod_python.conf
174
175         However, mod_python and mod_php may not work well together. So, if your
176         web server is used for serving php files, the fastcgi method may suit
177         instead.
178
179 fastcgi:
180
181         django has built-in support for fastcgi, which requires the
182         'flup' python module. An example configuration is in:
183
184           lib/apache2/patchwork.fastcgi.conf
185
186         - this also requires the mod_rewrite apache module to be loaded.
187
188         Once you have apache set up, you can start the fastcgi server with:
189
190           cd /srv/patchwork/apps
191           ./manage.py runfcgi method=prefork \
192                               socket=/srv/patchwork/var/fcgi.sock \
193                               pidfile=/srv/patchwork/var/fcgi.pid
194
195 4. Configure patchwork
196     Now, you should be able to administer patchwork, by visiting the
197     URL:
198
199       http://your-host/admin/
200
201     You'll probably want to do the following:
202
203       * Set up your projects
204       * Configure your website address (in the Sites) section of the admin
205
206 5. Subscribe a local address to the mailing list
207
208      You will need an email address for patchwork to receive email on - for
209      example - patchwork@, and this address will need to be subscribed to the
210      list. Depending on the mailing list, you will probably need to confirm the
211      subscription - temporarily direct the alias to yourself to do this.
212
213 6. Setup your MTA to deliver mail to the parsemail script
214
215     Your MTA will need to deliver mail to the parsemail script in the email/
216     directory. (Note, do not use the parsemail.py script directly). Something
217     like this in /etc/aliases is suitable for postfix:
218
219       patchwork: "|/srv/patchwork/apps/patchwork/bin/parsemail.sh"
220
221     You may need to customise the parsemail.sh script if you haven't installed
222     patchwork in /srv/patchwork.
223
224     Test that you can deliver a patch to this script:
225
226      sudo -u nobody /srv/patchwork/apps/patchwork/bin/parsemail.sh < mail
227
228
229 Some errors:
230
231 * __init__() got an unexpected keyword argument 'max_length'
232
233  - you're running an old version of django. If your distribution doesn't
234    provide a newer version, just download and extract django into
235    lib/python/django
236
237 * ERROR: permission denied for relation patchwork_...
238
239  - the user that patchwork is running as (ie, the user of the web-server)
240    doesn't have access to the patchwork tables in the database. Check that
241    your web-server user exists in the database, and that it has permissions
242    to the tables.
243
244 * pwclient fails for actions that require authentication, but a username
245   and password is given int ~/.pwclient rc. Server reports "No authentication
246   credentials given".
247
248  - if you're using the FastCGI interface to apache, you'll need the
249    '-pass-header Authorization' option to the FastCGIExternalServer
250    configuration directive.