24 部署到 Heroku
Heroku 是一个可扩展的多语言云应用程序平台。它允许您专注于使用您选择的语言编写应用程序,然后轻松地将它们部署到云端,而无需手动管理服务器、负载均衡、日志聚合等。Heroku 没有,也不需要在 对 JVM 应用程序的通用支持 之外进行任何特殊的 Ratpack 支持。Heroku 是一个丰富的平台,具有许多 元素,例如 Postgres、Redis、Memcache、RabbitMQ、New Relic 等。它是提供 Ratpack 应用程序的引人注目的选择。
部署到 Heroku 通常以源代码形式进行。部署就像在 CI 管道结束时执行 Git push 一样简单。许多流行的云 CI 工具,例如 drone.io 和 Travis-CI(以及其他工具)都对推送到 Heroku 提供方便的支持。
如果您不熟悉 Heroku,建议您阅读 Heroku 快速入门 和 Buildpack 文档。本章的其余部分概述了将 Ratpack 应用程序部署到 Heroku 的要求和必要配置。
1.24 基于 Gradle 的构建
Ratpack 应用程序可以通过任何构建系统构建,但 Ratpack 团队推荐使用 Gradle。Heroku 通过 Gradle buildpack 对 Gradle 提供原生支持,该 buildpack 与 Ratpack Gradle 插件配合良好。
所有 Gradle 项目都应使用 Gradle Wrapper。如果包装脚本存在于您的项目中,Heroku 将检测到您的项目是用 Gradle 构建的。
1.1.24 构建
Gradle buildpack 默认情况下将在检测到使用 Ratpack 时调用 ./gradlew installDist -x test
。installDist
任务由 Ratpack Gradle 插件(在 Gradle 2.3 之前为 installApp
)添加,并且默认情况下应正常工作。这将构建您的应用程序并将其安装到 build/install/«project name»
目录中。
如果您需要运行不同的任务,可以将 stage
任务添加到您的 build.gradle
中。一个典型的 stage
任务可能如下所示
task stage {
dependsOn clean, installDist
}
如果存在 stage
任务,Heroku 将运行它而不是默认任务。
1.1.1.24 设置项目名称
默认情况下,Gradle 使用项目的目录名称作为项目的名称。在 Heroku(以及一些 CI 服务器)中,项目是在具有随机分配名称的临时目录中构建的。为了确保项目使用一致的名称,请在项目的根目录中将声明添加到 settings.gradle
中
rootProject.name = "«project name»"
这对于任何 Gradle 项目来说都是一个好的做法。
2.1.24 运行 (Procfile)
默认情况下,Heroku 将运行以下脚本启动您的应用程序
build/install/«project name»/bin/«project name»
您可以通过在应用程序的根目录中创建一个 Procfile
并在 web:
前缀后指定 Heroku 应用来启动您的应用程序的命令来自定义此命令。
3.1.24 配置
有几种方法可以配置部署到 Heroku 的应用程序的环境。您可能希望使用这些机制来设置环境变量和/或 JVM 系统属性以配置您的应用程序。
使用 ratpack
和 ratpack-groovy
Gradle 插件时使用的应用程序入口点支持使用 JVM 系统属性来贡献到 ServerConfig
(有关更多详细信息,请参见 启动章节 章节)。Ratpack Gradle 插件创建的启动脚本支持标准的 JAVA_OPTS
环境变量和一个特定于应用程序的 «PROJECT_NAME»_OPTS
环境变量。如果您的应用程序名称是 foo-Bar
,则环境变量将被命名为 FOO_BAR_OPTS
。
将所有这些整合在一起的一种方法是通过 env
启动您的应用程序
web: env "FOO_BAR_OPTS=-Dapp.dbPassword=secret" build/install/«project name»/bin/«project name»
一般来说,最好不要使用 JAVA_OPTS
,因为 Heroku 将其设置为 平台的有用默认值。
另一种方法是使用 配置变量。通过 Procfile 设置环境的好处是这些信息位于您的版本控制源代码树中。使用配置变量的好处是它们仅对有权使用 Heroku 查看/更改它们的那些人可见。可以通过为应保密的值(例如密码)设置配置变量并在 Procfile 中引用它们来组合这两种方法。
web: env "FOO_BAR_OPTS=-Dapp.dbPassword=$SECRET_DB_PASSWORD" build/install/«project name»/bin/«project name»
现在可以很容易地看到源代码树中设置了哪些属性和环境变量,但敏感值只能通过 Heroku 管理工具查看。
2.24 其他构建工具和二进制部署
Ratpack 项目没有为其他构建工具提供任何“官方”集成。但是,完全可以使用您喜欢的任何工具为 Heroku 构建 Ratpack 应用程序,甚至以二进制形式部署。
在 Heroku 环境中获得编译后的 Ratpack 应用程序后(通过使用其他构建工具构建或通过二进制部署),您可以简单地通过直接使用 java
来启动应用程序。
web: java ratpack.groovy.GroovyRatpackMain
有关启动 Ratpack 应用程序的更多详细信息,请参见 启动章节。
3.24 一般注意事项
1.3.24 端口
Heroku 为每个应用程序分配一个短暂的端口号,该端口号由 PORT
环境变量提供。如果未设置 ratpack.port
系统属性,Ratpack 默认情况下会遵守此环境变量。