RhodeCodeがまたOSSになったそうですね

[RhodeCode](https://rhodecode.com "RhodeCode")、2.0.0になる前だったかは自分用のMercurialサーバとして利用していました。
が、Enterpriseになってなんだかややこしくなったので[Kallithea](https://kallithea-scm.org "Kallithea")に逃げておりました。

そしたら2016年6月あたりからRhodeCode CEというオープンソース版ができ、さらにSubversionも管理できるようになったようです。

デモもあるので眺めてみても良いでしょう。
https://try.rhodecode.com/

というわけで、せめてインストールくらいはしてやろうとしたメモです。
なお、構成のところは実際インストールとかしてみてこういうことなのかなって思いながら書いたので間違ってたら申し訳ありません。

環境は以下の通りです。

- さくらVPS
- CentOS 7.2
- RhodeCode 4.1.2

# RhodeCodeの構成
RhodeCodeは大きく5つに分かれているようです。

1. コマンドライン
``rccontrol``等のコマンドラインツールです。RhodeCode自体の起動や停止、インスタンスの作成、起動、停止などを行います。

2. Control (supervisord)
RhodeCodeで基幹のプロセスです。``supervisord``と``rccontrol``がやり取りをしてインスタンスの制御を行います。

3. VCSServer
VCSのサーバ本体のインスタンスになります。``rccontrol``から``supervisord``を介して制御を行います。

4. Community Edition (CE)
オープンソース版RhodeCodeのWebフロントエンドです。ブラウザからアクセスできるインスタンスで、アクセスすると1.6あたりとは違ったフラットな画面が表示されます。後ろではVCSServerと通信し、リポジトリの操作なんかを行います。

5. Enterprise Edition (EE)
有償版ですね。僕は使いません。

インストールの流れとしては、

1. Controlのインストール
2. VCSServerインスタンスを作成
3. Community Editionインスタンスを作成

という感じです。Controlのインストール時にコマンドラインツールもインストールされます。

# Controlインストール
まずはRhodeCodeを実際に動かすユーザを作成します。

```console:console
# useradd -d /opt/rhodecode -m rhodecode
# su rhodecode
```

続いてインストーラのダウンロードを行います。

```console:console
$ wget --content-disposition https://dls-eu.rhodecode.com/dls/NzA2MjdhN2E2ODYxNzY2NzZjNDA2NTc1NjI3MTcyNzA2MjcxNzIyZTcwNjI3YQ==/rhodecode-control/latest-linux-ce
```

* URLは変わる可能性があります。
* 2016/06/30時点のURLです。
* https://rhodecode.com/download/community から参照できます。

インストーラを実行します。

```console:console
$ chmod +x RhodeCode-installer-linux-build20160616_2350
$ ./RhodeCode-installer-linux-build20160616_2350
Do you accept the RhodeCode Control license?
Press [Y] to accept license and [V] to view license text: Y

20%  [ ###############------------------------------------ ]

Installation successful!
```
ライセンスを承諾するか表示するか聞かれるので、``Y``を押して承諾します。ちゃんと確認したい方は``V``を押しましょう。

``Installation successful!``が表示されたらControlのインストールが完了なので、試しにインスタンスのステータスを表示するコマンドを実行してみます。

```console:console
$ rccontrol status
No instance exist.
```

インスタンスの作成はまだやってないので、ありませーん言われます。

# VCSServerインストール
VCSServerのインスタンスを作成します。

```console:console
$ rccontrol install VCSServer
Do you accept the RhodeCode VCSServer license?
Press [Y] to accept license and [V] to view license text: Y
IP to start the server on [127.0.0.1]: (そのままEnter)
Port for the server to start [10001]: (そのままEnter)
Creating new instance: vcsserver-1
Installing RhodeCode VCSServer
Downloading https://dls.rhodecode.com/linux/RhodeCodeVCSServer-4.1.2+x86_64-linux_build20160616_2350.tar.bz2 ...
Extracting VCSServer ...
Configuring RhodeCode VCS Server ...
Saving accepted license locally under /opt/rhodecode/.rccontrol/vcsserver-1
Supervisord state is: RUNNING
Added process group vcsserver-1
```
待ち受けIPアドレスやポート番号は、各環境に合わせて入力してください。通常はそのままでもよさそうです。

さくらVPSの一番安いやつという環境のせいなのかタイミングなのか、VCSServerのダウンロードが非常に時間がかかりました。URLを自PCのブラウザに貼り付けて直接ダウンロード、SFTPかなんかでサーバにアップロードしてオフラインモードで実行したほうが早かったです。

ダウンロードしたファイルを``/opt/rhodecode/.rccontrol/cache``に置いておきます。そして以下のコマンドでオフラインモードで実行ができます。

```console:console
$ rccontrol install VCSServer --offline
```

ステータスを確認してみましょう。

```console:console
$ rccontrol status

 - NAME: vcsserver-1
 - STATUS: RUNNING
 - TYPE: VCSServer
 - VERSION: 4.1.2
 - URL: http://127.0.0.1:10001
```

# Community Editionのインストール
続いてCommunity Editionのインスタンスを作成します。

```console:console
$ rccontrol install Community
Do you accept the RhodeCode Community license?
Press [Y] to accept license and [V] to view license text: Y
Username [admin]: (管理者ユーザ名を入力してEnter)
Password (min 6 chars): (パスワードを入力してEnter)
Repeat for confirmation: (パスワードを入力してEnter)
Email: (メールアドレスを入力してEnter)
Repositories location [/opt/rhodecode/repos]: (デフォルトでよければそのままEnter)
IP to start the RhodeCode Community server on [127.0.0.1]: (デフォルトでよければそのままEnter)
Port for the RhodeCode Community server to use [10002]: (デフォルトでよければそのままEnter)
Database type - [s]qlite, [m]ysql, [p]ostresql: (SQLiteがいいのでsをタイプ)
SQLite selected
Creating new instance: community-1
Installing RhodeCode Community
Downloading https://dls.rhodecode.com/linux/RhodeCodeCommunity-4.1.2+x86_64-linux_build20160616_2350.tar.bz2 ...
Extracting Community ...
Configuring RhodeCode Community ...
Configuration of RhodeCode Community passed.
Saving accepted license locally under /opt/rhodecode/.rccontrol/community-1
Supervisord state is: RUNNING
Added process group community-1
```

ここでは、Webでアクセスしたときの管理者ユーザ・パスワードなどが聞かれます。ナイスなものを入力しましょう。

リポジトリを配置しているパスは、既存のものがあればそれを指定してもよいでしょう。ただ、最初に作成したrhodecodeユーザの権限でアクセスするので、対象のディレクトリやファイルのパーミッションには気を付けましょう。僕はミスった。

また、データベースについても聞かれます。PostgreSQLやMySQLも利用できるようですが、今回特に用意はしておらずSQLiteでいいやってことでSQLiteを選択しています。他を選ぶとまた入力項目が増えると思いますが試してないのでわからず。

VCSServerの時と同様、ダウンロードがとても遅かったです。もちろんオフラインモードでの実行はできるので、もし遅ければ試すと良いかなと思います。

またステータスを確認してみます。

```console:console
$ rccontrol status

 - NAME: community-1
 - STATUS: RUNNING
 - TYPE: Community
 - VERSION: 4.1.2
 - VCS: vcsserver-1
 - URL: http://127.0.0.1:10002

 - NAME: vcsserver-1
 - STATUS: RUNNING
 - TYPE: VCSServer
 - VERSION: 4.1.2
 - URL: http://127.0.0.1:10001
```

作成したCommunityのインスタンスが増えました。

## インタフェースを日本語にする。
このままではすべて英語になっているので、できれば日本語がいいです。まぁ所々英語のままなんですけどね。

```ini:/opt/rhodecode/.rccontrol/community-1/rhodecode.ini
[app:main]
lang = ja
```

``[app:main]``セクションに``lang``の定義がたしかあるので、``ja``を指定します。
その後、インスタンスを再起動します。

```console:console
$ rccontrol restart community-1
```

あとはブラウザからアクセスすると、昔に比べるとがらっと変わった画面が表示されます。
ただしURLが http://127.0.0.1:10002/ となるのでNginxでリバースプロキシかますなりインストール時にいい感じに待ち受けるようにするなり、状況に応じて必要です。
ちなみに僕はさくらVPS内に構築したのでNginxでリバースプロキシしました。

# 最後に
少しだけ使ってはみたのですが、正直、こう、重いですね…。
インスタンスとしてCommunityとVCSServerと分かれているせいか、さくらVPSの一番安いプランがそうさせるのか、はたまた別の原因か。Kallitheaを使っているときに比べてどうにもレスポンスがうーんって感じます。

あとデザインはEnterpriseになる前の濃い青基調なRhodeCodeのほうが好きかなと。これは完全に好みの問題ですが。

機能フル活用するワケでもないので、Kallitheaでもいいかな感…。