9.4. アプリケーションの 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.4.1. データベースサービスの作成
Rails アプリケーションには実行中のデータベースサービスが必要です。このサービスには、PostgeSQL データベースイメージを使用します。
データベースサービスを作成するために、oc new-app
コマンドを使用します。このコマンドには、必要な環境変数を渡す必要があります。この環境変数は、データベースコンテナー内で使用します。これらの環境変数は、ユーザー名、パスワード、およびデータベースの名前を設定するために必要です。これらの環境変数の値を任意の値に変更できます。変数は以下のようになります。
- POSTGRESQL_DATABASE
- POSTGRESQL_USER
- POSTGRESQL_PASSWORD
これらの変数を設定すると、以下を確認できます。
- 指定の名前のデータベースが存在する
- 指定の名前のユーザーが存在する
- ユーザーは指定のパスワードで指定のデータベースにアクセスできる
手順
データベースサービスを作成します。
$ oc new-app postgresql -e POSTGRESQL_DATABASE=db_name -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password
データベース管理者のパスワードを設定するには、直前のコマンドに以下を追加します。
-e POSTGRESQL_ADMIN_PASSWORD=admin_pw
進行状況を確認します。
$ oc get pods --watch
9.4.2. フロントエンドサービスの作成
アプリケーションを OpenShift Container Platform にデプロイするには、アプリケーションが置かれるリポジトリーを指定する必要があります。
手順
フロントエンドサービスを作成し、データベースサービスの作成時に設定されたデータベース関連の環境変数を指定します。
$ 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
という名前を指定します。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" } ],
ビルドプロセスを確認します。
$ oc logs -f build/rails-app-1
ビルドが完了すると、OpenShift Container Platform で Pod が実行されていることを確認します。
$ oc get pods
myapp-<number>-<hash>
で始まる行が表示されますが、これは OpenShift Container Platform で実行中のアプリケーションです。データベースの移行スクリプトを実行してデータベースを初期化してからでないと、アプリケーションは機能しません。これを実行する 2 種類の方法があります。
実行中のフロントエンドコンテナーから手動で実行する
rsh
コマンドでフロントエンドコンテナーに exec を実行します。$ oc rsh <FRONTEND_POD_ID>
コンテナー内から移行を実行します。
$ RAILS_ENV=production bundle exec rake db:migrate
development
またはtest
環境で Rails アプリケーションを実行する場合には、RAILS_ENV
の環境変数を指定する必要はありません。
- デプロイメント前のライフサイクルフックをテンプレートに追する
9.4.3. アプリケーションのルートの作成
アプリケーションのルートを作成するためにサービスを公開できます。
手順
www.example.com
などの外部からアクセスできるホスト名を指定してサービスを公開するには、OpenShift Container Platform のルートを使用します。この場合は、以下を入力してフロントエンドサービスを公開する必要があります。$ oc expose service rails-app --hostname=www.example.com
指定するホスト名がルーターの IP アドレスに解決することを確認します。