Rails App Serve AWS OpsWorks 堆栈层 - AWS OpsWorks

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Rails App Serve AWS OpsWorks 堆栈层

重要

AWS OpsWorks Stacks 不再接受新客户。在 2024 年 5 月 26 日之前,现有客户将能够正常使用 OpsWorks 控制台、API、CLI 和 CloudFormation 资源,届时它们将停产。为准备此过渡,我们建议您尽快将堆栈过渡到AWS Systems Manager。有关更多信息,请参阅 AWS OpsWorks Stacks 生命周期终止常见问题解答将 AWS OpsWorks Stacks 应用程序迁移到 AWS Systems Manager Application Manager

注意

此层仅适用于基于 Linux 的堆栈。

Rails App Server 层是一个 AWS OpsWorks Stacks 层,该层可提供用作 Rails 应用程序服务器的实例的蓝图。

安装:AWS OpsWorks Stacks 使用实例的程序包安装程序来将服务器程序包安装在其默认位置。有关 Apache/Passenger 安装的更多信息,请参阅 Phusion Passenger。有关日志记录的更多信息,请参阅 Log Files。有关 Nginx/Unicorn 安装的更多信息,请参阅 Unicorn

Add Layer 页面提供以下配置选项,所有这些选项都是可选的。

Ruby 版本

您的应用程序将使用的 Ruby 版本。默认值为 2.3。

您还可以通过覆盖 [:opsworks][:ruby_version] 属性来指定您的首选 Ruby 版本。

注意

AWS OpsWorks Stacks 安装供配方和实例代理使用的单独的 Ruby 程序包。有关更多信息,请参阅 Ruby 版本

Rails 堆栈

默认 Rails 堆栈为包含 Phusion PassengerApache2。您还可以使用包含 UnicornNginx

注意

如果您使用 Nginx 和 Unicorn,则必须将 unicorn gem 添加到您的应用程序的 Gemfile 中,如以下示例中所示:

source 'https://rubygems.org' gem 'rails', '3.2.15' ... # Use unicorn as the app server gem 'unicorn' ...
Passenger 版本

如果您已经指定了 Apache2/Passenger,则您必须指定 Passenger 版本。默认值是 5.0.28。

Rubygems 版本

默认 Rubygems 版本是 2.5.1

安装并托管 Bundler

允许您选择是否安装并托管 Bundler。默认值是 Yes

Bundler 版本

默认 Bundler 版本是 1.12.5。

自定义安全组

如果您选择不自动将内置 AWS OpsWorks Stacks 安全组与您的层关联,则会显示此设置。您必须指定要将哪一安全组与层关联起来。有关更多信息,请参阅 创建新堆栈

Elastic Load Balancer

您可以将 Elastic Load Balancing 负载均衡器连接到层的实例。

您可以使用自定义 JSON 或自定义属性文件来修改某些配置设置。有关更多信息,请参阅 覆盖属性。要查看可以覆盖的 Apache、Nginx、Phusion Passenger 和 Unicorn 属性的列表,请参阅内置说明书属性

重要

如果您的 Ruby on Rails 应用程序使用的是 SSL,我们建议您禁用 SSLv3 (如果可能的话),以应对 CVE-2014-3566 中介绍的漏洞。有关更多信息,请参阅 对 Rails 服务器禁用 SSLv3

对 Rails 服务器禁用 SSLv3

要对 Rails 服务器禁用 SSLv3,请将层的 Ruby Version (Ruby 版本) 设置更新为 2.1 或更高版本,这样就会安装 Ruby 2.1.4 或更高版本作为应用程序要使用的版本。

  • 将层的 Ruby Version (Ruby 版本) 设置更新为 2.1 或更高版本。

  • 为您的 Rails 堆栈更新配置文件,如下所示。

带 Phusion Passenger 的 Apache

更新 Apache 服务器的 SSLProtocol 文件中的 ssl.conf 设置,如为 Apache 服务器禁用 SSLv3中所述。

带 Unicorn 的 Nginx

在 Nginx 服务器的 ssl_protocols 文件中添加一个显式 nginx.conf 指令。要禁用 SSLv3,覆盖内置 nginx 说明书nginx.conf.erb 模板文件,Rails App Server 层的 Setup 配方使用该文件来创建 nginx.conf,并添加以下指令:

ssl_protocols TLSv1.2;

有关如何配置 nginx.conf 的更多信息,请参阅 Configuring HTTPS servers。有关如何覆盖内置模板的更多信息,请参阅使用自定义模板

连接到数据库

当您部署应用程序时,AWS OpsWorks Stacks 将使用应用程序的 database.yml 属性deploy 中的信息创建一个新的 文件。如果您将一个 MySQL 或 Amazon RDS 实例连接到应用程序,AWS OpsWorks Stacks 会将连接信息添加到 deploy 属性,这样,database.yml 会自动包含正确的连接数据。

如果应用程序没有连接的数据库,默认情况下,AWS OpsWorks Stacks 不会向 deploy 属性添加任何连接信息,也不会创建 database.yml。如果您希望使用不同的数据库,您可以使用自定义 JSON 将数据库属性以及连接信息添加到应用程序的 deploy 属性。这些属性均在 ["deploy"]["appshortname"]["database"] 下,其中 appshortname 是应用程序的短名称,该短名称由 AWS OpsWorks Stacks 根据应用程序名称生成。您在自定义 JSON 中指定的值将覆盖任何默认设置。有关更多信息,请参阅 添加应用程序

AWS OpsWorks Stacks 将以下 [:...][:database] 属性值整合到 database.yml 中。所需的属性取决于特定数据库,但您必须有一个 host 属性,否则 AWS OpsWorks Stacks 将不会创建 database.yml

  • [:adapter] (String)-数据库适配器,如 mysql

  • [:database](字符串)-数据库名称。

  • [:encoding](字符串)-编码,这通常被设置为 utf8

  • [:host](字符串)-主机 URL,如 railsexample.cdlqlk5uwd0k.us-west-2.rds.amazonaws.com

  • [:reconnect](布尔值)-如果连接不再存在,应用程序是否重新连接。

  • [:password](字符串)-数据库密码。

  • [:port] (数字)。-数据库的端口号。使用此属性覆盖默认端口号,该属性由适配器设置。

  • [:username](字符串)-数据库用户名称。

以下示例显示了其短名称为 myapp 的应用程序的自定义 JSON。

{ "deploy" : { "myapp" : { "database" : { "adapter" : "adapter", "database" : "databasename", "host" : "host", "password" : "password", "port" : portnumber "reconnect" : true/false, "username" : "username" } } } }

有关如何指定自定义 JSON 的信息,请参阅使用自定义 JSON。要查看用于创建 database.yml (database.yml.erb) 的模板,请转至内置说明书存储库

部署 Ruby on Rails 应用程序

您可以在任一受支持的存储库中部署 Ruby on Rails 应用程序。下面的内容介绍了如何将示例 Ruby on Rails 应用程序部署到运行 Apache/Passenger Rails 堆栈的服务器中。示例代码存储在公共存储 GitHub库中,但其他支持的存储库的基本过程相同。有关如何创建和部署应用程序的更多信息,请参阅应用程序。要查看包含大量评论的示例代码,请访问 https://github.com/awslabs/ opsworks-demo-rails-photo-share-app

从 GitHub 存储库部署 Ruby on Rails 应用程序
  1. 创建包含 Rails App Server 层的堆栈 (Apache/Passenger 作为 Rails 堆栈),将一个全天候实例添加到层,然后启动实例

  2. 当实例处于联机状态后,将一个应用程序添加到堆栈,并指定以下设置:

    • Name - 您喜欢的任何名称;示例中使用的是 PhotoPoll

      AWS OpsWorks Stacks 使用此名称实现显示说明的目的,并生成一个短名称以供内部使用和在堆栈配置和部署属性中标识该应用程序。例如, PhotoPoll 简称是 photopoll。

    • App type - Ruby on Rails

    • Rails environment - 可用的环境由应用程序决定。

      示例应用程序有三个:developmenttestproduction。在此示例中,将环境设置为 development。查看每个环境的描述的示例代码。

    • Repository type -任何受支持的存储库类型。在此示例中指定 Git

    • Repository URL - 将从其中部署代码的存储库。

      在此示例中,将 URL 设置为 git://github.com/awslabs/opsworks-demo-rails-photo-share-app

    对其余设置使用默认值,然后单击 Add App 创建应用程序。

  3. 将应用程序部署到 Rails App Server 实例。

  4. 部署完成后,转到 实例 页面,然后单击 Rails App Server 实例的公有 IP 地址。您将看到以下内容: