Rails 应用程序服务器 AWS OpsWorks 堆栈层 - AWS OpsWorks

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

Rails 应用程序服务器 AWS OpsWorks 堆栈层

重要

该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请通过 re AWS : Post 或通过 Pre mium Su AWS pp ort 与 AWS Support 团队联系。

注意

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

Rails App Server 层是一个 AWS OpsWorks 堆栈层,它为充当 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 会使用来自应用程序deploy属性的信息创建一个新database.yml文件。如果您将 MySQL 或 Amazon RDS 实例附加到应用程序, AWS OpsWorks Stacks 会将连接信息添加到deploy属性中,从而database.yml自动包含正确的连接数据。

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

AWS OpsWorks 堆栈将以下[:...][:database]属性值合并到。database.yml所需的属性取决于特定的数据库,但必须有host属性,否则 AWS OpsWorks 堆栈将无法创建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 地址。您将看到以下内容: