nginx、gunicorn、supervisorを使用して水銀リポジトリをホストする

画像 水銀リポジトリをホストするのに十分な方法がありますが、次の理由からこのようなオプションを作成しました。

  1. nginx:少し食べて、速く動作します- 速度
  2. スーパーバイザー:プロセスを監視し、もしあれば再起動します- 信頼性
  3. gunicorn:wsgi、優れたカスタマイズオプション- 効率
さらに、 私はdjangoで開発し、同じバンドルでサイトを立ち上げました。第4の理由があります-統合、そしてそれは非常に便利なことです。



トピックに興味がある場合は、特定の指示と構成がカットされています。



さらに、mercurial、nginx、gunicorn、supervisorがすでにインストールされていることを前提としています。 私はUbuntu 10.04を使用します。これは、mercurial、nginx、supervisorは標準リポジトリで利用でき、gunicornにはppaがあります。



mercurialの一部として提供されるhgwebは、リポジトリを操作するためのメインスクリプトとして使用され、私たちはそれから踊ります。



リポジトリをディレクトリ/ home / hgdataに保存します。 その理由は、バックアップ設定の簡素化です。 すべて/ホームが保存され、たとえば、個別のディレクトリを指定する必要はありません。 説明されているすべてのスクリプトと構成は、同じディレクトリ / home / hgdataに保存されます。



最初のファイルは、名前が示すように、hgwebの構成であるhgweb.configです。

Copy Source | Copy HTML<br/>[collections]<br/>/ = /home/hgdata <br/>



彼は、リポジトリが/ home / hgdataに保存されていることをhgwebに伝えます。あなたはそこでリポジトリを探す必要があります。



さらに、 wsgiサーバーを上げると、水銀スクリプトhgwebをwsgiに変換する必要があります。 これを行うには、hgwebapp.pyスクリプトを使用します。

Copy Source | Copy HTML<br/> #!/usr/bin/env python <br/> import os<br/> import sys<br/> from mercurial.hgweb.hgwebdir_mod import hgwebdir<br/> from mercurial.hgweb.request import wsgiapplication<br/> os .environ[ "HGENCODING" ] = "UTF-8" <br/> def make_web_app ():<br/> return hgwebdir( "/home/hgdata/hgweb.config" )<br/> def application (environ, start_response):<br/> environ[ 'wsgi.url_scheme' ] = environ.get( 'HTTP_X_URL_SCHEME' , 'http' )<br/> # nginx wrap proxy headers with HTTP <br/> environ[ 'REMOTE_USER' ] = environ.get( 'HTTP_REMOTE_USER' , '' )<br/> app = wsgiapplication( make_web_app )<br/> return app(environ, start_response) <br/>



このスクリプトは、gunicornで既に開始できます。 gunicornの設定はhgweb.confと呼ばれます:
Copy Source | Copy HTML<br/>[program:hgweb]<br/>command=/usr/bin/gunicorn -b 127.0.0.1:8080 hgwebapp:application<br/>environment=PYTHONPATH= '/home/hgdata' <br/>directory=/home/hgdata<br/> user =www- data <br/>autostart= true <br/>autorestart= true <br/>startsecs=10<br/>redirect_stderr= true <br/>stdout_logfile=/ var /log/supervisor/hgweb.gunicorn.log<br/>



この設定へのシンボリックリンクを/etc/supervisor/conf.dに置くと、すでに実行できます。 「コントロールパネル」スーパバイザに進みます:sudo Supervisorctlおよびupdateコマンドを指定します。 スーパーバイザーはconfigディレクトリを確認し、新しいディレクトリを見つけて、hgwebappスクリプトを使用してgunicornサーバーを起動します。 その後、mercurialサーバーはアドレス127.0.0.1のポート8080でハングし、nginxを使用して設定します。



nginx構成ファイルで、すべてを第3レベルのドメインに登録し、次のように呼び出しています:hg.somewebsite.com

Copy Source | Copy HTML<br/>upstream app_server_hgweb {<br/> server 127.0.0.1:8080 fail_timeout=0;<br/>}<br/>server {<br/> listen XXXX:80;<br/> server_name hg.somewebsite.com;<br/> location / {<br/> auth_basic "Mercurial repository";<br/> auth_basic_user_file /home/hgdata/auth;<br/> proxy_set_header X-Forwarded- For $proxy_add_x_forwarded_for;<br/> proxy_set_header Host $http_host;<br/> proxy_set_header remote_addr $remote_addr;<br/> proxy_set_header remote_user $remote_user;<br/> proxy_redirect off ;<br/> if (!-f $request_filename) {<br/> proxy_pass app_server_hgweb;<br/> break ;<br/> }<br/> }<br/>}<br/>



構成からわかるように、ユーザーはファイル/ home / hgdata / authを使用してユーザーを認証します。このファイルでは、 通常のユーザーとハッシュのパスワードのペアが使用されます 。 ユーザー名はwsgiサーバーに渡され、hgwebを使用して、ユーザーに与えるアクセス権を決定します。



これは、Webセクションのhgrcファイル(リポジトリの.hgサブディレクトリにあります)で構成されます。 それは非常に簡単に登録されます:

Copy Source | Copy HTML<br/>[web]<br/>contact = Organization name<br/>description = Repository description<br/>style = gitweb<br/>allow_read = user1 user2 user3<br/>allow_push = user1<br/>push_ssl = false <br/>allow_archive = bz2 gz zip <br/>



この場合、user1のみがリポジトリにアップロードでき、3人がそれを読み取ることができます。 このリポジトリは匿名で閉じられています。 アクセス設定の詳細はこちら



結論として、ファイル/home/hgdata/hg.somewebsite.comから/ etc / nginx / sites-enabledディレクトリへのシンボリックリンクを作成し、nginxを再起動する必要があります。その後、すべてが機能するはずです。 以下のことに注意する必要があります ユーザーはnginx構成www-dataに登録されているため、www-dataは/ home / hgdataのリポジトリに対するすべての権限を持っている必要があります。そうでない場合、そこに書き込むことができません。



それだけです。リポジトリはhttp経由でアクセスできる必要があります。 この記事があなたの仕事に役立つことを願っています。 私はコメントや提案を聞いてうれしいです。



All Articles