9.3. アプリケーションの OpenShift Container Platform へのデプロイ

OpenShift Container Platform にアプリケーションをデプロイすることができます。

rails-app プロジェクトの作成後、新規プロジェクトの namespace に自動的に切り替えられます。

OpenShift Container Platform へのアプリケーションのデプロイでは 3 つの手順を実行します。

  • OpenShift Container Platform の PostgreSQL イメージからデータベースサービスを作成します。
  • データベースサービスと連動する OpenShift Container Platform の Ruby 2.0 ビルダーイメージおよび Ruby on Rails ソースコードのフロントエンドサービスを作成します。
  • アプリケーションのルートを作成します。

手順

  • Ruby on Rails アプリケーションをデプロイするには、アプリケーション用に新規のプロジェクトを作成します。

    $ oc new-project rails-app --description="My Rails application" --display-name="Rails Application"

9.3.1. データベースサービスの作成

Rails アプリケーションには実行中のデータベースサービスが必要です。このサービスには、PostgeSQL データベースイメージを使用します。

データベースサービスを作成するために、oc new-app コマンドを使用します。このコマンドには、必要な環境変数を渡す必要があります。この環境変数は、データベースコンテナー内で使用します。これらの環境変数は、ユーザー名、パスワード、およびデータベースの名前を設定するために必要です。これらの環境変数の値を任意の値に変更できます。変数は以下のようになります。

  • POSTGRESQL_DATABASE
  • POSTGRESQL_USER
  • POSTGRESQL_PASSWORD

これらの変数を設定すると、以下を確認できます。

  • 指定の名前のデータベースが存在する
  • 指定の名前のユーザーが存在する
  • ユーザーは指定のパスワードで指定のデータベースにアクセスできる

手順

  1. データベースサービスを作成します。

    $ oc new-app postgresql -e POSTGRESQL_DATABASE=db_name -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password

    データベース管理者のパスワードを設定するには、直前のコマンドに以下を追加します。

    -e POSTGRESQL_ADMIN_PASSWORD=admin_pw
  2. 進行状況を確認します。

    $ oc get pods --watch

9.3.2. フロントエンドサービスの作成

アプリケーションを OpenShift Container Platform にデプロイするには、アプリケーションが置かれるリポジトリーを指定する必要があります。

手順

  1. フロントエンドサービスを作成し、データベースサービスの作成時に設定されたデータベース関連の環境変数を指定します。

    $ oc new-app path/to/source/code --name=rails-app -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password -e POSTGRESQL_DATABASE=db_name -e DATABASE_SERVICE_NAME=postgresql

    このコマンドでは、OpenShift Container Platform は指定された環境変数を使用してソースコードの取得、ビルダーのセットアップ、アプリケーションイメージのビルド、新規に作成されたイメージのデプロイを実行します。このアプリケーションには rails-app という名前を指定します。

  2. rails-app DeploymentConfig の JSON ドキュメントを参照して、環境変数が追加されたかどうかを確認できます。

    $ oc get dc rails-app -o json

    以下のセクションが表示されるはずです。

    env": [
        {
            "name": "POSTGRESQL_USER",
            "value": "username"
        },
        {
            "name": "POSTGRESQL_PASSWORD",
            "value": "password"
        },
        {
            "name": "POSTGRESQL_DATABASE",
            "value": "db_name"
        },
        {
            "name": "DATABASE_SERVICE_NAME",
            "value": "postgresql"
        }
    
    ],
  3. ビルドプロセスを確認します。

    $ oc logs -f build/rails-app-1
  4. ビルドが完了すると、OpenShift Container Platform で Pod が実行されていることを確認します。

    $ oc get pods

    myapp-<number>-<hash> で始まる行が表示されますが、これは OpenShift Container Platform で実行中のアプリケーションです。

  5. データベースの移行スクリプトを実行してデータベースを初期化してからでないと、アプリケーションは機能しません。これを実行する 2 種類の方法があります。

    • 実行中のフロントエンドコンテナーから手動で実行する

      • rsh コマンドでフロントエンドコンテナーに exec を実行します。

          $ oc rsh <FRONTEND_POD_ID>
      • コンテナー内から移行を実行します。

          $ RAILS_ENV=production bundle exec rake db:migrate

        development または test 環境で Rails アプリケーションを実行する場合には、RAILS_ENV の環境変数を指定する必要はありません。

    • デプロイメント前のライフサイクルフックをテンプレートに追する

9.3.3. アプリケーションのルートの作成

アプリケーションのルートを作成するためにサービスを公開できます。

手順

  • www.example.com などの外部からアクセスできるホスト名を指定してサービスを公開するには、OpenShift Container Platform のルートを使用します。この場合は、以下を入力してフロントエンドサービスを公開する必要があります。

    $ oc expose service rails-app --hostname=www.example.com
警告

指定するホスト名がルーターの IP アドレスに解決することを確認します。