~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/en/user-guide/http_smart_server.txt

  • Committer: Agustin Henze - TiN
  • Date: 2010-02-23 22:41:11 UTC
  • mto: This revision was merged to the branch mainline in revision 5077.
  • Revision ID: tin@sluc.org.ar-20100223224111-w6nr30a6c7a4t7w6
Add example for mod_wsgi and other little corrections

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
Serving Bazaar with FastCGI
2
 
===========================
 
1
Serving Bazaar with Apache
 
2
==========================
3
3
 
4
4
This document describes one way to set up a Bazaar HTTP smart server,
5
 
using Apache 2.0 and FastCGI or mod_python.
 
5
using Apache 2.0 and FastCGI or mod_python or mod_wsgi.
6
6
 
7
7
For more information on the smart server, and other ways to configure it
8
8
see the main `smart server documentation`_.
117
117
.. _mod_python: http://www.modpython.org/
118
118
 
119
119
 
 
120
mod_wsgi
 
121
~~~~~~~~
 
122
 
 
123
The next configuration permit read and write the repository with apache
 
124
authentication.
 
125
First, configure mod_wsgi, e.g. enabling the mod with a2enmod wsgi.
 
126
 
 
127
In our example, we're already serving `/srv/example.com/www/code` at
 
128
`http://example.com/code`, if you want apache authentication you need add
 
129
the next lines::
 
130
 
 
131
    # This has the same structure as svn in apache
 
132
    <Location /code>
 
133
        AuthType Basic
 
134
        AuthName "example"
 
135
        AuthUserFile /srv/example.com/conf/auth.passwd
 
136
        <LimitExcept GET>
 
137
            Require valid-user
 
138
        </LimitExcept>
 
139
    </Location>
 
140
 
 
141
We need to change it to handle all requests for URLs ending in `.bzr/smart`.  It
 
142
will look like::
 
143
 
 
144
    WSGIScriptAliasMatch ^/code/.*/\.bzr/smart$ /srv/example.com/scripts/bzr.wsgi
 
145
 
 
146
    #The three next lines allows the protocol http[s]+urllib works.
 
147
    RewriteEngine On
 
148
    RewriteRule ^/code/(.*/\.bzr/branch-format)$ /srv/example.com/www/code/$1 [L]
 
149
    RewriteRule ^/code/(.*/\.bzr/repository/.*)$ /srv/example.com/www/code/$1 [L]
 
150
 
 
151
 
 
152
    <Directory /srv/example.com/www/code>
 
153
        WSGIApplicationGroup %{GLOBAL}
 
154
    </Directory>
 
155
 
 
156
This instructs Apache to hand requests for any URL ending with `/.bzr/smart`
 
157
inside `/code` to a Bazaar smart server via WSGI.
 
158
 
 
159
Refer to the mod_wsgi_ documentation for further information.
 
160
 
 
161
.. _mod_wsgi: http://code.google.com/p/modwsgi/
 
162
 
120
163
Configuring Bazaar
121
164
------------------
122
165
 
171
214
        return wsgi_server.run(request)
172
215
 
173
216
The `modpywsgi` module can be found at
174
 
http://dev.pocoo.org/projects/pocoo/browser/pocoo/wrappers/modpy.py. It is
 
217
http://ice.usq.edu.au/svn/ice/trunk/apps/ice-server/modpywsgi.py. It was
175
218
part of pocoo_. You sould make sure you place modpywsgi.py in the same
176
219
directory as bzr-smart.py (ie. /srv/example.com/scripts/).
177
220
 
178
221
.. _pocoo: http://dev.pocoo.org/projects/pocoo/
179
222
 
 
223
 
 
224
mod_wsgi
 
225
~~~~~~~~
 
226
 
 
227
We've configured Apache to run the smart server at
 
228
`/srv/example.com/scripts/bzr.wsgi`.  This is just a simple script we need
 
229
to write to configure a smart server, and glue it to the WSGI gateway.
 
230
Here's what it looks like::
 
231
 
 
232
    from bzrlib.transport.http import wsgi
 
233
 
 
234
    def application(environ, start_response):
 
235
        app = wsgi.make_app(
 
236
            root="/srv/example.com/www/code/",
 
237
            prefix="/code",
 
238
            readonly=False,
 
239
            enable_logging=False)
 
240
        return app(environ, start_response)
 
241
 
180
242
Clients
181
243
-------
182
244
 
184
246
 
185
247
    bzr log bzr+http://example.com/code/my-branch
186
248
 
 
249
If you put the RewriteRule directive in your Virtual Host::
 
250
 
 
251
    bzr log http+urllib://example.com/code/my-branch
 
252
 
 
253
    or
 
254
 
 
255
    bzr log https+urllib://example.com/code/my-branch
 
256
 
187
257
Plain HTTP access should continue to work::
188
258
 
189
259
    bzr log http://example.com/code/my-branch
231
301
certainly be possible to have HTTPS require authentication and use a
232
302
writable server, and plain HTTP allow read-only access.
233
303
 
 
304
If you trying to push and receive the next message::
 
305
 
 
306
    bzr: ERROR: Connection error: curl connection error (server certificate verification failed.
 
307
    CAfile:/etc/ssl/certs/ca-certificates.crt CRLfile: none)
 
308
 
 
309
You can probe uninstall pycurl or use https+urllib if you put the RewriteRule
 
310
directive in your Virtual Host.
 
311
 
 
312
 
234
313
 
235
314
..
236
315
   vim: ft=rst tw=74 et