11.4. 将应用程序部署至 OpenShift Container Platform
您可将您的应用程序部署至 OpenShift Container Platform。
创建 rails-app
项目后,您将自动切换到新的项目命名空间。
在 OpenShift Container Platform 中部署应用程序涉及三个步骤:
- 从 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"
11.4.1. 创建数据库服务
您的 Rails 应用程序需要一个正在运行的数据库服务。对于此服务,请使用 PostgreSQL 数据库镜像。
要创建数据库服务,使用 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
11.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
部署配置的 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 中运行的应用程序。在应用程序正常工作前,您必须运行数据库迁移脚本来初始化数据库。具体可通过两种方式实现:
从正在运行的前端容器手动实现:
使用
rsh
命令执行到前端容器中:$ oc rsh <frontend_pod_id>
从容器内部运行迁移:
$ RAILS_ENV=production bundle exec rake db:migrate
如果在
development
或test
环境中运行 Rails 应用程序,则不必指定RAILS_ENV
环境变量。
- 通过在模板中添加部署前生命周期 hook。
11.4.3. 为您的应用程序创建路由
您可公开服务来为您的应用程序创建路由。
流程
要通过向服务提供外部可访问的主机名(如
www.example.com
)来公开服务,请使用 OpenShift Container Platform 路由。对于您的情况,需要通过键入以下命令来公开前端服务:$ oc expose service rails-app --hostname=www.example.com
确保您指定的主机名解析为路由器的 IP 地址。