2.3. AWSにインストール

Amazon Web Service 上にJijiをインストールします。

  • EC2インスタンス上のAmazon Linuxに、Dockerをインストールして、その上でJijiを実行します。
    • Dockerをインストールできれば他のAMIイメージを利用することもできます。
  • 月額料金をなるべく安く済ませるため、もっともシンプルな構成にしています。
    • 月額: $6.5 + データ転送料 ~
    • CloudWatchでの死活監視など必要であれば、別途設定を行ってください。
  • Amazon Web Serviceのアカウントが用意されていることを前提としているので、事前にご用意ください。

1. EC2のコンソールを開きます。

Amazon Web Service にログインして、機能一覧からEC2を選択してください。 画面

2. 使用するリージョンを選択します。

右上のメニューから、リージョンを選択します。

  • 任意のリージョンを使用できますが、リージョンによってインスタンスの利用料金や提供されている機能が異なるので注意が必要です。
    • 2016-02-16 時点では、最も安い t2.nano インスタンスは、「アジアパシフィック(東京)」より「米国東部 (バージニア北部)」の方が安く済みます。
  • この手順の確認は「米国東部 (バージニア北部)」を利用して行っています。

画面

3. キーペアを作成します。

キーペアは、起動したEC2インスタンスにアクセスするときに使用します。

  1. 「キーペア」を選択します。 画面

  2. 「キーペアの作成」をクリックして、任意の名前でキーペアを作成します。 画面

  3. プライベートキーがダウンロードされるので、保存しておきます。

    ダウンロードしたプライベートキーファイルは、安全な場所に保存してください。

4. EC2インスタンスを作成して起動します。

  1. メニューから「インスタンス」をクリックします。 画面
    一定期間継続して稼働させる場合は、リザーブドインスタンスを使うことで、料金を抑えることができます。 詳しくは、こちらをご覧ください。
  2. 「インスタンスの作成」をクリック 画面

  3. 「Amazon Linux AMI 2015.09.1 (HVM), SSD Volume Type」を選択します。 画面

  4. インスタンスタイプを選択して、「次の手順:インスタンスの詳細の設定」をクリックします。
    • 2016-02-16 時点で最も安い t2.nano を選択します。
    • 無料利用枠を利用する場合は、 t2.micro を選択してください。

    画面

    t2.nano を利用する場合、Dockerコンテナのビルドや削除を行うと、メモリ不足でフリーズする場合があります。 このような場合は、一時的にインスタンスタイプを t2.nano にして操作を実行してください。 システムの実行は t2.nano で問題ありません。
  5. デフォルトの設定のまま、「次の手順:ストレージの追加」をクリックします。 画面

  6. ディスクサイズを設定して、「次の手順:インスタンスのタグ付け」をクリックします。
    • OS領域に8GB、Jijiには保存するバックテストの数にもよりますが4GB程度あれば十分なので、12GB確保すれば問題ありません。
    • 必要に応じてカスタマイズしてください。ただし、サイズを増やすとその分利用料金も高くなります。
    • ディスクサイズは後で変更することもできます。

    画面

  7. デフォルトの設定のまま、「次の手順:セキュリティグループの設定」をクリックします。 画面

  8. セキュリティグループを設定して、「確認と作成」をクリックします。
    • 「セキュリティグループの割り当て」で「新しいセキュリティグループを作成する」を選択します。
    • 「セキュリティグループ名」「説明」に任意の名前を設定します。
    • デフォルトで追加されている「SSH」レコードの「送信元」を自身のIPアドレスの範囲に変更します。
    • 「ルールの追加」から、「HTTP」「HTTPS」を追加します。

    画面

  9. 内容を確認して、「作成」をクリックします。 画面

  10. キーペアの選択ダイアログが表示されるので、2で作成したキーペアを選択し、「インスタンスの作成」をクリックします。 画面

  11. インスタンスの作成が開始されるので、しばらくお待ちください。

5. EC2インスタンスにログインします。

  1. インスタンスが起動したら、詳細画面からパブリックIPアドレスを取得します。 画面

  2. 任意のSSHクライアントを起動し、以下を指定してインスタンスにログインします。

    • IPアドレス: ↑で取得したパブリックIPアドレス
    • ポート番号: 22
    • ユーザー名: ec2-user
    • キーファイル: 2でダウンロードした秘密鍵を指定
    ※詳しい手順はこちらをご覧ください。

6. Docker, Gitをインストールします。

以下のコマンドを実行して、必要なモジュールをインストールします。

# システムをアップデート
$ sudo yum update -y

# Dockerをインストール
$ sudo yum install -y docker
$ docker -v
Docker version 1.9.1, build a34a1d5/1.9.1
$ sudo service docker start
$ sudo chkconfig docker on
$ sudo usermod -a -G docker ec2-user

# docker-composeをインストール
$ curl -L https://github.com/docker/compose/releases/download/1.6.0/docker-compose-`uname -s`-`uname -m` > /tmp/docker-compose
$ sudo mv /tmp/docker-compose /usr/local/bin/
$ sudo chmod +x /usr/local/bin/docker-compose
$ /usr/local/bin/docker-compose -v
docker-compose version 1.6.0, build d99cad6

# git をインストール
$ sudo yum install -y git
$ git --version
git version 2.4.3

7. Docker Compose設定ファイルのひな形をチェックアウトします。

今後、docker-compose コマンドを実行する場合は、チェックアウトしたディレクトリで実行します。 (または、このディレクトリにある docker-compose.yml を引数で指定して実行します。)

$ git clone https://github.com/unageanu/docker-jiji2
$ cd docker-jiji2

8. SSL証明書を用意します。

  • ドメインを所有している場合は、Let’s Encryptを利用して、無料でSSL証明書を取得できます。
    • 取得方法はこちらをご覧ください。

  • ローカルで作成した自己署名証明書を使用することもできます。
    • 自己署名証明書を使用した場合、通信の暗号化はできますがサーバー認証はできません。 ブラウザおよびアプリで警告が表示されますので、ご了承ください。
    • 自己責任でのご利用をお願いします。

  • SSLを利用しない場合は、 docker-compose-without-ssl.yml をご使用ください。
    • SSLプロキシとして使用している Nginx なしの構成でセットアップします。
    • docker-compose-without-ssl.ymldocker-compose.yml にリネームして使用するか、 -f オプションで docker-compose-without-ssl.yml を明示してください。
    • 通信の暗号化は行われませんので、自己責任でのご利用をお願いします。

自己署名証明書を生成する例:

# 秘密鍵を生成
$ openssl genrsa 2048 > server.key
# CSRを作成
$ openssl req -new -key server.key > server.csr
# サーバー証明書を作成
$ openssl x509 -sha256 -days 365 -req -signkey server.key < server.csr > server.crt
# アクセス権を制限
$ sudo chown root.root server.key
$ sudo chmod 600 server.key

9. docker-compose.yml を編集します。

以下の項目を設定します。

  • 秘匿データの暗号化に使うキー ( jiji - environment - USER_SECRET )
    • 必ず変更して使用してください。UIから入力を求められることはないので、任意の長い文字列を使用すればOKです。
  • SSL証明書のパス ( nginx - volumes )
    • 3 で用意したSSL証明書の公開鍵と秘密鍵のパスを設定します。
    • ./path/to/ssl.key のように ./ で始めることで、 docker-compose.yml からの相対パスで指定できます。
  • MongoDBデータの保存先 ( mongodb - volumes )
    • デフォルトでは、MongoDBコンテナ内に作成されます。
    • ホストマシンの任意の場所に保存したい場合は、 volumes のコメントを解除して、保存先のパスを設定します。
  • ポート番号 ( nginx - ports, mongodb - ports, jiji - ports )
    • デフォルトでは、Jijiがポート8443、mongodbがポート27018 を使用します。(SSLを使用しない場合、Jijiは8080を使用します)
    • Jijiのポート( nginx - ports ) を 443 に変更します。(SSLを使用しない場合は、jiji - ports を80に変更します。)

以下は設定例です。

jiji:
  container_name: jiji_jiji
  image: unageanu/jiji:latest
  environment:
    # サーバー内部で秘匿データの暗号化に使うキー
    # 必ず変更して使用してください。
    USER_SECRET: 20e43fa41e75c9fe958f5f11bc9e79d2174b50b
  links:
    - mongodb

mongodb:
  container_name: jiji_mongodb
  image: mongo:3.0.7
  ports:
    # MongoDBのポート番号
    # 必要に応じて変更してください。
    - "27018:27017"
  volumes:
    # MongoDBのデータを保存するディレクトリ
    # デフォルトでは、コンテナ内に作成します。(この場合、コンテナを再作成すると、データが初期化されます)
    # コメントアウトしてパスを設定することで、ホストマシンの任意のディレクトリに変更することができます。
    # './' で始めることで、docker-compose.ymlからの相対パスで指定可能です。
    - ./path/to/data/dir:/data/db

nginx:
  container_name: jiji_nginx
  image: unageanu/jiji-nginx:latest
  links:
    - jiji
  ports:
    # Jijiのポート番号
    # 443に変更します
    - "443:443"
  volumes:
    # SSL証明書のパス
    # './path/to/server.crt' にサーバー証明書、
    # './path/to/server.key' に秘密鍵を指定します。
    # './' で始めることで、docker-compose.ymlからの相対パスで指定可能です。
    - ./path/to/server.crt:/etc/nginx/cert/ssl.crt:ro
    - ./path/to/server.key:/etc/nginx/cert/ssl.key:ro

10. Dockerコンテナを起動します。

$ sudo /usr/local/bin/docker-compose up -d
Creating jiji_mongodb
Creating jiji_jiji
Creating jiji_nginx

以下のコマンドで、起動しているコンテナを確認できます。

$ sudo docker ps -a

起動していれば、以下のURLでJijiにアクセスできます。

https://<インストール先ホスト>:443

※SSLを利用しない場合は以下のURLになります。

http://<インストール先ホスト>:80


※Jijiが動作しない場合、起動ログを確認してください。起動ログは、以下のコマンドで確認できます。

$ sudo docker logs jiji_jiji
$ sudo docker logs jiji_nginx
$ sudo docker logs jiji_mongodb

補足1: コンテナを停止・再起動する

Jijiを停止するには以下のコマンドを実行します。

$ sudo docker stop jiji_nginx
$ sudo docker stop jiji_jiji

停止したコンテナを再起動するには、start コマンドを実行します。

$ sudo docker start jiji_jiji
$ sudo docker start jiji_nginx

補足2: サービスのログを確認する

logsコマンドでコンテナのログを確認できます。

$ sudo docker logs jiji_jiji
$ sudo docker logs jiji_mongodb
$ sudo docker logs jiji_nginx