Amazon Elastic Container Service で Redmine を動かしてみる

# はじめに
Macintosh を使用して ECS で Redmine を起動する手順をまとめてみました。
学習のためにとりあえず動かしてみる手順に過ぎないため、実運用で使用するためにはまだまだ改善が必要です。
# 開発PC（Mac）のdocker環境での動作検証
## Docker for Mac のインストール
[Docker Desktop for Mac](https://hub.docker.com/editions/community/docker-ce-desktop-mac)
## docker-compose のインストール
[Docker Compose のインストール](http://docs.docker.jp/compose/install.html)
## ファイルの作成
```
 mkdir ~/docker-redmine/postgresql/data
 mkdir ~/docker-redmine/redmine/data
 vi ~/docker-redmine/docker-compose.yml
```
```yml:docker-compose.yml
version: '2'

services:
  postgresql:
    image: sameersbn/postgresql:9.6-4
    environment:
    - DB_USER=redmine
    - DB_PASS=password
    - DB_NAME=redmine_production
    volumes:
    - ./postgresql/data:/var/lib/postgresql

  redmine:
    image: sameersbn/redmine:4.0.3-1
    depends_on:
    - postgresql
    environment:
    - TZ=Asia/Kolkata

    - DB_ADAPTER=postgresql
    - DB_HOST=postgresql
    - DB_PORT=5432
    - DB_USER=redmine
    - DB_PASS=password
    - DB_NAME=redmine_production

    - REDMINE_PORT=80
    - REDMINE_HTTPS=false
    - REDMINE_RELATIVE_URL_ROOT=
    - REDMINE_SECRET_TOKEN=

    - REDMINE_SUDO_MODE_ENABLED=false
    - REDMINE_SUDO_MODE_TIMEOUT=15

    - REDMINE_CONCURRENT_UPLOADS=2

    - REDMINE_BACKUP_SCHEDULE=
    - REDMINE_BACKUP_EXPIRY=
    - REDMINE_BACKUP_TIME=

    - SMTP_ENABLED=false
    - SMTP_METHOD=smtp
    - SMTP_DOMAIN=www.example.com
    - SMTP_HOST=smtp.gmail.com
    - SMTP_PORT=587
    - SMTP_USER=mailer@example.com
    - SMTP_PASS=password
    - SMTP_STARTTLS=true
    - SMTP_AUTHENTICATION=:login

    - IMAP_ENABLED=false
    - IMAP_HOST=imap.gmail.com
    - IMAP_PORT=993
    - IMAP_USER=mailer@example.com
    - IMAP_PASS=password
    - IMAP_SSL=true
    - IMAP_INTERVAL=30

    ports:
    - "80:80"
    links:
    - postgresql
    volumes:
    - ./redmine/data:/home/redmine/data
```
## コンテナ起動
```
cd ~/docker-redmine/
docker-compose build
docker-compose up
```
しばらく待って http://localhost/ でレッドマインのページが表示されたらOKです。
# Amazon Elastic Container Service での起動
## aws-cli のインストールと設定
[AWS CLIのインストール](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-install.html)
## ecs-cli のインストールと設定
[Amazon ECS CLI のインストール](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ECS_CLI_installation.html)
設定保存

```
ecs-cli configure --region ap-northeast-1 --cluster ecs-cli-test
```
## 設定ファイルの作成

```
vi ~/docker-redmine/docker-compose-ecs.yml
```

```yml:docker-compose-ecs.yml
version: '2'

services:
  postgresql:
    image: sameersbn/postgresql:9.6-4
    environment:
    - DB_USER=redmine
    - DB_PASS=password
    - DB_NAME=redmine_production

  redmine:
    image: sameersbn/redmine:4.0.3-1
    environment:
    - TZ=Asia/Kolkata

    - DB_ADAPTER=postgresql
    - DB_HOST=postgresql
    - DB_PORT=5432
    - DB_USER=redmine
    - DB_PASS=password
    - DB_NAME=redmine_production

    - REDMINE_PORT=80
    - REDMINE_HTTPS=false

    - REDMINE_SUDO_MODE_ENABLED=false
    - REDMINE_SUDO_MODE_TIMEOUT=15

    - REDMINE_CONCURRENT_UPLOADS=2

    - SMTP_ENABLED=false
    - SMTP_METHOD=smtp
    - SMTP_DOMAIN=www.example.com
    - SMTP_HOST=smtp.gmail.com
    - SMTP_PORT=587
    - SMTP_USER=mailer@example.com
    - SMTP_PASS=password
    - SMTP_STARTTLS=true
    - SMTP_AUTHENTICATION=:login

    - IMAP_ENABLED=false
    - IMAP_HOST=imap.gmail.com
    - IMAP_PORT=993
    - IMAP_USER=mailer@example.com
    - IMAP_PASS=password
    - IMAP_SSL=true
    - IMAP_INTERVAL=30

    ports:
    - "80:80"
    links:
    - postgresql
```
## EC2 キーペアの作成
[Amazon EC2 を使用してキーペアを作成する](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-key-pairs.html)
## クラスタの起動
Redmine を動かすためには最低このくらいは必要みたいです。
keypair には上記で作成済みのキーペア名を入力します。

```
ecs-cli up --keypair ec2-test-key --capability-iam --size 2 --instance-type t2.small
```
## タスクの登録
タスクの作成から実行までを行おうとしますが、必要な設定が足りていないためエラーで失敗します。

```
ecs-cli compose -f docker-compose-ecs.yml up
```
## AWSコンソールでのタスク修正
ECS のタスク定義:docker-redmine の詳細画面より「新しいリビジョンの作成」を実施。
docker-compose-ecs.yml にてコメントアウトしている内容をおもに登録します。
以下の登録を行い「作成」を実行。
### ボリュームの登録
```
ボリューム
名前
postgresql-vol
ドライバー
local
ボリュームタイプ
Docker
スコープ
task

名前
redmine-vol
ドライバー
local
ボリュームタイプ
Docker
スコープ
task
```

### コンテナ　postgresql　の設定修正
HEALTHCHECK Command の追加

```
CMD-SHELL,psql -d redmine_production -U redmine || exit 1
```

  - 環境：基本 のチェックボックスをOFF
  - ストレージとログ マウントポイントに postgresql-vol を選択
    - path: /var/lib/postgresql
  - Auto-configure CloudWatch Logs のチェックボックスを ON
  
### コンテナ redmine の設定修正
  -  STARTUP DEPENDENCY ORDERING 
    - Container name:postgresql
    - Condition:HEALTHY
  - ストレージとログ マウントポイントに redmine-vol を選択
    - path: /home/redmine/data
  - Auto-configure CloudWatch Logs のチェックボックスを ON
  
## AWSコンソールでのタスク実行
タスク定義:docker-redmine の最新版の詳細画面より、「タスクの実行」を実行。
EC2 起動タイプを使用してタスクを実行する。
起動したらタスクの詳細の redmine コンテナの詳細に外部リンクが表示されるのでクリック。
レッドマインの画面が無事出てきたらOK。
## クラスタの削除
以下のコマンドでクラスタに関連するリソースを全て削除します。
タスク定義ファイルは残ります。

```
ecs-cli down --force
```
# 改善点
AWS コンソールでの操作が面倒なので、コマンドラインで設定を完結できるように修正したいです。