(快速参考)

20 部署

版本 6.2.0

20 部署

Grails 应用程序可以通过多种方式进行部署,每种方式都有其优缺点。

20.1 独立

"./gradlew bootRun"

您应该非常熟悉这种方法,因为它是开发阶段运行应用程序最常用的方法。 将启动一个嵌入式 Tomcat 服务器,该服务器从开发源代码加载 Web 应用程序,从而使其能够获取对应用程序文件的任何更改。

您可以使用以下命令在生产环境中运行应用程序

./gradlew bootRun -Dgrails.env=prod

您可以使用 bootRun Gradle 任务运行应用程序。 下一个命令使用 Gradle Wrapper

./gradlew bootRun

您可以指定提供 grails.env 系统属性的环境。

./gradlew -Dgrails.env=prod bootRun

可运行的 WAR 或 JAR 文件

在 Grails 3.0 或更高版本中部署的另一种方法是使用对可运行 JAR 或 WAR 文件的新支持。 要创建可运行的归档文件,请运行 grails package

grails package

或者,您可以使用 assemble Gradle 任务。

./gradlew assemble

然后,您可以使用 Java 安装运行 WAR 文件或 JAR 文件

java -Dgrails.env=prod -jar build/libs/mywar-0.1.war    (or .jar)

TAR/ZIP 发行版

注意:TAR/ZIP 发行版程序集已从 Grails 3.1 中删除。

20.2 容器部署(例如 Tomcat)

Grails 应用程序可以部署到 Servlet 容器或应用程序服务器。

WAR 文件

在生产环境中部署 Grails 应用程序的一种常见方法是通过 WAR 文件部署到现有的 Servlet 容器。 容器允许多个应用程序使用不同的路径部署在同一个端口上。

创建 WAR 文件就像执行 war 命令一样简单

grails war

这将在 build/libs 目录中生成一个可以部署到容器的 WAR 文件。

请注意,默认情况下,Grails 会在 WAR 文件中包含一个可嵌入的 Tomcat 版本,以便它可以运行(请参阅上一节),如果您部署到不同版本的 Tomcat,这可能会导致问题。 如果您不打算使用嵌入式容器,那么您应该在部署到 build.gradle 中的生产容器之前删除 Tomcat 依赖项或将范围更改为 testImplementation

testImplementation "org.springframework.boot:spring-boot-starter-tomcat"

应用服务器

Grails 框架要求运行时容器支持 Servlet 3.0 及更高版本。 默认情况下,Grails 框架应用程序捆绑了一个可嵌入的 Tomcat,并且测试主要使用 Tomcat 完成。 任何满足最低要求的 servlet 容器都应该能够运行 Grails 框架应用程序,但可能需要对特定于容器的错误或配置进行一些解决方法。

20.3 部署配置任务

为独立部署设置 HTTPS 和 SSL 证书

要配置 SSL 证书并在 HTTPS 端口而不是 HTTP 上侦听,请将以下属性添加到 application.yml

server:
    port: 8443                                             # The port to listen on
    ssl:
        enabled: true                                      # Activate HTTPS mode on the server port
        key-store: <the-location-of-your-keystore>         # e.g. /etc/tomcat7/keystore/tomcat.keystore
        key-store-password: <your-key-store-password>      # e.g. changeit
        key-alias: <your-key-alias>                        # e.g. tomcat
        key-password: <usually-the-same-as-your-key-store-password>

这些设置控制用于生产部署的嵌入式 Tomcat 容器。 或者,可以在命令行上指定属性。 例如:-Dserver.ssl.enabled=true -Dserver.ssl.key-store=/path/to/keystore

不支持通过应用程序属性同时配置 HTTP 和 HTTPS 连接器。 如果您希望同时拥有两者,则需要以编程方式配置其中之一。 (有关如何执行此操作的更多信息,请参阅下面的操作指南。)

还有其他相关设置。 进一步参考