deisへのアプリケーションデプロイ

deisへのアプリケーションデプロイについて調べたのでメモ。

## deis CLIのインストール

https://deis.com/docs/workflow/quickstart/install-cli-tools/

```
$ curl https://deis.io/deis-cli/install-v2.sh | sh
Downloading deis-stable-darwin-amd64 From Google Cloud Storage...

The Deis Workflow CLI (deis) is now available in your current directory.

To learn more about Deis Workflow, execute:

    $ ./deis --help

```

これでカレントディレクトリに`deis`バイナリができるので、他のディレクトリからでも実行できるようにする。

```
$ sudo mv $PWD/deis /usr/local/bin/deis
```

```
$ deis version
v2.16.0
```

## deisへのアカウント登録

```
$ ./deis auth:register http://xxxxxxxx/
username: bwtakacy
password: 
password (confirm): 
email: 
Registered bwtakacy
Logged in as bwtakacy
Configuration file written to /Users/bwtakacy/.deis/client.json
```

## サンプルアプリケーションのデプロイ

適当なサンプルを見つけてデプロイしてみる。

```
$ git clone https://github.com/deis/example-dockerfile-python
$ cd example-dockerfile-python/
```

deisへのアプリケーション登録。

```
$ deis create
Creating Application... done, created unbent-jokester
Git remote deis successfully created for app unbent-jokester.
```

このとき、アプリケーション名を明示的に指定しないと勝手に振られる。
今回だと `unbent-jokester`

アプリケーションにHTTPでアクセスできるように`PORT`をdeisに設定

```
$ deis config:set PORT=5000 -a unbent-jokester
Creating config... done

=== unbent-jokester Config
PORT      5000
```

deis にgit push するためのSSH鍵登録
```
$ deis keys:add
```

アプリケーションのデプロイ。

```
$ git push deis master
Counting objects: 68, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (66/66), done.
Writing objects: 100% (68/68), 12.69 KiB | 0 bytes/s, done.
Total 68 (delta 15), reused 0 (delta 0)
Starting build... but first, coffee!
Step 1 : FROM gliderlabs/alpine:3.4
 ---> bce0a5935f2d
Step 2 : RUN apk-install python
 ---> Running in 39b182ebd73e
fetch http://alpine.gliderlabs.com/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
fetch http://alpine.gliderlabs.com/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
(1/10) Installing libbz2 (1.0.6-r5)
(2/10) Installing expat (2.2.0-r1)
(3/10) Installing libffi (3.2.1-r2)
(4/10) Installing gdbm (1.11-r1)
(5/10) Installing ncurses-terminfo-base (6.0-r8)
(6/10) Installing ncurses-terminfo (6.0-r8)
(7/10) Installing ncurses-libs (6.0-r8)
(8/10) Installing readline (6.3.008-r4)
(9/10) Installing sqlite-libs (3.13.0-r0)
(10/10) Installing python (2.7.12-r0)
Executing busybox-1.24.2-r13.trigger
OK: 52 MiB in 21 packages
 ---> 20f585223e30
Removing intermediate container 39b182ebd73e
Step 3 : ADD . /app
 ---> 4fb02e9751e9
Removing intermediate container 6e8943ff69ba
Step 4 : WORKDIR /app
 ---> Running in 7da5d19981da
 ---> 081a91eb3d6d
Removing intermediate container 7da5d19981da
Step 5 : CMD python -m SimpleHTTPServer 5000
 ---> Running in 80fb8c715eee
 ---> 53340a72183e
Removing intermediate container 80fb8c715eee
Step 6 : EXPOSE 5000
 ---> Running in c75ebd04d132
 ---> 21f465826ef3
Removing intermediate container c75ebd04d132
Successfully built 21f465826ef3
Pushing to registry
Build complete.
Launching App...
...
...
Done, unbent-jokester:v3 deployed to Workflow

Use 'deis open' to view this application in your browser

To learn more, use 'deis help' or visit https://deis.com/

```

`deis open`でアプリケーションにブラウザでアクセスできる。

```
$ deis open
```

```
$ deis releases
=== unbent-jokester Releases
v3	2017-09-06T14:20:43Z	bwtakacy deployed 0b416f0
v2	2017-09-06T14:18:32Z	bwtakacy added PORT
v1	2017-09-06T14:14:11Z	bwtakacy created initial release
```

```
$ deis info
=== unbent-jokester Application
updated:  2017-09-06T14:20:43Z
uuid:     d7ea5ea0-3457-4832-b07a-06d5145a3d34
created:  2017-09-06T14:14:11Z
url:      unbent-jokester.xxxxxxxxxxxxx
owner:    bwtakacy
id:       unbent-jokester

=== unbent-jokester Processes
--- cmd:
unbent-jokester-cmd-1501091100-bd1hf up (v3)

=== unbent-jokester Domains
unbent-jokester

=== unbent-jokester Label
No labels found.
```

アプリケーションの削除は

```
$ deis destroy
 !    WARNING: Potentially Destructive Action
 !    This command will destroy the application: unbent-jokester
 !    To proceed, type "unbent-jokester" or re-run this command with --confirm=unbent-jokester

> unbent-jokester
Destroying unbent-jokester...
done in 0s
Git remotes for app unbent-jokester removed.
```