DEISでJavaアプリケーションを動かしてみたよ（DevOpsだね）

![deis-logo.png](https://qiita-image-store.s3.amazonaws.com/0/3553/ba74ffa3-6a70-0aaa-e799-0a54691a9267.png)

## Deisとは
DeisはオープンソースのPaaS。プライベートHerokuみたいなやつでDockerとかCoreOSで動く。

DeisはアプリのデプロイをDockerfileでできる。あとHerokuのbuildpackでも可能。

まーそんな感じなのでCI/CDが簡単に実現できるわけですね。
あと簡単にスケールしたりもできるようです。

## Deisのアーキテクチャ

Deisは7個のコンポーネントでできています。

### Controller
Deisの頭脳となる部分でDjangoとCeleryでできています。
クラスタの管理やアプリの管理などをする部分です。

### Database

データベースはPostgreSQLを使っています。

### Cache
キャッシュはRedisです。

### Builder
アプリケーションをビルドする部分でGitサーバになっています。
git pushされるとビルドされます。

### Registry
Dockerイメージを配置する部分。AmazonS3とかOpenStackStorageが良く使われるみたいです。

### Log Server
rsyslogを使ったログ集積部分。

### Router
アプリケーションへのトラフィックをルーティングする部分。Nginxを使っている。

## まー前置きはさておき

実際にうごかしてみます。
今回はMacで動かしてみるサンプルです。

### 事前準備
Deisを動かすために必要なものをインストールしてください。

* [Vagrant](http://www.vagrantup.com/downloads.html)と[VitualBox](https://www.virtualbox.org/wiki/Downloads)を入れましょう
* [Docker](https://www.docker.io/gettingstarted/)もインストールしましょう
* あとpythonとpipもいれましょう
* fleetcltのv0.3.2をインストールしましょう。

fleetcltはCoreOSをゴニョゴニョするためのやつですが、[この](https://github.com/coreos/fleet/releases)ページからDLして

```
$ cp Downloads/fleet-v0.3.2-darwin-amd64/fleetctl /usr/local/bin/
```
こんなかんじで動かしておきます。

## Controllerの用意
まずはControllerの用意をします。

```
$ git clone https://github.com/deis/deis.git      # Deisのクローン
$ cd deis && vagrant up                           # DeisのVagrantを起動
$ ssh-add ~/.vagrant.d/insecure_private_key       # SSHの設定
$ export DOCKER_HOST=tcp://172.17.8.100:4243      # dockerのおまじないてきなやつ
$ export FLEETCTL_TUNNEL=172.17.8.100             # fleetctlの設定
$ make pull && make run                           # これで起動する
$ sudo pip install deis                           # deisコマンドのインストール
$ deis register http://local.deisapp.com:8000     # コントローラに対してユーザの設定をする
$ deis keys:add                                   # コントローラにたいするSSHの設定
```

`http://local.deisapp.com:8000`このURLにアクセスすると無事Controllerが表示されるはずです。
先ほど登録したユーザでログインしてみてください。

![deis-dashboard.png](https://qiita-image-store.s3.amazonaws.com/0/3553/d05a0900-6e4c-01ee-2233-b6ed5c99aeea.png)

ダッシュボードが表示できれば成功です。

## クラスタの初期化
とりあえず`dev`クラスタを作ります。
```
$ deis clusters:create dev local.deisapp.com --hosts=local.deisapp.com --auth=~/.vagrant.d/insecure_private_key
```

![deis-cluster.png](https://qiita-image-store.s3.amazonaws.com/0/3553/8065c235-6026-8c77-ebdf-af59daf267a7.png)

こんな感じでクラスタができます。

### `deis clusters:create`の引数の解説
* 第一引数はクラスタの名前
* 第二引数はクラスタのホスト名、実際にアプリがデプロイされると`balancing-giraffe.local.deisapp.com`みたいになる
* `--hosts`はclusterのメンバー。カンマ区切りで複数記述可能。
* `--auth`はSSHkeyの設定。


## アプリのデプロイ

前述しましたがDeisはDockerfileかBuildpackの形式のアプリのデプロイができます。
Deisの[Github organization](https://github.com/deis)にサンプルが沢山あるので使ってみました。

### DockerfileでPython

まずはDockerfile形式でPythonのwebサーバを動かして見るサンプル

```
$ git clone https://github.com/deis/example-dockerfile-python.git #サンプルをクローン
$ cd example-dockerfile-python
$ deis create #アプリの登録、これでControllerにアプリが出てきます
$ git push deis master #pushするとあら不思議、ビルドされてデプロイされます。
```

ビルドが終わると下記みたいな表示がでます。

```
remote: -----> queens-quadrant deployed to Deis
remote:        http://queens-quadrant.local.deisapp.com
```

このURLにアクセスすると`Powered by Deis`と表示されるはずです。

簡単！！

### BuildpackスタイルでJavaアプリ

Buildpackのサンプルもやってみます。

```
$ git clone it clone https://github.com/deis/example-java-jetty.git #サンプルをクローン
$ cd example-java-jetty
$ deis create #アプリの登録、これでControllerにアプリが出てきます
$ git push deis master #pushするとあら不思議、ビルドされてデプロイされます。
```

まー同じですね。

こんな感じでdeisのビルドサーバにPushすると自動的にビルドされてデプロイされる状態になりました。
便利ですねー

これならプライベートクラウドもってる企業とかはフル活用できそうですね〜

おしまい