Phoenix製のOSS版のTrelloをdocker-composeで作ってみたよ

さくっと試してみたい人は、2-1をご覧ください。

## 1. やりたいこと

ElixirかつPhoenixのアプリケーションを探してソースコードリーディングをしてみたかったです。
GitHubを徘徊していたら下記を見つけました！

* https://github.com/bigardone/phoenix-trello

[Trello](https://trello.com/)をphoenixで作成しているみたいですね＾＾

GitLabやMattermost等と違って、堂々と[Trello]と記載してしまっているようです。

## 2. ともあれまずは動くのか見てみたかったのでDocker化してみた

### 2-1. 起動スクリプト置き場

以下に今回作成した`docker-compose.yml`を配置しました。

* https://github.com/letusfly85/docker-phoenix-trello

起動方法は以下のとおりです。

環境変数を設定します

```
export POSTGRES_USER=postgres
export POSTGRES_PASSWORD=postgres
```

フォアグラウンドで動かしたければ

```
docker-compose up
```

バックグラウンドで動かしたければ

```
docker-compose up -d
```

で

http://localhost:8000

の画面で利用が可能になります。

### 2-2. 動かした時の画面キャプチャ

![スクリーンショット 2016-03-14 10.27.33.png](https://qiita-image-store.s3.amazonaws.com/0/49547/f225e1f0-3e99-a148-44c0-b7a32c05f65f.png)

![スクリーンショット 2016-03-14 10.42.11.png](https://qiita-image-store.s3.amazonaws.com/0/49547/adb1e3fb-139f-f4ad-56e2-43f0d365b8c0.png)

![スクリーンショット 2016-03-14 10.42.59.png](https://qiita-image-store.s3.amazonaws.com/0/49547/bf7454f9-146f-9e3c-1267-da384f9e8900.png)

日本語の入力はできないみたいですね＾＾；
ログで、〜invliad  charactert〜みたいな出力が出ちゃいます。

## 3. phoenix-trelloの技術要素

[README](https://github.com/bigardone/phoenix-trello/blob/master/README.md)を読むと以下のとおりでした。

* Elixir
* Phoenix
* nodejs
* postgresql

また、起動するにあたっては、migrationが事前に必要だよ、とありますので、RoR感覚でいけるかな、と試してみることにしました。

## 4. docker-compose.ymlの作成フロー

1. phoenix-trelloのアプリケーションのイメージを作成
2. postgresqlのイメージを流用
3. 上記２つをdocker-compose.ymlでリンキングさせるように設定

### 4-1. phoenix-trelloのアプリケーションのイメージを作成

[Dockerfile](https://github.com/letusfly85/docker-phoenix-trello/blob/master/Dockerfile)は以下のとおりです。

```Dockerfile
FROM tylerwaitt/phoenix

RUN git clone https://github.com/bigardone/phoenix-trello.git && \
    cd phoenix-trello && \
    yes | mix deps.get && \
    npm install webpack && \
    npm install

RUN apt-get update && \
    apt-get install -y erlang-dev build-essential

RUN wget https://raw.github.com/wiki/rebar/rebar/rebar && \
    mkdir -p /root/.mix && \
    cp rebar /root/.mix/rebar && \
    chmod u+x /root/.mix/rebar

ADD docker.exs phoenix-trello/config/

ADD docker-run.sh phoenix-trello/bin/

RUN chmod u+x phoenix-trello/bin/docker-run.sh

CMD ["phoenix-trello/bin/docker-run.sh"]
```

rebarとかは、Phoenixのルートディレクトリでmixコマンド叩くときに、入ってないと怒られちゃうので入れました。
また、地味にcompileも走るので、build-essentialが必要になりました。

### 4-2. postgresqlのイメージを流用

[library/postgres](https://hub.docker.com/_/postgres/)を利用しました。
ユーザ名とパスワードは環境変数で設定できるようなので、docker-compose.ymlで設定しました。

### 4-3. 上記２つをdocker-compose.ymlでリンキングさせるように設定

docker-composeは以下のようになりました。

```docker-compose.yml
pg:
  image: library/postgres:latest
  ports:
    - "5432:5432"
  environment:
    - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    - POSTGRES_USER=${POSTGRES_USER}
    - POSTGRES_DATABASE=phoenix_trello_dev
phoenix-trello:
  image: letusfly85/phoenix-trello:latest
  links:
    - "pg:postgresql"
  ports:
    - "8000:80"
  environment:
    - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    - POSTGRES_USER=${POSTGRES_USER}
    - POSTGRES_DATABASE=phoenix_trello_dev
```

## 5. 所感

* ソースを読んでガチャガチャ動かしみて、phoenixアプリケーションのキャッチアップをしてみようと思います。
* 日本語入力はまだ出来なさそうです。設定なのか、ソース回収が必要なのかも見てみようと思います。
* 紫色じゃない画面がいいなぁ。。。

---

本日はここまでとなります。