5875.1.1
by INADA Naoki
Update Japanese docs. |
1 |
Apache を使って Bazaar サーバーをたてる |
2 |
========================================= |
|
4634.99.1
by Naoki INADA
import doc-ja rev90 |
3 |
|
5875.1.1
by INADA Naoki
Update Japanese docs. |
4 |
このドキュメントでは、 Apache 2.0 と FastCGI, mod_python, mod_wsgi の |
5 |
どれかを利用して Bazaar の HTTP スマートサーバーをセットアップする方法を |
|
6 |
説明します。 |
|
4634.99.1
by Naoki INADA
import doc-ja rev90 |
7 |
|
8 |
スマートサーバーに関する詳細な情報とそれを設定する他の方法に関しては、 |
|
5875.1.1
by INADA Naoki
Update Japanese docs. |
9 |
`スマートサーバーのドキュメント <server.html>`_ を参照してください。 |
4634.99.1
by Naoki INADA
import doc-ja rev90 |
10 |
|
11 |
例 |
|
12 |
--- |
|
13 |
||
14 |
プレーンなHTTPで `/srv/example.com/www/code` を `http://example.com/code/...` として |
|
15 |
すでに公開しているとします。これはbzrのブランチと `/srv/example.com/www/code/branch-one` |
|
16 |
と `/srv/example.com/www/code/my-repo/branch-two` のようなディレクトリを含みます。 |
|
17 |
既存のHTTP形式のアクセス権限に加えてリードオンリーのスマートサーバーのアクセス権限を |
|
18 |
これらのディレクトリに提供したい場合を考えます。 |
|
19 |
||
20 |
Apache 2.0を設定する |
|
21 |
-------------------- |
|
22 |
||
23 |
FastCGI |
|
24 |
~~~~~~~ |
|
25 |
||
26 |
最初に、mod_fastcgiを設定します。たとえば次の行をhttpd.confに追加します:: |
|
27 |
||
28 |
LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so |
|
29 |
FastCgiIpcDir /var/lib/apache2/fastcgi |
|
5875.1.1
by INADA Naoki
Update Japanese docs. |
30 |
|
4634.99.1
by Naoki INADA
import doc-ja rev90 |
31 |
我々の例では、`http://example.com/code` で `/srv/example.com/www/code` をすでに提供しているので |
32 |
既存のApacheの設定は次のようになります:: |
|
33 |
||
34 |
Alias /code /srv/example.com/www/code |
|
35 |
<Directory /srv/example.com/www/code> |
|
36 |
Options Indexes |
|
37 |
# ... |
|
38 |
</Directory> |
|
39 |
||
40 |
.bzr/smartの形式で終わるURLに対するすべてのリクエストを扱うために |
|
41 |
次のように変更する必要があります:: |
|
42 |
||
43 |
Alias /code /srv/example.com/www/code |
|
44 |
<Directory /srv/example.com/www/code> |
|
45 |
Options Indexes FollowSymLinks |
|
46 |
RewriteEngine On |
|
47 |
RewriteBase /code |
|
5459.6.1
by Neil Martinsen-Burrell
fix documentation for apache with smart server |
48 |
RewriteRule ^(.*/)?\.bzr/smart$ /srv/example.com/scripts/bzr-smart.fcgi |
4634.99.1
by Naoki INADA
import doc-ja rev90 |
49 |
</Directory> |
5875.1.1
by INADA Naoki
Update Japanese docs. |
50 |
|
4634.99.1
by Naoki INADA
import doc-ja rev90 |
51 |
# bzr-smart.fcgiはDocumentRootの元に存在しないので、実行されるように |
52 |
# AliasはこれをURLの名前空間のエイリアスにする。 |
|
53 |
Alias /srv/example.com/scripts/bzr-smart.fcgi /srv/example.com/scripts/bzr-smart.fcgi |
|
54 |
<Directory /srv/example.com/scripts> |
|
55 |
Options ExecCGI |
|
56 |
<Files bzr-smart.fcgi> |
|
57 |
SetHandler fastcgi-script |
|
58 |
</Files> |
|
59 |
</Directory> |
|
5875.1.1
by INADA Naoki
Update Japanese docs. |
60 |
|
4634.99.1
by Naoki INADA
import doc-ja rev90 |
61 |
この設定はFastCGIを通して `/code` 内部の `/.bzr/smart` で終わるURLに対する |
62 |
Bazaarのスマートサーバーへのリクエストを扱うようにApacheに指示します。 |
|
63 |
||
64 |
詳細な情報は mod_rewrite_ と mod_fastcgi_ のドキュメントを参照してください。 |
|
65 |
||
66 |
.. _mod_rewrite: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html |
|
67 |
.. _mod_fastcgi: http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html |
|
68 |
||
69 |
mod_python |
|
70 |
~~~~~~~~~~ |
|
71 |
||
5875.1.1
by INADA Naoki
Update Japanese docs. |
72 |
最初に、次のようなコードを httpd.conf に追加して mod_python を設定します:: |
4634.99.1
by Naoki INADA
import doc-ja rev90 |
73 |
|
74 |
LoadModule python_module /usr/lib/apache2/modules/mod_python.so |
|
75 |
||
5875.1.1
by INADA Naoki
Update Japanese docs. |
76 |
FastCGI と同じ方法で mod_rewrite を用いて書き換えルールを定義します:: |
4634.99.1
by Naoki INADA
import doc-ja rev90 |
77 |
|
5459.6.1
by Neil Martinsen-Burrell
fix documentation for apache with smart server |
78 |
RewriteRule ^(.*/)?\.bzr/smart$ /srv/example.com/scripts/bzr-smart.fcgi |
4634.99.1
by Naoki INADA
import doc-ja rev90 |
79 |
|
80 |
変更は次のようになります:: |
|
81 |
||
5459.6.1
by Neil Martinsen-Burrell
fix documentation for apache with smart server |
82 |
RewriteRule ^(.*/)?\.bzr/smart$ /srv/example.com/scripts/bzr-smart.py |
4634.99.1
by Naoki INADA
import doc-ja rev90 |
83 |
|
5875.1.1
by INADA Naoki
Update Japanese docs. |
84 |
mod_fastcgi のように、スクリプトがどのように扱われるのかも定義します:: |
4634.99.1
by Naoki INADA
import doc-ja rev90 |
85 |
|
86 |
Alias /srv/example.com/scripts/bzr-smart.py /srv/example.com/scripts/bzr-smart.py |
|
87 |
<Directory /srv/example.com/scripts> |
|
88 |
<Files bzr-smart.py> |
|
89 |
PythonPath "sys.path+['/srv/example.com/scripts']" |
|
90 |
AddHandler python-program .py |
|
91 |
PythonHandler bzr-smart::handler |
|
92 |
</Files> |
|
93 |
</Directory> |
|
94 |
||
5875.1.1
by INADA Naoki
Update Japanese docs. |
95 |
この設定は mod_python を通して `/code` 内部の `/.bzr/smart` で終わるURLに対するリクエストを |
96 |
Bazaar のスマートサーバーに渡すように指示します。 |
|
4634.99.1
by Naoki INADA
import doc-ja rev90 |
97 |
|
5875.1.1
by INADA Naoki
Update Japanese docs. |
98 |
注: bzrlib が PATH の中に存在しない場合、次の行を変更する必要があります:: |
4634.99.1
by Naoki INADA
import doc-ja rev90 |
99 |
|
100 |
PythonPath "sys.path+['/srv/example.com/scripts']" |
|
101 |
||
102 |
変更後は次のようになります:: |
|
103 |
||
104 |
PythonPath "['/path/to/bzr']+sys.path+['/srv/example.com/scripts']" |
|
105 |
||
106 |
||
107 |
詳細な情報は mod_python_ のドキュメントを参照してください。 |
|
108 |
||
109 |
.. _mod_python: http://www.modpython.org/ |
|
110 |
||
111 |
||
5875.1.1
by INADA Naoki
Update Japanese docs. |
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 |
||
4634.99.1
by Naoki INADA
import doc-ja rev90 |
138 |
Bazaarを設定する |
139 |
----------------- |
|
140 |
||
141 |
FastCGI |
|
142 |
~~~~~~~ |
|
143 |
||
144 |
`/srv/example.com/scripts/bzr-smart.fcgi` でスマートサーバーを実行するためにApacheを設定しました。 |
|
145 |
これはスマートサーバーを設定するために書く必要のある単なるシンプルなスクリプトで |
|
146 |
サーバーをFastCGIのゲートウェイに結びつけます。次のようになります:: |
|
147 |
||
148 |
import fcgi |
|
149 |
from bzrlib.transport.http import wsgi |
|
150 |
||
151 |
smart_server_app = wsgi.make_app( |
|
152 |
root='/srv/example.com/www/code', |
|
153 |
prefix='/code/', |
|
154 |
path_var='REQUEST_URI', |
|
155 |
readonly=True, |
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
156 |
load_plugins=True, |
4634.99.1
by Naoki INADA
import doc-ja rev90 |
157 |
enable_logging=True) |
158 |
||
159 |
fcgi.WSGIServer(smart_server_app).run() |
|
5875.1.1
by INADA Naoki
Update Japanese docs. |
160 |
|
4634.99.1
by Naoki INADA
import doc-ja rev90 |
161 |
`fcgi`のモジュールはhttp://svn.saddi.com/py-lib/trunk/fcgi.pyで見つかります。 |
162 |
これは flup_ の一部です。 |
|
163 |
||
164 |
.. _flup: http://www.saddi.com/software/flup/ |
|
165 |
||
166 |
mod_python |
|
167 |
~~~~~~~~~~ |
|
168 |
||
169 |
`/srv/example.com/scripts/bzr-smart.py` でスマートサーバーを実行するためにApacheを設定しました。 |
|
170 |
これはスマートサーバーを設定するために書く必要のあるシンプルなスクリプトでサーバーをmod_pythonの |
|
171 |
ゲートウェイに結びつけます。次のようになります:: |
|
172 |
||
173 |
import modpywsgi |
|
174 |
from bzrlib.transport.http import wsgi |
|
175 |
||
176 |
smart_server_app = wsgi.make_app( |
|
177 |
root='/srv/example.com/www/code', |
|
178 |
prefix='/code/', |
|
179 |
path_var='REQUEST_URI', |
|
180 |
readonly=True, |
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
181 |
load_plugins=True, |
4634.99.1
by Naoki INADA
import doc-ja rev90 |
182 |
enable_logging=True) |
183 |
||
184 |
def handler(request): |
|
185 |
"""Handle a single request.""" |
|
186 |
wsgi_server = modpywsgi.WSGIServer(smart_server_app) |
|
187 |
return wsgi_server.run(request) |
|
5875.1.1
by INADA Naoki
Update Japanese docs. |
188 |
|
4634.99.1
by Naoki INADA
import doc-ja rev90 |
189 |
`modpywsgi` モジュールは |
5875.1.1
by INADA Naoki
Update Japanese docs. |
190 |
http://ice.usq.edu.au/svn/ice/trunk/apps/ice-server/modpywsgi.py で見つかります。 |
191 |
これは pocoo_ の一部でした。 modpywsgi.py を bzr-smart.py と同じディレクトリ |
|
4634.99.1
by Naoki INADA
import doc-ja rev90 |
192 |
(すなわち/srv/example.com/scripts/)に設置していることを確認してください。 |
193 |
||
194 |
.. _pocoo: http://dev.pocoo.org/projects/pocoo/ |
|
195 |
||
5875.1.1
by INADA Naoki
Update Japanese docs. |
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 |
||
4634.99.1
by Naoki INADA
import doc-ja rev90 |
215 |
クライアント |
216 |
------------ |
|
217 |
||
5875.1.1
by INADA Naoki
Update Japanese docs. |
218 |
これで `bzr+http://` 形式のURLやただの `http://` のURLを利用できます:: |
4634.99.1
by Naoki INADA
import doc-ja rev90 |
219 |
|
220 |
bzr log bzr+http://example.com/code/my-branch |
|
221 |
||
222 |
プレーンなHTTP形式のアクセスも持続します:: |
|
223 |
||
224 |
bzr log http://example.com/code/my-branch |
|
225 |
||
226 |
||
227 |
高度な設定 |
|
228 |
----------- |
|
229 |
||
230 |
BazaarのHTTPスマートサーバーはWSGIアプリケーションなので、 |
|
231 |
WSGI標準に準拠するサードパーティのWSGIのミドルウェアもしくはサーバーで利用できます。 |
|
232 |
唯一の要件は以下のとおりです: |
|
233 |
||
5875.1.1
by INADA Naoki
Update Japanese docs. |
234 |
* `SmartWSGIApp` をコンストラクトするためには、それが提供する **root transport** を指定する必要があります。 |
4634.99.1
by Naoki INADA
import doc-ja rev90 |
235 |
* それぞれのリクエストの `environ` dict は **'bzrlib.relpath'** 変数の設定を持たなければなりません。 |
236 |
||
237 |
この例で使われている `make_app` ヘルパーは それに渡される `root` パスに基づいたトランスポートを伴う |
|
238 |
`SmartWSGIApp` をコンストラクトし、引数 `prefix` と`path_var` に基づくそれぞれのリクエストに対する |
|
239 |
`bzrlib.relpath` を算出します。 |
|
5875.1.1
by INADA Naoki
Update Japanese docs. |
240 |
上記の例において、これは (Apacheによって設定される)'REQUEST_URI' を取り、接頭辞の '/code/' と接尾辞の '/.bzr/smart' |
4634.99.1
by Naoki INADA
import doc-ja rev90 |
241 |
をはぎ取り、それを 'bzrlib.relpath' として設定するので、 '/code/foo/bar/.bzr/smart' に対するリクエストは |
242 |
'foo/bzr' の 'bzrlib.relpath' になります。 |
|
243 |
||
244 |
`SmartWSGIApp` を直接コンストラクトすることで、ローカルではないトランスポートに対して |
|
245 |
スマートサーバーを設定するもしくは任意任意のパスの変換を行うことは可能です。 |
|
246 |
詳細な情報に関しては `bzrlib.transport.http.wsgi` のdocstringsと `WSGI標準`_ を参照してください。 |
|
247 |
||
248 |
.. _WSGI標準: http://www.python.org/dev/peps/pep-0333/ |
|
249 |
||
250 |
||
5875.1.1
by INADA Naoki
Update Japanese docs. |
251 |
HTTP スマートサーバー経由で push する |
252 |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4634.99.1
by Naoki INADA
import doc-ja rev90 |
253 |
|
5875.1.1
by INADA Naoki
Update Japanese docs. |
254 |
HTTP スマートサーバーを通してデータをプッシュすることは可能です。 |
4634.99.1
by Naoki INADA
import doc-ja rev90 |
255 |
これを行うための最も簡単な方法は、 ``wsgi.make_app()`` コールに ``readonly=False`` を |
256 |
提供するだけです。ただし、スマートプロトコルは認証機能が含まれないので注意してください。 |
|
257 |
書き込みのサポートを有効にする場合、 |
|
5875.1.1
by INADA Naoki
Update Japanese docs. |
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 |
分けることはできません。 |
|
4634.99.1
by Naoki INADA
import doc-ja rev90 |
274 |
(認証を行う)HTTPレイヤーにおいて、すべては単なるPOSTリクエストだからです。 |
275 |
しかしながら、HTTPSアクセスの場合に認証が必要な書き込みサーバーを使い、 |
|
5875.1.1
by INADA Naoki
Update Japanese docs. |
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 |
.. |
|
4634.99.1
by Naoki INADA
import doc-ja rev90 |
295 |
vim: ft=rst tw=74 et |