Docker for Macを使ってMacに自分用のJIRAを建ててみる

2017年あけましておめでとうございます。何かしら新しいことをやろうかと [Atlassian JIRA](https://ja.atlassian.com/software/jira) を Docker を使って Mac上に立ち上げてみたのでその備忘録を残しておきます。

# 環境
## ホスト
- macOS Sierra 10.12.2
- Docker for Mac 1.13.0-rc4-beta34.1 (14853)

## ゲスト (JIRA)
- Debian GNU/Linux 8 (jessie)
- OpenJDK 1.8.0_102
- Atlassina JIRA 7.2.7

## ゲスト (PostgreSQL)
- Debian GNU/Linux 8 (jessie)
- PostgreSQL 9.4.10

# なぜDocker for Macを使った？
VPSに置こうと思ったのでとりあえず手元で構築手順をまとめるのが目的です。
まだVPSには置いてないのでその体で読んでください。

# 構築手順
## Docker for Macをインストール
[公式サイト](https://docs.docker.com/docker-for-mac/)からインストーラーをダウンロードしてインストールするか、[Homebrew cask](https://caskroom.github.io/)使いの人は

```sh
brew cask install docker
```

でインストールします。

インストール後 `/Applications/Docker.app` を起動します。

## Dockerイメージの選択
JIRAのDockerイメージはいろいろ[^jira-docker] あるんですが、今回は `jira docker` で最初に出てくる [cptactionhank/atlassian-jira](https://hub.docker.com/r/cptactionhank/atlassian-jira/) をそのまま使います。

データの保存先もいろんなSQLサーバーが使えますが今回は PostgreSQL を選びました。これもDockerコンテナで立ち上げます。
PostgreSQLにした理由は自分専用なので軽い方がいいな、と思ったくらいで特にありません。

## JIRA用のPostgreSQLをDockerで立ち上げる
JIRAのコンテナと連携するためのDBを用意します。今回はJIRAコンテナ専用のPostgreSQLを立ち上げます。

この執筆時はJIRAはPostgresql 9.4までしか今のところサポートしてないとのことなので、最新版ではなく9.4を使います。
`postgres:latest` イメージを使ってJIRAをセットアップするとわかるんですが、管理者ユーザー作成の画面で作成に失敗します。

https://github.com/cptactionhank/docker-atlassian-jira/issues/28

https://confluence.atlassian.com/adminjiraserver072/supported-platforms-828787550.html

コンソールから

```sh
docker run --name postgres-jira -e POSTGRES_PASSWORD=password -e POSTGRES_USER=jira -e POSTGRES_DB=jira --detach postgres:9.4
```

で立ち上げます。

`docker start postgres-jira` で起動できるように `--name` 引数で名前をつけておきます。
run時の環境変数にパスワード、ユーザー名、DB名を渡しています。

パスワードは適当につけましょう。ユーザー名 (`POSTGRES_USER`) 、データベース名 (`POSTGRES_DB`) はデフォルト値を使ってもいいですが今回は指定しています。

PostgreSQLの公式Dockerfileで利用できる環境変数は [PostgreSQLのHubページ](https://hub.docker.com/_/postgres/) を参照して下さい。

## JIRAをDockerで立ち上げる
Dockerfileによると、JIRAは8080ポートを使うとのこと。

自分のブラウザから8080ポートでアクセスできるようにして立ち上げてみます。

コンソールから

```sh
docker run --name jira --detach --publish 8080:8080 --link postgres-jira:postgres cptactionhank/atlassian-jira:latest
```

で立ち上げます。
`--link` でPostgreSQLを利用できるようにしておきます。
PostgreSQLと同様に `--name` で名前をつけておき、 `docker start jira` で起動できるようにしています。

立ち上がったらブラウザから http://localhost:8080/ を開きます。

## JIRAのセットアップ
### 初期画面
ブラウザで開くとこのような画面が表示されます。
※右上の「言語」メニューから日本語を選択しています。

![jira01.png](https://qiita-image-store.s3.amazonaws.com/0/8846/af329e8a-d2c6-453e-0713-5dfa95ffa35a.png "jira01.png")

「自分でセットアップする」を選択。

### データベースのセットアップ
![jira02.png](https://qiita-image-store.s3.amazonaws.com/0/8846/461de02b-eb04-7f6f-748a-689f29137b07.png "jira02.png")

データベースのセットアップでは「お使いのデータベース」を利用します。
なんでかわかりませんが、最初に「組み込み」を選んだときにはコンテナを再起動したときにエラーが出てJIRAが立ち上がらなかったためデータベースを利用します。

ホスト名は `docker inspect postgres-jira` を実行し、IPAddressとなっているものを入力します。今回は `172.17.0.2` でした。
ほんとは環境変数でJIRAの `docker run` 時に渡したりできるのでそれを使ってセットアップするべき？この辺はノウハウわかってないです。

### アプリケーションプロパティをセットアップ
![jira03.png](https://qiita-image-store.s3.amazonaws.com/0/8846/ca18e2ba-2278-4111-601d-d4a154378189.png "jira03.png")

別のJIRAからのデータのインポートも出来ますが、今回は新規なのでこのまま作成します。アプリケーションタイトル、ベースURLを適当に設定します。

### ライセンスキーの入力
![jira04.png](https://qiita-image-store.s3.amazonaws.com/0/8846/2653ef09-151e-21eb-0eab-3b6c85eaa7db.png "jira04.png")

所持しているライセンスキーを使うか、[マイアトラシアンのライセンス画面](https://my.atlassian.com/products/index) からJIRA Core用の評価用ライセンスを作成します。

### 管理者アカウントのセットアップ
![jira05.png](https://qiita-image-store.s3.amazonaws.com/0/8846/c29672b4-57b9-252d-70e6-98a28583f40c.png "jira05.png")

管理者アカウントを登録します。筆者は管理者＝唯一のユーザーとして利用することを想定して登録しました。

### メール通知のセットアップ
![jira06.png](https://qiita-image-store.s3.amazonaws.com/0/8846/125eb55c-b37c-7730-b96c-cf1c75b3493b.png "jira06.png")

通知をメールで送る設定。書いてある通りあとでセットアップも可能。SMTPサーバーが必要です。

今回はスキップで。

### Welcome to JIRA, (管理者)!
![jira07.png](https://qiita-image-store.s3.amazonaws.com/0/8846/f1834255-c4e3-f39e-3cf6-8f04f3abdfc4.png "jira07.png")

日本語を選んで終わり。
アバターを選び、プロジェクトを作成してからシステム設定をしましょう。

とりあえずシステム設定で時間帯をJSTに変更しました。

# JIRAの停止/起動
Docker compose化してないので、 `jira` -> `postgres` の順で停止するようにします。

- 停止するとき
	- `docker stop jira && docker stop postgres-jira`
- 起動するとき
	- `docker start postgres-jira && docker start jira`

`docker start` は `docker run` 時の引数のまま起動してくれる機能、という理解をしています。

# 終わりに
Docker for Macを使ってAtlassian JIRAをコンテナで立ち上げたときの備忘録を書きました。

Docker for Macはまだベータ版ですが、今回のように適当なLinuxコンテナを動かす分には問題なく動かすことが出来ました。

ただ [Docker for Macをアンインストールするとイメージやコンテナも削除される](http://qiita.com/pugiemonn/items/931c9f0bbd6d0936fcfa) とか [仮想ディスクがディスク容量を逼迫する](https://gendosu.jp/archives/3009) といった罠があるようですのでご注意下さい。

# 今後の予定
- Docker composeでJIRAとPostgreSQLをまとめる
- docker run時の `--restart` 引数でホスト起動時に自動的にJIRAが起動するようにする
- VPSサーバーに移行する

[^jira-docker]: PostgreSQL / MySQLとセットになっているものもあるので、そういうのを選ぶのもあり。