~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Andrew Bennetts
  • Date: 2010-10-08 08:15:14 UTC
  • mto: This revision was merged to the branch mainline in revision 5498.
  • Revision ID: andrew.bennetts@canonical.com-20101008081514-dviqzrdfwyzsqbz2
Split NEWS into per-release doc/en/release-notes/bzr-*.txt

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
Apache を使って Bazaar サーバーをたてる
2
 
=========================================
 
1
FastCGIでBazaarを提供する
 
2
==========================
3
3
 
4
 
このドキュメントでは、 Apache 2.0 と FastCGI, mod_python, mod_wsgi の
5
 
どれかを利用して Bazaar の HTTP スマートサーバーをセットアップする方法を
6
 
説明します。
 
4
このドキュメントでは、Apache 2.0とFastCGIもしくはmod_pythonを利用して
 
5
Bazaar HTTPスマートサーバーをセットアップする1つの方法を説明します。
7
6
 
8
7
スマートサーバーに関する詳細な情報とそれを設定する他の方法に関しては、
9
 
`スマートサーバーのドキュメント <server.html>`_ を参照してください。
 
8
メインのスマートサーバーのドキュメントを参照してください。
10
9
 
11
10
12
11
---
27
26
 
28
27
    LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so
29
28
    FastCgiIpcDir /var/lib/apache2/fastcgi
30
 
    
 
29
 
31
30
我々の例では、`http://example.com/code` で `/srv/example.com/www/code` をすでに提供しているので
32
31
既存のApacheの設定は次のようになります::
33
32
 
45
44
        Options Indexes FollowSymLinks
46
45
        RewriteEngine On
47
46
        RewriteBase /code
48
 
        RewriteRule ^(.*/)?\.bzr/smart$ /srv/example.com/scripts/bzr-smart.fcgi
 
47
        RewriteRule ^(.*/|)\.bzr/smart$ /srv/example.com/scripts/bzr-smart.fcgi
49
48
    </Directory>
50
 
    
 
49
 
51
50
    # bzr-smart.fcgiはDocumentRootの元に存在しないので、実行されるように
52
51
    # AliasはこれをURLの名前空間のエイリアスにする。
53
52
    Alias /srv/example.com/scripts/bzr-smart.fcgi /srv/example.com/scripts/bzr-smart.fcgi
57
56
            SetHandler fastcgi-script
58
57
        </Files>
59
58
    </Directory>
60
 
    
 
59
 
61
60
この設定はFastCGIを通して `/code` 内部の `/.bzr/smart` で終わるURLに対する
62
61
Bazaarのスマートサーバーへのリクエストを扱うようにApacheに指示します。
63
62
 
69
68
mod_python
70
69
~~~~~~~~~~
71
70
 
72
 
最初に、次のようなコードを httpd.conf に追加して mod_python を設定します::
 
71
最初に、次のようなコードをhttpd.confに追加してmod_pythonを設定します::
73
72
 
74
73
    LoadModule python_module /usr/lib/apache2/modules/mod_python.so
75
74
 
76
 
FastCGI と同じ方法で mod_rewrite を用いて書き換えルールを定義します::
 
75
FastCGIと同じ方法でmod_rewriteを用いて書き換えルールを定義します::
77
76
 
78
 
    RewriteRule ^(.*/)?\.bzr/smart$ /srv/example.com/scripts/bzr-smart.fcgi
 
77
    RewriteRule ^(.*/|)\.bzr/smart$ /srv/example.com/scripts/bzr-smart.fcgi
79
78
 
80
79
変更は次のようになります::
81
80
 
82
 
    RewriteRule ^(.*/)?\.bzr/smart$ /srv/example.com/scripts/bzr-smart.py
 
81
    RewriteRule ^(.*/|)\.bzr/smart$ /srv/example.com/scripts/bzr-smart.py
83
82
 
84
 
mod_fastcgi のように、スクリプトがどのように扱われるのかも定義します::
 
83
mod_fastcgiのように、スクリプトがどのように扱われるのかも定義します::
85
84
 
86
85
    Alias /srv/example.com/scripts/bzr-smart.py /srv/example.com/scripts/bzr-smart.py
87
86
    <Directory /srv/example.com/scripts>
92
91
        </Files>
93
92
    </Directory>
94
93
 
95
 
この設定は mod_python を通して `/code` 内部の `/.bzr/smart` で終わるURLに対するリクエストを
96
 
Bazaar のスマートサーバーに渡すように指示します。
 
94
この設定はmod_pythonを通して `/code` 内部の `/.bzr/smart` で終わるURLに対するリクエストを
 
95
Bazaarのスマートサーバーに渡すように指示します。
97
96
 
98
 
注: bzrlib が PATH の中に存在しない場合、次の行を変更する必要があります::
 
97
注: bzrlibがPATHの中に存在しない場合、次の行を変更する必要があります::
99
98
 
100
99
            PythonPath "sys.path+['/srv/example.com/scripts']"
101
100
 
109
108
.. _mod_python: http://www.modpython.org/
110
109
 
111
110
 
112
 
mod_wsgi
113
 
~~~~~~~~
114
 
 
115
 
最初に、 a2enmod wsgi などで mod_wsgi を有効にしておきます。
116
 
次に、 `.bzr/smart` で終わる全ての URL に対するリクエストを mod_wsgi 経由
117
 
で処理するように設定します。設定例は次のようになります。 ::
118
 
 
119
 
    WSGIScriptAliasMatch ^/code/.*/\.bzr/smart$ /srv/example.com/scripts/bzr.wsgi
120
 
 
121
 
    #The three next lines allow regular GETs to work too
122
 
    RewriteEngine On
123
 
    RewriteCond %{REQUEST_URI} !^/code/.*/\.bzr/smart$
124
 
    RewriteRule ^/code/(.*/\.bzr/.*)$ /srv/example.com/www/code/$1 [L]
125
 
 
126
 
    <Directory /srv/example.com/www/code>
127
 
        WSGIApplicationGroup %{GLOBAL}
128
 
    </Directory>
129
 
 
130
 
この設定では、 Apache は `/code` 以下の `/.bzr/smart` で終わる URL に
131
 
対する全てのリクエストを WSGI 経由で Bazaar のスマートサーバーに渡し、
132
 
それ以外の全てのリクエストは Apache が直接扱うようにしています。
133
 
 
134
 
詳細は mod_wsgi_ のドキュメントを参照してください。
135
 
 
136
 
.. _mod_wsgi: http://code.google.com/p/modwsgi/
137
 
 
138
111
Bazaarを設定する
139
112
-----------------
140
113
 
157
130
        enable_logging=True)
158
131
 
159
132
    fcgi.WSGIServer(smart_server_app).run()
160
 
        
161
 
 `fcgi` のモジュールはhttp://svn.saddi.com/py-lib/trunk/fcgi.pyで見つかります。
 
133
 
 
134
 `fcgi`のモジュールはhttp://svn.saddi.com/py-lib/trunk/fcgi.pyで見つかります。
162
135
これは flup_ の一部です。
163
136
 
164
137
.. _flup: http://www.saddi.com/software/flup/
185
158
        """Handle a single request."""
186
159
        wsgi_server = modpywsgi.WSGIServer(smart_server_app)
187
160
        return wsgi_server.run(request)
188
 
        
 
161
 
189
162
`modpywsgi` モジュールは
190
 
http://ice.usq.edu.au/svn/ice/trunk/apps/ice-server/modpywsgi.py で見つかります。
191
 
これは pocoo_ の一部でした。 modpywsgi.py を bzr-smart.py と同じディレクトリ
 
163
`http://dev.pocoo.org/projects/pocoo/browser/pocoo/wrappers/modpy.py` で見つかります。
 
164
これは pocoo_ の一部です。modpywsgi.pyをbzr-smart.pyと同じディレクトリ
192
165
(すなわち/srv/example.com/scripts/)に設置していることを確認してください。
193
166
 
194
167
.. _pocoo: http://dev.pocoo.org/projects/pocoo/
195
168
 
196
 
 
197
 
mod_wsgi
198
 
~~~~~~~~
199
 
 
200
 
We've configured Apache to run the smart server at
201
 
`/srv/example.com/scripts/bzr.wsgi`.  This is just a simple script we need
202
 
to write to configure a smart server, and glue it to the WSGI gateway.
203
 
Here's what it looks like::
204
 
 
205
 
    from bzrlib.transport.http import wsgi
206
 
 
207
 
    def application(environ, start_response):
208
 
        app = wsgi.make_app(
209
 
            root="/srv/example.com/www/code/",
210
 
            prefix="/code",
211
 
            readonly=True,
212
 
            enable_logging=False)
213
 
        return app(environ, start_response)
214
 
 
215
169
クライアント
216
170
------------
217
171
 
218
 
これで `bzr+http://` 形式のURLやただの `http://` のURLを利用できます::
 
172
これで `bzr+http://` 形式のURLを利用できます::
219
173
 
220
174
    bzr log bzr+http://example.com/code/my-branch
221
175
 
231
185
WSGI標準に準拠するサードパーティのWSGIのミドルウェアもしくはサーバーで利用できます。
232
186
唯一の要件は以下のとおりです:
233
187
 
234
 
  * `SmartWSGIApp` をコンストラクトするためには、それが提供する **root transport** を指定する必要があります。
 
188
  *  `SmartWSGIApp` をコンストラクトするためには、それが提供する **root transport** を指定する必要があります。
235
189
  * それぞれのリクエストの `environ` dict は **'bzrlib.relpath'** 変数の設定を持たなければなりません。
236
190
 
237
191
この例で使われている `make_app` ヘルパーは それに渡される `root` パスに基づいたトランスポートを伴う
238
192
`SmartWSGIApp` をコンストラクトし、引数 `prefix` と`path_var` に基づくそれぞれのリクエストに対する
239
193
 `bzrlib.relpath` を算出します。
240
 
上記の例において、これは (Apacheによって設定される)'REQUEST_URI' を取り、接頭辞の '/code/' と接尾辞の '/.bzr/smart' 
 
194
上記の例において、これは (Apacheによって設定される)'REQUEST_URI' を取り、接頭辞の '/code/' と接尾辞の '/.bzr/smart'
241
195
をはぎ取り、それを 'bzrlib.relpath' として設定するので、 '/code/foo/bar/.bzr/smart' に対するリクエストは
242
196
'foo/bzr' の 'bzrlib.relpath' になります。
243
197
 
248
202
.. _WSGI標準: http://www.python.org/dev/peps/pep-0333/
249
203
 
250
204
 
251
 
HTTP スマートサーバー経由で push する
252
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
205
``bzr+http://`` を通してpushする
 
206
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
253
207
 
254
 
HTTP スマートサーバーを通してデータをプッシュすることは可能です。
 
208
httpスマートサーバーを通してデータをプッシュすることは可能です。
255
209
これを行うための最も簡単な方法は、 ``wsgi.make_app()`` コールに ``readonly=False`` を
256
210
提供するだけです。ただし、スマートプロトコルは認証機能が含まれないので注意してください。
257
211
書き込みのサポートを有効にする場合、
258
 
実際にシステム上のデータを書き込みできる人を制限するために、 ``.bzr/smart``
259
 
URLへの権限を制限するとよいでしょう。例えば Apache で次のような設定を
260
 
します。 ::
261
 
 
262
 
    <Location /code>
263
 
        AuthType Basic
264
 
        AuthName "example"
265
 
        AuthUserFile /srv/example.com/conf/auth.passwd
266
 
        <LimitExcept GET>
267
 
            Require valid-user
268
 
        </LimitExcept>
269
 
    </Location>
270
 
 
271
 
 
272
 
現時点では、同じURLに対して読み込み限定の人と読み込みと書き込みの人を
273
 
分けることはできません。
 
212
実際にシステム上のデータを書き込みできる人を制限するために、 ``.bzr/smart`` URLへの権限を制限するとよいでしょう。
 
213
 
 
214
現時点では、同じURLに対して読み込み限定の人と読み込みと書き込みの人を分けることはできません。
274
215
(認証を行う)HTTPレイヤーにおいて、すべては単なるPOSTリクエストだからです。
275
216
しかしながら、HTTPSアクセスの場合に認証が必要な書き込みサーバーを使い、
276
 
プレーンなHTTPは読み込み限定のアクセスを許可することはできます。
277
 
 
278
 
HTTPS サイトに対してアクセスしたときに bzr が次のようなエラーを表示する
279
 
場合::
280
 
 
281
 
  bzr: ERROR: Connection error: curl connection error (server certificate verification failed.
282
 
  CAfile:/etc/ssl/certs/ca-certificates.crt CRLfile: none)
283
 
 
284
 
You can workaround it by using ``https+urllib`` rather than ``http`` in your
285
 
URL, or by uninstalling pycurl.  See `bug 82086`_ for more details.
286
 
 
287
 
URL に ``https`` の代わりに ``https+urllib`` を使うことで問題を回避
288
 
できます。
289
 
詳細については `bug 82086`_ を参照してください。
290
 
 
291
 
.. _bug 82086: https://bugs.launchpad.net/bzr/+bug/82086
292
 
 
293
 
 
294
 
.. 
 
217
プレーンなHTTPは読み込み限定のアクセスを許可することは確実にできます。
 
218
 
 
219
 
 
220
..
295
221
   vim: ft=rst tw=74 et