Mercurial/Git 両刀リポジトリサーバ Kallithea

自前サーバにGitBucket を入れて クライアント側でhg-gitを入れたMercurialで使っていたのだが、 Mercurial を4.8にしたらhg-gitが動かなくなってしまった。え? 困る。

サーバ側でMercurial対応しているのがやっぱりないとこわいな。 ってことで久々に Kallithea を試してみたら pip コマンドであっさり行けた。下記のページにあるとおり、 pip コマンド一発で入った。

特徴

GitBucketと比較しての感想。

導入(daemontoolsの場合)

うちの場合は https 化したサーバの陰で /ka というパス名で動かしたいので、 リバースプロクシで設定した。これには以下のようにする(Apacheの場合)。

  1. httpd.conf(ssl.conf)で
    <Location /ka>
      ProxyPass http://127.0.0.1:5000/ka
      ProxyPassReverse http://127.0.0.1:5000/ka
      SetEnvIf X-Url-Scheme https HTTPS=1
    </Location>
    
  2. kallithea用の設定ファイル(.iniファイル)で
    [filter:proxy-prefix]
    use = egg:PasteDeploy#prefix
    prefix = /ka
    
    [app:main]
    use = egg:kallithea
    ## enable proxy prefix middleware
    filter-with = proxy-prefix
    force_https = true
    

ついでにこのサーバ専用のユーザを作ってchroot下で動かしておこう。 もちろん、daemontools で。 以下の例は paster setup-db kallithea.ini でデータディレクトリを /var/kallithea に設定した場合のもの。

Apache VirtualHost にする場合

と、ここまで書いて /ka だとパス名が長くなるので Kallithea 専用の Virtualhost にしーようっと。 https://pythonhosted.org/Kallithea/setup.html にあるように、ProxyPreserveHost On を忘れずに。ただし、https の鍵を Let's Encrypt からもらうときにはそのホスト名の /.well-known/acme-challenge でアクセスが来るので そのパス名だけはプロクシ除外しそのまま特定のディレクトリに導き、 それ以外を ReverseProxy に渡すのはこんな感じ。

<Virtualhost *>
 ServerName バーチャルホスト名:443
 PrroxyPass /.well-known/acme-challenge !
 ProxyPassReverse /.well-known/acme-challenge !
 Alias /.well-known/acme-challenge どこかのディレクトリ
 PrroxyPass / http://localhost:5000/
 PrroxyPassReverse / http://localhost:5000/
 ProxyPreserveHost On
 SetEnvIf X-Url-Scheme https HTTPS=1
</Virtualhost>