Github EnterpriseのBackup Utilitiesを使う

#使っていますか？Github Enterprise

かなり便利ですよね。
そんなわけで、、最近Github Entepriseの管理者とか、何故かやっちゃってるわけですよ。で、Backupしなきゃなーとおもって、tarballとか、rsyncとか、バックアップのコマンド1つずつsshごしに叩くとか、いろいろあるんですが、とりあえずGithub謹製のBackup Utilitesを使おうと思って、まあ簡単なんですけど、とりあえず書いておこうと思います。

Backup Utilities特徴ですが、差分のみをバックアップ取るらしいので従来のバックアップ方式よりもとても早い。また、メンテナスモードに入ることなくバックアップが取れます。
しかし、それも`11.10.341`以上のバージョンのみ。それ以下の場合は、全てのバックアップをtarballで取るだけのツールになってしまうようなのでご注意を。

see also [here](http://qiita.com/Morikuma_Works/items/c281ad87635fdddbbb72)

#手順
##事前準備
まず、Github Enterprise(以下GHE)を、最低でも`11.10.341`以上にアップデートしましょう。
ってか、常に最新版を追っておきましょう。最近[heartbleed](https://www.openssl.org/news/secadv_20140407.txt)とか、[shellshock](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6271)とか、うるさいし。GHEは大体1営業日程度でアップデートしてくれています。（確か。）
あと、Gitコマンドが使える鯖が必要です。MacユーザならきっとMacでもできるはず。自分はUbuntuが乗ってる鯖を適当に用意しました。
このバックアップ鯖がport22のsshでGHEと通信できる、公開鍵がマネジメントコンソールに登録されていることを確認します。
鍵がない場合は`ssh-keygen`で作ればいいじゃない！

##Backup Utilitiesを準備する
まずスクリプトを持ってくる。

```
git clone -b stable https://github.com/github/backup-utils.git
```

次に、cloneしたディレクトリに移動し、設定ファイルをコピーします。

```
cp backup.config-example backup.config
```

その後、お好みのエディタで`backup.config`を開きます。僕はvimで開きます。

```
vim backup.config
```

そうするとこんなかんじのファイルが見えるはず。

```
# GitHub Enterprise backup configuration file

# The hostname of the GitHub Enterprise appliance to back up. The host
# must be reachable via SSH from the backup host.
GHE_HOSTNAME=""

# Path to where backup data is stored. By default this is the "data"
# directory next to this file but can be set to an absolute path
# elsewhere for backing up to a separate partition / mount point.
GHE_DATA_DIR="data"

# The number of backup snapshots to retain. Old snapshots are pruned after each
# successful ghe-backup run. This option should be tuned based on the frequency
# of scheduled backup runs. If backups are scheduled hourly, snapshots will be
# available for the past N hours; if backups are scheduled daily, snapshots will
# be available for the past N days ...
GHE_NUM_SNAPSHOTS=10

# The hostname of the GitHub appliance to restore. If you've set up a separate
# GitHub appliance to act as a standby for recovery, specify its IP or hostname
# here. The host to restore to may also be specified directly when running
# ghe-restore so use of this variable isn't strictly required.
#
#GHE_RESTORE_HOST="github-standby.example.com"
```

`GHE_HOSTNAME`を自分のGHEのホストに変更します。

```
GHE_HOSTNAME="10.0.0.1"
```

必要であれば、`GHE_DATA_DIR`とかも設定しますが、まあデフォルトで問題ないです。

##接続確認する
`bin`ディレクトリにある`ghe-host-check`をまずやりましょう。これは設定と経路確保ができるかどうかを確認してくれます。

```
./bin/ghe-host-check
```

成功したら

```
```

のように表示されます。バージョン番号も表示してくれるので再度GHEのバージョンを確認しましょう。

##バックアップを取る
`ghe-backup`でバックアップを取れます。こんなかんじです。

```
./bin/ghe-backup
```

あとは待つだけ！sshの秘密鍵のパスフレーズを何回も求められます。ACLでinbound接続を許可してないようなネットワークであれば、パスフレーズなしのsshの鍵を作ってもいいかもですね。でも自己責任で。

##cronとかに登録する
誰も使ってなさそうなときに走るように登録しましょう！下記は1日1回、2:00AMに走るようにしたcronの例です。

```
00 2 * * * /path/to/backup-utils/bin/ghe-backup
```

##バックアップからリストアする

何はともあれ、SSHの鍵をリストアしたいGHEのホストに登録しましょう。リストア自体もSSHを通して行われるためです。

次に経路を確認します。例として`10.0.0.1`をリストアしたいGHEのホストだとします。

```
.bin/ghe-host-check 10.0.0.1
```

その後、GHEをマネジメントコンソールからメンテナンスモードにして、

```
.bin/ghe-restore restore-hostname
```

これでしばらく待って、完了したらメンテナスモードを解除します。

#まとめ
便利！簡単！

#参考文献
https://enterprise.github.com/help/articles/backing-up-github-enterprise