自前サーバにGitBucket を入れて クライアント側でhg-gitを入れたMercurialで使っていたのだが、 Mercurial を4.8にしたらhg-gitが動かなくなってしまった。え? 困る。
サーバ側でMercurial対応しているのがやっぱりないとこわいな。 ってことで久々に Kallithea を試してみたら pip コマンドであっさり行けた。下記のページにあるとおり、 pip コマンド一発で入った。
GitBucketと比較しての感想。
GitBucketはJava(Scala)で動く分オーバーヘッドがあって GitHub並の重厚感があるが、Python単一プロセスなのでヒュンヒュン軽い。 プロセスもGitBucketのjavaプロセスが約2000MBのところ、Kallithea はpythonプロセス150MBくらい。圧倒的に軽量。
DBがSQLite3でしっかり動くのでデータディレクトリ以下をまるまる バックアップ取ればホスト移行も簡単。
これは利害得失あり。GitBucket/GitHub のデフォルト指向が ゲスト公開なのに対し、Kallithea はむしろUnixのユーザ/グループ/ファ イル/ディレクトリのchmod/umaskによる管理に近い。
「みんなで使おう」と考えて、自動サインインを有効化して使う場合、 GitBucket ではログイン後すぐリポジトリ作成できるが、Kallithea は、 書き込み可能なリポジトリ(グループ)を作っておかないとできない。 もしくはトップレベルに書き込みできるように設定する必要がある。
つまり、 KallitheaのURL/ユーザ名/リポジトリ名 としたい場合、ユーザ名 となるリポジトリグループを 管理者が作ってあげてそのユーザに書き込み権限を出しておく必要がある。
うちの場合は https 化したサーバの陰で /ka というパス名で動かしたいので、 リバースプロクシで設定した。これには以下のようにする(Apacheの場合)。
<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>
[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 に設定した場合のもの。
pw useradd kallithea -d /var/kallithea
chroot空間が /webroot なら /webroot/etc/master.passwd にも入れておく。
#!/bin/sh exec 2>&1 KAdir=/var/kallithea PATH=/path/to/python/bin:$PATH exec chroot /webroot setuidgid kallithea paster serve $KAdir/kallithea.ini
#!/bin/sh exec setuidgid nobody multilog t !tai64nlocal s499999 n10 ./main
mkdir -p log/main chown nobody log/main
chmod +x run log/run ./run
うまく動いたら C-c で停めて
ln -s $PWD /service
と、ここまで書いて /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>