~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

resolve conflicts against trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
FastCGIでBazaarを提供する
2
 
==========================
 
1
Apache を使って Bazaar サーバーをたてる
 
2
=========================================
3
3
 
4
 
このドキュメントでは、Apache 2.0とFastCGIもしくはmod_pythonを利用して
5
 
Bazaar HTTPスマートサーバーをセットアップする1つの方法を説明します。
 
4
このドキュメントでは、 Apache 2.0 と FastCGI, mod_python, mod_wsgi の
 
5
どれかを利用して Bazaar の HTTP スマートサーバーをセットアップする方法を
 
6
説明します。
6
7
 
7
8
スマートサーバーに関する詳細な情報とそれを設定する他の方法に関しては、
8
 
メインのスマートサーバーのドキュメントを参照してください。
 
9
`スマートサーバーのドキュメント <server.html>`_ を参照してください。
9
10
 
10
11
11
12
---
26
27
 
27
28
    LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so
28
29
    FastCgiIpcDir /var/lib/apache2/fastcgi
29
 
 
 
30
    
30
31
我々の例では、`http://example.com/code` で `/srv/example.com/www/code` をすでに提供しているので
31
32
既存のApacheの設定は次のようになります::
32
33
 
46
47
        RewriteBase /code
47
48
        RewriteRule ^(.*/)?\.bzr/smart$ /srv/example.com/scripts/bzr-smart.fcgi
48
49
    </Directory>
49
 
 
 
50
    
50
51
    # bzr-smart.fcgiはDocumentRootの元に存在しないので、実行されるように
51
52
    # AliasはこれをURLの名前空間のエイリアスにする。
52
53
    Alias /srv/example.com/scripts/bzr-smart.fcgi /srv/example.com/scripts/bzr-smart.fcgi
56
57
            SetHandler fastcgi-script
57
58
        </Files>
58
59
    </Directory>
59
 
 
 
60
    
60
61
この設定はFastCGIを通して `/code` 内部の `/.bzr/smart` で終わるURLに対する
61
62
Bazaarのスマートサーバーへのリクエストを扱うようにApacheに指示します。
62
63
 
68
69
mod_python
69
70
~~~~~~~~~~
70
71
 
71
 
最初に、次のようなコードをhttpd.confに追加してmod_pythonを設定します::
 
72
最初に、次のようなコードを httpd.conf に追加して mod_python を設定します::
72
73
 
73
74
    LoadModule python_module /usr/lib/apache2/modules/mod_python.so
74
75
 
75
 
FastCGIと同じ方法でmod_rewriteを用いて書き換えルールを定義します::
 
76
FastCGI と同じ方法で mod_rewrite を用いて書き換えルールを定義します::
76
77
 
77
78
    RewriteRule ^(.*/)?\.bzr/smart$ /srv/example.com/scripts/bzr-smart.fcgi
78
79
 
80
81
 
81
82
    RewriteRule ^(.*/)?\.bzr/smart$ /srv/example.com/scripts/bzr-smart.py
82
83
 
83
 
mod_fastcgiのように、スクリプトがどのように扱われるのかも定義します::
 
84
mod_fastcgi のように、スクリプトがどのように扱われるのかも定義します::
84
85
 
85
86
    Alias /srv/example.com/scripts/bzr-smart.py /srv/example.com/scripts/bzr-smart.py
86
87
    <Directory /srv/example.com/scripts>
91
92
        </Files>
92
93
    </Directory>
93
94
 
94
 
この設定はmod_pythonを通して `/code` 内部の `/.bzr/smart` で終わるURLに対するリクエストを
95
 
Bazaarのスマートサーバーに渡すように指示します。
 
95
この設定は mod_python を通して `/code` 内部の `/.bzr/smart` で終わるURLに対するリクエストを
 
96
Bazaar のスマートサーバーに渡すように指示します。
96
97
 
97
 
注: bzrlibがPATHの中に存在しない場合、次の行を変更する必要があります::
 
98
注: bzrlib が PATH の中に存在しない場合、次の行を変更する必要があります::
98
99
 
99
100
            PythonPath "sys.path+['/srv/example.com/scripts']"
100
101
 
108
109
.. _mod_python: http://www.modpython.org/
109
110
 
110
111
 
 
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
 
111
138
Bazaarを設定する
112
139
-----------------
113
140
 
130
157
        enable_logging=True)
131
158
 
132
159
    fcgi.WSGIServer(smart_server_app).run()
133
 
 
 
160
        
134
161
 `fcgi`のモジュールはhttp://svn.saddi.com/py-lib/trunk/fcgi.pyで見つかります。
135
162
これは flup_ の一部です。
136
163
 
158
185
        """Handle a single request."""
159
186
        wsgi_server = modpywsgi.WSGIServer(smart_server_app)
160
187
        return wsgi_server.run(request)
161
 
 
 
188
        
162
189
`modpywsgi` モジュールは
163
 
`http://dev.pocoo.org/projects/pocoo/browser/pocoo/wrappers/modpy.py` で見つかります。
164
 
これは pocoo_ の一部です。modpywsgi.pyをbzr-smart.pyと同じディレクトリ
 
190
http://ice.usq.edu.au/svn/ice/trunk/apps/ice-server/modpywsgi.py で見つかります。
 
191
これは pocoo_ の一部でした。 modpywsgi.py を bzr-smart.py と同じディレクトリ
165
192
(すなわち/srv/example.com/scripts/)に設置していることを確認してください。
166
193
 
167
194
.. _pocoo: http://dev.pocoo.org/projects/pocoo/
168
195
 
 
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
 
169
215
クライアント
170
216
------------
171
217
 
172
 
これで `bzr+http://` 形式のURLを利用できます::
 
218
これで `bzr+http://` 形式のURLやただの `http://` のURLを利用できます::
173
219
 
174
220
    bzr log bzr+http://example.com/code/my-branch
175
221
 
185
231
WSGI標準に準拠するサードパーティのWSGIのミドルウェアもしくはサーバーで利用できます。
186
232
唯一の要件は以下のとおりです:
187
233
 
188
 
  *  `SmartWSGIApp` をコンストラクトするためには、それが提供する **root transport** を指定する必要があります。
 
234
  * `SmartWSGIApp` をコンストラクトするためには、それが提供する **root transport** を指定する必要があります。
189
235
  * それぞれのリクエストの `environ` dict は **'bzrlib.relpath'** 変数の設定を持たなければなりません。
190
236
 
191
237
この例で使われている `make_app` ヘルパーは それに渡される `root` パスに基づいたトランスポートを伴う
192
238
`SmartWSGIApp` をコンストラクトし、引数 `prefix` と`path_var` に基づくそれぞれのリクエストに対する
193
239
 `bzrlib.relpath` を算出します。
194
 
上記の例において、これは (Apacheによって設定される)'REQUEST_URI' を取り、接頭辞の '/code/' と接尾辞の '/.bzr/smart'
 
240
上記の例において、これは (Apacheによって設定される)'REQUEST_URI' を取り、接頭辞の '/code/' と接尾辞の '/.bzr/smart' 
195
241
をはぎ取り、それを 'bzrlib.relpath' として設定するので、 '/code/foo/bar/.bzr/smart' に対するリクエストは
196
242
'foo/bzr' の 'bzrlib.relpath' になります。
197
243
 
202
248
.. _WSGI標準: http://www.python.org/dev/peps/pep-0333/
203
249
 
204
250
 
205
 
``bzr+http://`` を通してpushする
206
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
251
HTTP スマートサーバー経由で push する
 
252
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
207
253
 
208
 
httpスマートサーバーを通してデータをプッシュすることは可能です。
 
254
HTTP スマートサーバーを通してデータをプッシュすることは可能です。
209
255
これを行うための最も簡単な方法は、 ``wsgi.make_app()`` コールに ``readonly=False`` を
210
256
提供するだけです。ただし、スマートプロトコルは認証機能が含まれないので注意してください。
211
257
書き込みのサポートを有効にする場合、
212
 
実際にシステム上のデータを書き込みできる人を制限するために、 ``.bzr/smart`` URLへの権限を制限するとよいでしょう。
213
 
 
214
 
現時点では、同じURLに対して読み込み限定の人と読み込みと書き込みの人を分けることはできません。
 
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
分けることはできません。
215
274
(認証を行う)HTTPレイヤーにおいて、すべては単なるPOSTリクエストだからです。
216
275
しかしながら、HTTPSアクセスの場合に認証が必要な書き込みサーバーを使い、
217
 
プレーンなHTTPは読み込み限定のアクセスを許可することは確実にできます。
218
 
 
219
 
 
220
 
..
 
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
.. 
221
295
   vim: ft=rst tw=74 et